您好,欢迎访问老男孩IT教育在线教育有限公司!

400-609-2893

全国咨询热线

您现在所在位置:主页 > 通知资讯 >

任意下载上传漏洞 网络安全学习

更新时间:2020-10-30

任意文件下载漏洞: 敏感数据暴露

文件下载功能在很多 web 系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件响应给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。

任意下载上传漏洞怎么办?老男孩网络安全学习

漏洞危害:

下载服务器任意文件,如脚本代码,服务及系统配置文件等;

可用得到的代码进一步代码审计,得到更多可利用漏洞

利用条件:

存在读文件的函数

读取文件的路径用户可控且未校验或校验不严

输出了文件内容

漏洞发现:

1、Google hacking 利用:

payload:inurl:"readfile.php?file="

2、从链接上看:

payload:download.php?path=

payload:download.php?file=

payload:down.php?file=

payload:data.php?file=

payload:readfile.php?file=

payload:read.php?filename=

3、从参数名看:

payload:&Data=                                              payload:WEB-INF

payload:&path=                                              payload:META-INF

payload:&src=                                                payload:&menu=

payload:&Inputfile=                                        payload:&filep=

payload:&filepath=                                         payload:&readfile=

payload:&RealPath=                                      payload:&dis=

payload:&url=                                                 payload:&Lang=

payload:&urls=

任意文件下载利用思路:

1、正常情况下的利用思路:

下载常规的配置文件,例如: ssh,weblogic,ftp,mysql 等相关配置

下载各种.log 文件,从中寻找一些后台地址,文件上传点之类的地方。

下载 web 业务文件进行白盒审计,利用漏洞进一步攻入服务器。

2、当遇到权限问题的时候:(尝试读取/root/.bash_history 看自己是否有 root 权限。)

如果没有 root 权限

我们只能按部就班的利用../来回跳转读取一些.ssh 下的配置信息文件,读取 mysql 下的.bash_history 文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。

如果我们遇到的是 java+oracle/ jsp+oracle 环境,可以先下载/WEB-INF/classes/applicationContext.xml文件,这里面记载的是 web 服务器的相应配置,然后下载/WEB-INF/classes/xxx/xxx/ccc.class 对文件进行反编译,然后搜索文件中的 upload 关键字看是否存在一些 api 接口,如果存在的话我们可以本地构造上传页面用 api 接口将我们的文件传输进服务器。

如果具有 root 权限

这时候很多人肯定会说   具有 root 权限直接去读 shadow 文件了   但是很多时候我们遇到的服务器可能只对外开放了 80,443 两个端口这时候我们即使获得了密码作用也不大,但是具备 root 权限对任意文件下载利用是绝对的。

3、在 linux 中的 locate 命令:

locate 是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次。

当我们不知道路径是什么的情况下,这个可以说是一个核武器了,我们利用任意文件下载漏洞将 mlocate.db 文件下载下来,利用 locate 命令将数据输出成文件,这里面包含了全部的文件路径信息。

locate 读取方法:locate mlocate.db admin

可以将 mlocate.db 中包含 admin 内容全部输出来,但是这个文件只有 root 用户才能读取。

4、常见利用文件:

Windows:

C:oot.ini //查看系统版本

C:WindowsSystem32inetsrvMetaBase.xml //IIS 配置文件

C:Windows epairsam //存储系统初次安装的密码

C:Program Filesmysqlmy.ini //Mysql 配置

C:Program Filesmysqldatamysqluser.MYD //Mysql root

C:Windowsphp.ini //php 配置信息

C:Windowsmy.ini //Mysql 配置信息

C:Windowswin.ini //Windows 系统的一个基本系统配置文件

Linux:

/root/.ssh/authorized_keys

/root/.ssh/id_rsa

/root/.ssh/id_ras.keystore

/root/.ssh/known_hosts //记录每个访问计算机用户的公钥

/etc/passwd

/etc/shadow

/etc/my.cnf //mysql 配置文件

/etc/httpd/conf/httpd.conf //apache 配置文件

/root/.bash_history //用户历史命令记录文件

/root/.mysql_history //mysql 历史命令记录文件

/proc/mounts //记录系统挂载设备

/porc/config.gz //内核配置文件

/var/lib/mlocate/mlocate.db //全文件路径

/porc/self/cmdline //当前进程的 cmdline 参数

漏洞验证:

index.php?f=../../../../../../etc/passwd

index.php?f=../index.php

index.php?f=file:///etc/passwd

当参数 f 的参数值为 php 文件时,若是文件被解析则是文件包含漏洞,若显示源码或提示下载则是文件查看与下载漏洞。

任意文件下载防御:

过滤".",使用户在 url 中不能回溯上级目录

正则严格判断用户输入参数的格式(写死路径)

php.ini 配置 open_basedir 限定文件访问范围

如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
 

任意文件上传漏洞:

文件上传功能在 web 应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被 webshell。

漏洞产生的原理: 限制:由于安全问题,一般 web 程序不支持直接上传脚本文件(如 xxx.php)

突破:解析漏洞的情况下,代码文件的格式(后缀)可以不规范(如 apache 可将 xxx.php.jpg 解析成 xxx.php,此时 jpg 文件含有 php 代码即相当上传了 webshell)

漏洞的危害:

导致网站甚至整个服务器被控制,恶意的脚本文件又称为 WebShell,WebShell 具有强大的功能,如查看服务器目录、执行系统命令等。

upload-labs 是男人就闯 20 关:upload-labs 简介 upload-labs 的关卡设置

任意文件下载漏洞,网络安全培训面授1

任意文件下载漏洞,网络安全培训面授2

Pass-01  本 pass 在客户端使用 js 对不合法图片进行检查!

前端限制几乎等于没有限制,从客户端修改前端代码或者通过 burpsuite 抓包修改都可以轻松突破防御。

方法一:首先观察前端的代码,当页面发生改变时,会调用这个 checkFile 函数来检查上传的是不是图片,我们只需要在前端将 checkFile 函数删除,就能上传一个一个非图片文件。

任意文件下载漏洞,网络安全培训面授3

方法二:把以.php 结尾的改为以.jpg|.png|.gif 结尾上传,用 burpsuite 抓包,再把其改回.php 即可上传成功。

任意文件下载漏洞,网络安全培训面授4

Pass-02  本 pass 在服务端对数据包的 MIME 进行检查!

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

每个 MIME 类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 image 等,后面定义具体的种类。

任意文件下载漏洞,网络安全培训面授6

截断上传数据包,修改 Content-Type 为 image/gif,然后放行数据包。

任意文件下载漏洞,网络安全培训面授7

Pass-03  本 pass 禁止上传.asp|.aspx|.php|.jsp 后缀文件! 这里是黑名单验证(‘.asp‘,‘.aspx‘,‘.php‘,‘.jsp‘),我们可上传 php3,php5...等这样可以被服务器解析的后缀名

任意文件下载漏洞,网络安全培训面授8

Pass-04  本 pass 禁止上传.asp|.aspx|.php|.jsp 及其衍生后缀文件!

分析代码发现,这里对上传的后缀名的判断增加了,php3.php5....已经不允许上传,但是没有限制.htaccess 文件的上传。

方法一:当上传了.htaccess 文件的时候,.htaccess 文件中有如下三行代码,会使所有格式文件都按照 PHP 格式执行。所以此时上传一个带有小马的图片上去之后再将.htaccess 文件上传即可。

任意文件下载漏洞,网络安全培训面授9

方法二:另外一种方法就是利用 PHP 和 Windows 环境的叠加特性,以下符号在正则匹配时的相等性:

双引号"    =点号.

大于符号>  =问号?

小于符号<  =星号*

先上传一个名为 webshell.php:.jpg 的文件,上传成功后会生成 4.php 的空文件,大小为 0KB.

任意文件下载漏洞,网络安全培训面授10

然后将文件名改为 webshell.<或 webshell.<<<或 webshell.>>>或 webshell.>><后再次上传,重写 webshell.php 文件内容,Webshell 代码就会写入原来的 webshell.php 空文件中。

任意文件下载漏洞,网络安全培训面授11

Pass-05  本 pass 禁止上传.asp|.aspx|.php|.jsp 及其衍生和 htaccess 后缀文件!

分析代码,发现以.htaccess 为后缀的文件已经不允许上传,但是   file_ext); //转换为小写   这一句没有了,我们就可以使用文件名后缀大小写混合绕过,把 1.php 改为 1.phP...来上传

任意文件下载漏洞,网络安全培训面授12

Pass-06  本 pass 禁止上传所有可以解析的后缀!

利用 Windows 系统的文件名特性。文件名最后增加空格和点,写成 1.php .,这个需要用 burpsuite 抓包修改,上传后保存在 Windows 系统上的文件名最后的一个.会被去掉,实际上保存的文件名就是 1.php

任意文件下载漏洞,网络安全培训面授13

Pass-07  本 pass 禁止上传所有可以解析的后缀!

原理同 Pass-06,文件名后加点和空格,改成 1.php .

任意文件下载漏洞,网络安全培训面授14

Pass-08  本 pass 没有去除字符串::$DATA

分析代码,少了  DATA‘, ‘‘, DATA    这一句,我们可以采用Windows文件流特性绕过,文件名改成1.php::$DATA , 上传成功后保存的文件名其实是 1.php

任意文件下载漏洞,网络安全培训面授15

Pass-09  本 pass 只允许上传.jpg|.png|.gif 后缀的文件!

原理同 Pass-06,上传文件名后加上点+空格+点,改为 1.php. .

任意文件下载漏洞,网络安全培训面授16

Pass-10  本 pass 会从文件名中去除.asp|.aspx|.php|.jsp 及其衍生和 htaccess 字符

分析代码,由于 deny_ext,"", $file_name);  只对文件后缀名进行一次过滤,这样的话,双写文件名绕过,文件名改成 1.pphphp

任意文件下载漏洞,网络安全培训面授17

Pass-11  一条可以截断的路

分析代码,这是以时间戳的方式对上传文件进行命名,使用上传路径名%00 截断绕过,不过这需要对文件有足够的权限,比如说创建文件夹,上传的文件名写成 1.jpg, save_path 改成../upload/1.php%00 ( 1.php%00.jpg 经过 url 转码后会变为 1.php.jpg ),最后保存下来的文件就是 1.php

php 版本要小于 5.3.4,5.3.4 及以上已经修复该问题;magic_quotes_gpc 需要为 OFF 状态

任意文件下载漏洞,网络安全培训面授18

Pass-12  又是一条截断的路

原理同 Pass-11,上传路径 0x00 绕过。先把 save_path 改成../upload/77777777777.php。然后利用 Burpsuite 的 Hex 功能将 70 68 70 后面的字符改成 00。得到../upload/77777777777.php

任意文件下载漏洞,网络安全培训面授19

任意文件下载漏洞,网络安全培训面授20

Pass-13  本 pass 检查图标内容开头 2 个字节!

绕过文件头检查,添加 GIF 图片的文件头 GIF89a,绕过 GIF 图片检查。

任意文件下载漏洞,网络安全培训面授21

Pass-14  本 pass 使用 getimagesize()检查是否为图片文件!

getimagesize() 函数用于获取图像尺寸,索引 2 给出的是图像的类型,返回的是数字,其中 1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM

这里有详解: https://blog.csdn.net/sanbingyutuoniao123/article/details/52166617

image_type_to_extension()函数用于获取图片后缀

任意文件下载漏洞,网络安全培训面授22

Pass-15  本 pass 使用 exif_imagetype()检查是否为图片文件!

exif_imagetype()此函数是 php 内置函数,用来获取图片类型

任意文件下载漏洞,网络安全培训面授23

Pass-16  本 pass 重新渲染了图片!坚强的木马

原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将 Webshell 代码插在该部分,然后上传。具体实现需要自己编写 Python 程序,人工尝试基本是不可能构造出能绕过渲染函数的图片 webshell 的。

任意文件下载漏洞,网络安全培训面授24

Pass-17    争分夺秒的比拼

利用条件竞争删除文件时间差绕过。使用命令 pip install hackhttp 安装 hackhttp 模块,运行下面的 Python 代码即可。如果还是删除太快,可以适当调整线程并发数。

这关利用的是竞争条件,服务器先允许你上传文件,然后检测是否合法,不合法再删除,我们要利用的就是在服务器删除前,访问到我们上传的 php。

任意文件下载漏洞,网络安全培训面授25

任意文件下载漏洞,网络安全培训面授32

Pass-18  需要代码审计!

利用上传重命名竞争+Apache 解析漏洞,成功绕过。上传名字为 18.php.7Z 的文件,快速重复提交该数据包,会提示文件已经被上传,但没有被重命名。快速提交数据包,可以让文件名字不被重命名上传成功。

任意文件下载漏洞,网络安全培训面授27

Pass-19  本 pass 的取文件名通过$_POST 来获取。

本关会自动把上传的文件改名为 jpg 结尾的文件,需要把上传的文件名和改动后的文件名都改成 PHP 结尾,然后用 Hex 功能将 php 后面一位改成 00,即可成功上传。

任意文件下载漏洞,网络安全培训面授28

上传的文件名

任意文件下载漏洞,网络安全培训面授29

重新命名后的

任意文件下载漏洞,网络安全培训面授30

Pass-20  Pass-20 来源于 CTF,请审计代码!

解题思路:先将文件名改为 1.php,然后将重新命名也改为 1.php。再复制一遍重命名的代码,为了欺骗服务端,将文件格式写为 jpg。save_name[2],

任意文件下载漏洞,网络安全培训面授31

如何防范:

在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:

1、验证文件类型、后缀名、大小;

2、验证文件的上传方式;

3、对文件进行一定复杂的重命名;

4、不要暴露文件上传后的路径;

原文链接: https://www.jianshu.com/p/9ce54688f6e3

在线客服

ONLINE SERVICE

联系电话

400-609-2893

返回顶部