文件上传绕过方法汇总
注意点
1 区别前端还是服务器验证,点击提交,是否有包
2 截断绕过的原理是,对文件的重命名
一 客户端绕过
1 js前端绕过
开启阻断,把1.php暂时修改为1.jpg,拦截了再修改
2 上传成功,复制图像地址
二 服务端绕过
1 MIME绕过
检测传输类型,content-type
mime是本地检查,还是服务端检查,抓包判断一下
这是一个post包,交给服务器检查了
开启截断,改完后放过去
复制图像地址,成功实现
2 php3、php4
第一步先尝试把1.php伪装成1.jpg,截断,改包名,但是失败,基于服务器的检查
绕过失败,决定更换方法,先分析是白名单还是黑名单
空格绕过失败,点失败,…失败,phP大写绕过失败
php双写可以绕过,但是无法解析
绕过方法:
可以通过php3,php4,phhtml
需要在apache服务器添加
先搜索 AddType text/html
提示下载,还是无法解析
3 .haaccess
但注意版本
强制解析,先上传time.jpg解析为time.php
4 也是.htaccees
不在详细
5 大小写绕过
1 代码分析
没有了转换小写
2 绕过方法
1.Php
3 结果
可以绕过成功,但是无法解析
6 空格绕过(trim函数)
可以一次加很多空格,windows不知别空格
1 通过burp截断,加很多空格
2 代码识别,少了trim函数
3 最终结果
http://192.168.46.128/upload/upload/202010271051214021.php
7 末尾点 (delot函数)
1 分析函数
没有这个函数
2 绕过方法,末尾加点绕过
3 结果
http://192.168.46.128/upload/upload/1.php.
8 ::$DATA
1 代码分析
没有了str_ireplace函数
2 绕过方法
末尾加::$DATA
3 结果
http://192.168.46.128/upload/upload/202010271104144050.php
必须去除::$DATA
9 空格.
绕过方法
1.php.空格.
他删除一个点,还有一个点,绕过黑名单
http://192.168.46.128/upload/upload/202010271104144050.php
10 双写
1.pphphp
http://192.168.46.128/upload/upload/1.php
11 %00截断
白名单其实是利用上传的jpg,但是在重新命名的过程中做了修改
白名单00绕过,这也是post,但是路径在头部
1 绕过准备,切换最低版本,关闭gpc,重启phpstudy
2 绕过方法,在路径后加1.php%00
3 结果
http://192.168.46.128/upload/upload/1.php%EF%BF%BD/9320201027141323.jpg
删除多余的东西
12 hex–00截断
0x00 post绕过
1 研究
不是在get头部直接加0x00,需要在代码里输入
2 绕过方法
这个需要手动打上断点 20表示空格,00表示结束,手动在hex输入
输入三个空格
三个20修改成00
3 结果
有三个空格
删除三个空格