0X00 靶场准备
靶场项目地址:https://github.com/c0ny1/upload-labs
下载解压放在PHPstudy的www目录下即可
注意靶机的病毒防护要关了,不然一直上传失败
0X01 Pass-1
上传一个webshell到服务器,选择一个PHP一句话木马文件,上传
提示我们该文件类型不允许上传,应该是前端对文件类型进行了验证。
检查源码,发现表单提交时会触发checkFile函数,然后对我们的文件后缀名进行检查。
对于前端验证,我们有多种方法可进行绕过:
①禁用浏览器JavaScript
②删除onsubmit事件
③更改js校验中的白名单
④修改文件后缀名为白名单中的后缀名,然后抓包进行修改
成功绕过前端验证,上传成功。
蚁剑也能成功连接:
0X02 Pass-2
尝试上传一句话木马文件,得到提示,删除onsubmit事件也上传失败,猜测应该是加上了后端的验证。
查看提示说是“本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。
这里我们选择了修改文件后缀名为jpg,然后上传,抓包,修改后缀名,发送,没有报错信息,蚁剑也能成功连上,成功上传。
0X03 Pass-3
先尝试上传普通的一句话木马文件,得到提示:
黑名单限制,尝试修改后缀名为jpg,抓包修改
还是提示不能上传,那这次应该是后端对文件类型进行了验证。
注意:php语言除了可以解析以php为后缀的文件,还可以解析php2,php3、php4、php5这些后缀的文件。
于是修改后缀名为php5,上传成功
tips:不同的服务器,可以上传的文件类型也不同,所以需要进行逐个排除
0X04 Pass-4
这次黑名单比上一关多了很多,尝试大小写混杂也不行,也被识别出来了。
这里可以利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:
双引号" = 点号.
大于符号> = 问号?
小于符号< = 星号*
先上传一个名为shell.php:.jpg
的文件,上传成功后会生成4.php的空文件,大小为0KB.
然后将文件名改为shell.<
或shell.<<<
或shell.>>>
或shell.>><
后再次上传,重写shell.php文件内容,Webshell代码就会写入原来的shell.php空文件中。
要注意Windows下文件名不能包含以下特殊字符,所以这用到了burp进行抓包修改
上传成功,蚁剑也成功连上。
0X05 Pass-5
这题同上一题一样可以利用PHP 和 Windows环境的叠加特性。
按照别人的做法,上一题似乎可以用重写文件解析规则绕过。使用.htaccess文件,可是不知道是我靶场配置有问题还是因为什么,一直不能成功。。。
0X06 Pass-6
第六题把htaccess后缀也加入黑名单了,不过这次没有进行大小写过滤,可以将文件的后缀修改为大小写混杂,然后上传成功。
0X07 Pass-7
查看源码的话,可以发现相较之前少了一行
$file_ext = trim($file_ext); //首尾去空
我们可以上传php文件,然后burp抓包进行修改,在最后加上一个空格
上传成功!
0X08
今天就先到这了,下次接着记录
(我发现我标题写了一的好像都鸽了,害)