DVWA系列之File Upload(文件上传)源码分析及漏洞利用

File Upload

File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限。

因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

文件上传漏洞的利用是有限制条件

  • 能够成功上传木马文件
  • 上传文件必须能够被执行
  • 上传文件的路径必须可知

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第1张图片

目录

low级别源码分析

medium级别源码分析

high级别源码分析

impossible级别源码分析


low级别源码分析

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第2张图片

basename() 函数:返回路径中的文件名部分。

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第3张图片

服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。

漏洞利用
该漏洞完全满足其限制条件

上传一句话木马

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第4张图片

上传成功,并返回了服务器的上传路径如下:

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第5张图片

打开中国菜刀,右键添加,地址栏填入上传文件所在路径,http://192.168.109.140/dvwa/hackable/uploads/hack.php

参数名(一句话木马口令)为a

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第6张图片

然后菜刀就会通过向服务器发送包含a参数的post请求,在服务器上执行任意命令,获取webshell权限。

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第7张图片

可以下载、修改服务器的所有文件。

打开服务器的模拟终端:

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第8张图片


medium级别源码分析

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第9张图片

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第10张图片

从源码中很明显可以看出,函数对上传文件的类型和大小作了限制,上传文件类型必须是image/jpeg或者image/png,且上传文件大小不能超过100000B(大约等于97.6KB)

漏洞利用

可采用打组合拳的方式(文件包含+文件上传)

采用一句话木马,文件大小基本不会超过最大限制,至于文件类型的检查,可以尝试修改文件名为hack.png或者hack.jpeg

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第11张图片

上传成功

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第12张图片

菜刀连接

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第13张图片

连接失败

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第14张图片

中国菜刀的原理:向上传文件发送包含参数的post请求,通过控制参数来执行不同的命令,而这里服务器将木马文件解析成了图片文件,因此向其发送post请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。

为了让服务器将其解析为php文件,我们可以采用文件包含的方式,将地址栏内容改为如下所示:

http://192.168.109.140/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.109.140/dvwa/hackable/uploads/hack.png

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第15张图片DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第16张图片

菜刀连接:连接失败,下面均显示html格式代码,经多次尝试,方法没错,是平台问题

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第17张图片

通过burpsuite抓包,修改文件类型,绕过

上传文件hack.png,打开代理和开启burpsuite,单击upload,进行抓包

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第18张图片

修改成功!

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第19张图片

截断绕过

在php版本小于5.3.4的服务器中,当magic_quote_gpc选项为off时,可以在文件名中使用%00截断

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第20张图片

可以把上传文件命名为hack.php%00.png,上传,抓包

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第21张图片

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第22张图片

显示上传成功,但不知道为什么%00没有过滤掉,猜测可能是phpstudy环境问题

这里有能成功做出来的小伙伴,希望可以请教一下,谢谢!


high级别源码分析

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第23张图片

与medium级别相比,增加了strrpos()函数和getimagesize()函数,从源码中发现对文件上传的格式做了更加严格的限制,要求上传文件名形式必须是”*.jpg”、”*.jpeg” 、”*.png”其中之一,而且限制了上传文件的文件头必须为图像类型。

strrpos() 函数:查找字符串在另一字符串中最后一次出现的位置。在这里是从文件名中找到含"."的字符

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第24张图片

getimagesize()函数:用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第25张图片

漏洞利用

由于对文件类型和格式有了严格的限制,我们可以尝试将 一句话木马文件与图片合并成一个图片类型的文件,具体如下:

copy 图片名/b+文件名/a 合并后的图片名

查看合并后的图片文件

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第26张图片

上传、抓包

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第27张图片

点击forward,发现一句话马图片上传成功

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第28张图片

使用菜刀连接

注意:URL使用(文件包含+文件上传)的high级别绕过

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第29张图片

http://192.168.109.139/dvwa/vulnerabilities/fi/?page=file:///C:\phpStudy\PHPTutorial\WWW\dvwa\hackable\uploads\hack2.png

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第30张图片

菜刀连接依旧失败!原因未知……


impossible级别源码分析

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第31张图片

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第32张图片

与high级别相比,增加了Anti-CSRF token防护CSRF攻击,对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。

md5() 函数:计算字符串的 MD5 散列

DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第33张图片        DVWA系列之File Upload(文件上传)源码分析及漏洞利用_第34张图片

销毁图像

DIRECTORY_SEPARATOR()是一个显示系统分隔符的命令,在这里显示"."

ini_get(string $varname):string  成功是返回配置选项的值,这里嵌套在判断语句,判断上传的tmp目录是否为空

imagejpeg ( image , filename , quality):从image图像以filename为文件名创建一个JPEG图像,可选参数quality,范围从0(最差质量,文件更小)到100(最佳质量,文件最大)。

你可能感兴趣的:(渗透学习)