有关文件上传的学习内容
文件上传
本质
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。
本质其实也是POST传输的一种特殊形式。
常见效验方法
客户端效验
使用js来效验上传文件的后缀是否合法。
判断方法:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
服务端效验
1. 校验请求头 content-type字段,例如用PHP检测
1
2
3if($_FILES['userfile']['type'] != "image/gif"){
....
}2. 白名单检测
3. 文件加载检测:一般是调用API或函数去进行文件加载测试,例如图像渲染测试,当测试结果正常的时候才允许上传
4. 后缀名的黑名单白名单
5. WAF检测
对应校验的绕过方法
客户端:修改js 或者 抓包修改请求内容
服务端:
- 校验请求头content-type字段绕过
通过抓包来修改Http头的content-type即可绕过,也肯定是可以绕过这种检测
过文件头检测,可以使用图片马
文件加载检测也可以使用图片马
后缀名检测
黑名单检测
常见方法:大小写绕过,可以被解析的拓展名绕过
jsp jspx jspf
asp asa cer aspx
php php php3 php4 pht
exe exee
白名单检测
截断
test.php(0x00).jpg test.php%00.jpg
解析漏洞:这类漏洞是本身服务器的中间件产生的,例如apache,nginx都被爆出过存在解析漏洞,存在解析漏洞的话,上传的安全性几乎就完全失去了,下面再详细分析。
操作系统相关的绕过
上传不符合windows文件命名规则的文件名
某些版本的windows系统自动去掉不符合规则符号后面的内容。
常见waf绕过
大小上限:WAF对校验的用户数据设置大小上限,此时可以构造一个大文件的木马,前面都是填充的垃圾内容
filename:针对早期版本的安全狗,可以多加一个filename来绕过,
绕过waf通常只能靠大量的实验或者依靠最新的漏洞
木马的使用
https://lddp.github.io/2018/07/23/%E4%B8%80%E5%8F%A5%E8%AF%9D%E6%9C%A8%E9%A9%AC/