对文件上传的简单总结

不久前做完了大部分的upload靶场的题目,向对此进行一下稍微的总结,方便以后照着看吧

(这里只是最简单的进行介绍,都是以upload靶场为基础)

客户端

​1 JS检查

​在前端js代码中添加允许条件(如添加 .php使 php文件可上传)或者用相关插件
​bp抓包后修改  .jpg文件为 .php文件绕过

服务端

检查后缀

黑名单

​1 上传特殊可解析后缀

​用 .php3 , .phtml等特殊的文件格式尝试绕过
 
PS:​过滤<? 和 php后缀,尝试用 <script language='php'>assert($_REQUEST['cmd'])</script>

​2 上传 .htaccess

​先上传一个 .htaccess 文件(没有文件名)(内容为:SetHandler application/x-httpd-php),再上传图片马(此时文件都会被解析成php)

​3 后缀大小写绕过

​例如将 .php 文件修改成 .PHP 或者 .PHp 等

​4 空格绕过

​​①
在后缀名中加"(空格)"绕过,如 filename = "info.php(空格)"
​此时可能会有中特殊情况,用到(点+空格+点)来进行绕过,如 "filename = info.php.(空格)."

​5 点绕过

​在后缀名中加"."绕过,如 filename = "info.php."

​6 ::$DATA绕过

​在后缀名中加"::$DATA"绕过,如 filename = "info.php::$DATA"

​7 配合解析漏洞

(暂无)

​8 双后缀名绕过

​此时文件会把文件后缀替换为空,所以双写绕过,如 filename = "info.pphphp"

白名单

​1 MIME绕过

​​bp抓包后修改 content-type绕过

​2 %00截断

​①
在路径用 %00 截断,如 save_path = ../upload/info.php%00
​当 save_path 通过POST方法传入,与上一样,但要注意同时要在二进制文件当中进行修改(%00 不能再自动解码)

​3 0x00截断

同上

​4 0x0a截断

同上

检查内容

​1 文件头检查

​2 突破getimagesize()

​​直接上传图片马

​​3 突破exif_imagetype()

​​直接上传图片马

​4 突破move_uploaded_file()

​00截断

​5 二次渲染

这个比较难概括,请参考

​https://xz.aliyun.com/t/2657#toc-13

这位师傅的这篇文章

其他

​条件竞争

​通过向服务器不断发送(同样的)webshell(让其不能短时间内及时处理)
原文地址:https://www.cnblogs.com/yanwusheng/p/13347825.html