手动漏洞挖掘
实验环境:
metasploitable ip:172.16.2.65
Security Level:low
kali linux ip:172.16.2.63
一、文件上传漏洞
网站上传头像、文件、图片等功能
- 直接上传webshell
- 修改文件类型上传webshell
- Mimetype—文件头、扩展名
- 修改扩展名上传webshell
- 静态解析文件扩展名时可能无法执行
- 文件头绕过过滤上传webshell
- 上传目录权限
1.Security Level = low
成功上传图片文件,将提示的目录复制粘贴到url上可查看图片。
vi 3.php
<?php echo shell_exec($_GET['cmd']);?>
# 读取一个cmd变量的值,get下来后交给shell_exec函数执行,执行结果通过echo显示
将3.php文件Upload
成功上传后,在url后访问,给cmd赋值,?cmd=pwd
下图说明目前的web application存在上传漏洞,服务器端脚本代码对文件没有过滤。
打开BurpSuite->Proxy->HTTP history,可以看到网站对上传文件的大小有限制。
上传大小大于100000的文件,可以使用BurpSuite修改。手动扩大数值后成功上传图片。
成功绕过,上传图片
2.Security Level = medium
上传一张符合大小的图片,没能上传成功。
查看源代码:
比low级别多了个判断图片类型为“image/jpeg”
通过BurpSuite查看,发现图片类型为“image/png”与上面源代码中的类型不符,所以不成功。右键“send to repeater”
修改为“image/jpeg”
成功上传。
紧接着上传原先的网页木马3.php,开启BurpSuite的截断代理功能,强行修改文件类型。
上传成功!
3.Security Level = high
查看源代码:
通过判断文件扩展名来过滤,此时如果仍以文件“3.php”命名则上传不成功。
绕过方法:开启BurpSuite截断代理功能,将文件名修改为“3.php.jpeg”
上传成功!
4.更高级别过滤
更高级别的过滤会检测文件内容。例如以.jpeg为扩展名的文件,检查文件头内容,如果像上几步直接修改扩展名并将文件则会被网站过滤掉,这里需要更机智的绕过。
修改文件名为“1.php.jpeg”和内容保留源文件头然后添加网页木马。
修改后
上传成功!
成功获得shell!
二、防范
- 可以通过文件系统权限设置
sudo chmod a-x uploads/
三、总结
- web application存在文件上传漏洞大多数是因为程序员在编码时没有对文件目录进行权限限制。
- 绕过有很多方法,有时需要一点想象力。
- 善用BurpSuite,有变量的地方就有机会。