不久前作完了大部分的upload靶场的题目,向对此进行一下稍微的总结,方便之后照着看吧php
(这里只是最简单的进行介绍,都是以upload靶场为基础)html
客户端
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 配合解析漏洞
(暂无)web
8 双后缀名绕过
此时文件会把文件后缀替换为空,因此双写绕过,如 filename = "info.pphphp"
白名单
1 MIME绕过
bp抓包后修改 content-type绕过
2 %00截断
①
在路径用 %00 截断,如 save_path = ../upload/info.php%00
②
当 save_path 经过POST方法传入,与上同样,但要注意同时要在二进制文件当中进行修改(%00 不能再自动解码)
检查内容
1 文件头检查
2 突破getimagesize()
直接上传图片马
3 突破exif_imagetype()
直接上传图片马
4 突破move_uploaded_file()
00截断
5 二次渲染
这个比较难归纳,请参考app
https://xz.aliyun.com/t/2657#toc-13spa
这位师傅的这篇文章
其余
条件竞争
经过向服务器不断发送(一样的)webshell(让其不能短期内及时处理)