web上传文件功能非常常见,但如果对上传的文件没有做安全过滤,黑客可能会利用上传功能上传恶意文件并执行,如:webshell等,这就导致了系统被入侵等危害
一般的文件上传检测方法:
1、前端提交:JavaScript检测、Flash AS检测
2、数据传输:WAF拦截、IPS拦截
3、后端处理:扩展名检测,MIME Type检测、文件格式检测、内容检测
4、写入文件:文件重命名、杀软查杀
5、访问文件:无执行权限、未知位置
一个上传的数据包的内容:
客户端检测绕过:
修改客户端代码,浏览器f12功能可以修改前端代码
js检测,浏览器可以禁用js或者在f12的控制台中修改js函数
提交允许的文件名后,在burp拦截,再修改文件名
服务器检测绕过:
MIME TYPE可以标记文件的类型
如果服务器只是对MIME TYPE进行了检测:
那么上传恶意文件,对MIME TYPE进行修改即可
一些常见的MIME TYPE白名单:
扩展名 | MIME TYPE |
---|---|
jpg | image/jpeg |
png | image/png |
txt | text/plain |
zip | application/zip |
doc | application/msword |
文件头检测绕过:
如果服务器对文件内容的文件头进行检测,可以添加文件头绕过
一些图片的文件头:
扩展名 | 文件头 |
---|---|
jpg | FFD8FF |
png | 89504E47 |
gif | 47494638 |
tif | 49492A00 |
bmp | 424D |
用16进制工具HexPad打开一张png图片,会在开头看到png的文件头
那么用该工具打开一句话木马,添加文件头即可
完整文件结构检测
如果服务端检测完整的图片,可以尝试合并文件绕过
windows下合并文件命令:copy /b 1.jpg+shell.php a.php
先图片后代码
合成结果
有的服务器检测可能检测到完整的图片后,就会将图片后面的内容清除掉,这种情况可以尝试在图片中间写入webshell,因为服务器很可能是检测文件尾来判断一个图片完整性
恶意文件内容检测
服务器通过检测上传内容是否有webshell等代码
通常的绕过方法是代买混淆,一句话木马变种
一句话免杀/变种参考:https://www.freebuf.com/articles/web/195304.html
其他
一些服务器可能用了黑名单机制限制了php的后缀名,但是在一些php版本中php3,php5等后缀名是可以解析成php代码的,因此可以尝试上传pht,phpt,phtml,php3,php4,php5,php6等后缀名
网友评论