文件上传漏洞靶场--upload-labs通关过程

文件上传漏洞靶场–upload-labs通关过程

Pass-01(前端验证)

点击提示:

文件上传漏洞靶场--upload-labs通关过程_第1张图片

提示我们该文件类型不允许上传,应该是前端对文件类型进行了验证。

对于前端验证,我们有多种方法可进行绕过:但burp抓包方便快速。

这里直接修改文件后缀名为白名单中的后缀名,然后抓包进行修改

文件上传漏洞靶场--upload-labs通关过程_第2张图片

直接将文件名改为1.php,然后进行上传

如图,表示上传成功。

文件上传漏洞靶场--upload-labs通关过程_第3张图片

Pass-02(MIME验证)

提示表示:本pass在服务端对数据包的MIME进行检查!

MIME是HTTP头文件中的Content-Type类型,如果上传的是PHP文件的话,对应的Content-Type就是text/html,而如果是合法上传的jpg文件的话,Content-Type就是image/jpg。

服务器在接收到请求时,会对Content-Type进行判断,合法则进行后续流程,不合法则终止上传。

对于MIME检测,我们可以使用burpsuite进行抓包修改,可以修改文件类型,然后抓包修改为php,也可以修改Content-Type为合法的Content-Type。

这里我们选择了修改文件后缀名,然后上传,抓包,修改后缀名,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VlXRKmlS-1647923609101)(文件上传漏洞靶场–upload-labs通关过程.assets/image-20220124205816323-16430290977861.png)]

可以看到upload路径已经有了2.php,表明上传成功。

文件上传漏洞靶场--upload-labs通关过程_第4张图片

Pass-03(黑名单验证,特殊后缀)

提示:本pass禁止上传.asp|.aspx|.php|.jsp后缀文件

**注意:php语言除了可以解析以php为后缀的文件,还可以解析php2,php3、php4、php5这些后缀的文件。**如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过。这里我们直接上传一个.php5文件

文件上传漏洞靶场--upload-labs通关过程_第5张图片

结果如图

文件上传漏洞靶场--upload-labs通关过程_第6张图片

Pass-04(黑名单验证,.htaccess)

提示:本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件!

.htaccess文件内容


SetHandler application/x-httpd-php
AddType application/x-httpd-php .jpg				#将.jpg后缀的文件作为PHP文件解析

Pass-05(黑名单验证,.user.ini.)

上传一个.user.ini文件, php.ini是php默认的配置文件,其中包括了很多php的配置,而.user.ini实际上就是一个可以由用户“自定义”的php.ini,内容为:

auto_prepend_file=5.png

.user.ini配置参考的PHP 通过.user.ini 绕过黑名单限制,在.user.ini设置auto_prepend_file属性
下方的配置的意思是在.user.ini相同的目录下,所有的php文件都包含5.png这个文件
所以之后我们就可以利用到readme.php包含一个我们上传的木马文件,再连接readme.php文件达到连接一句话木马的目的

文件上传漏洞靶场--upload-labs通关过程_第7张图片

Pass-06(黑名单验证,大小写绕过)

查看源码:

$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空

发现没有检测大小写(下面这个函数)

$file_ext = strtolower($file_ext); //转换为小写

去除对文件后缀名的转为小写设定,于是直接选择后缀名为.Php等非黑名单中存在的格式上传。

Pass-07(黑名单验证,空格绕过)

去除了对文件后缀名的空格过滤,选择后缀为.php的一句话上传,抓包后在后面增加空格,成功绕过

文件上传漏洞靶场--upload-labs通关过程_第8张图片

Pass-08(黑名单验证,点号绕过)

去除了对文件后缀名的点号过滤,选择选择后缀为.php的一句话上传,抓包后在后面增加点,成功绕

文件上传漏洞靶场--upload-labs通关过程_第9张图片

Pass-09(黑名单验证,特殊字符::$DATA绕过)

去除了对字符串:: D A T A 的 过 滤 , 选 择 选 择 后 缀 为 ‘ . p h p ‘ 的 一 句 话 上 传 , 抓 包 后 在 后 面 增 加 ‘ : : DATA的过滤,选择选择后缀为`.php`的一句话上传,抓包后在后面增加`:: DATA.php::DATA`,上传成功。
文件上传漏洞靶场--upload-labs通关过程_第10张图片

Pass-10(黑名单)

查看源码后,发现其路径拼接的是$file_name而不是$file_ext,而$file_name只处理了文件名末尾的点

文件上传漏洞靶场--upload-labs通关过程_第11张图片

Pass-11(黑名单验证,双写绕过)

查看源码后,发现其对存在黑名单中的字符进行替换,但str_ireplace()函数只替换一次,因此修改文件名为11.pphphp后成功绕过。
文件上传漏洞靶场--upload-labs通关过程_第12张图片

Pass-12(白名单验证,0x00截断)

查看源码和提示,上传路径可控,并且是最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。原理是:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。

文件上传漏洞靶场--upload-labs通关过程_第13张图片

Pass-13(白名单验证,0x00截断)

与Pass-12的区别是这里使用POST传地址,POST不会对里面的数据自动解码,需要在Hex中修改。

文件上传漏洞靶场--upload-labs通关过程_第14张图片

Pass-14(白名单验证,图片马)

上传图片马,查看源码后,意思是:读取上传文件的前两个字节内容,unpack解码后,使用intval转换为10进制,默认为10进制,根据转换后的结果判断图片类型。

copy 1.png /b + shell.php /a  webshell.jpg

你可能感兴趣的:(渗透测试,靶场实战,web安全)