文章目录
upload-labs通关简介
Pass-01
类型:前端校验
- 判断
上传1.php 弹出前端校验框 - 绕过
第一步:抓包
第二步:鼠标右键—>Do intercept—>Response to this request—>fowward
修改文件验证类型为.php
第三步:web上传1.php
第四步:释放包
Pass-02
类型:文件类型校验
- 判断
上传info.php 提示文件类型不正确 - 抓包,修改Content-Type: image/jpeg
上传成功
Pass-03
类型:后缀校验
- 判断
上传info.php 提示:不允许上传.asp,.aspx,.php,.jsp后缀文件! 后缀黑名单校验 - 抓包,修改文件后缀.phtml
上传成功
Pass-04
类型:黑名单校验
- 判断
- .htaccess
- jpg后缀马
Pass-05
类型:黑名单校验
- 判断
- 尝试绕过
- 后缀大小写绕过
pass-06
类型:黑名单校验
- 判断
- 尝试绕过
- 空格绕过
pass-07
类型:黑名单校验
- 判断
- 尝试绕过
- .绕过
pass-08
类型:黑名单校验
- 判断
- 尝试绕过
- ::$DATA绕过
pass-11
类型:白名单校验
- 判断
- 尝试截断
- %00截断绕过
详情可见:https://blog.csdn.net/Sheng_GuoFu/article/details/128288089
POST /Pass-11/index.php?save_path=../upload/aa.php%00 HTTP/1.1
在url中%00表示ascii码中的0,而0作为特殊字符保留,表示字符结束,也就是说,在保存文件的时候,如果路径参数(例: i m g p a t h ) 中出现了 img_path)中出现了%00,就会认为路径到这里就已经结束了,从而忽略后面一系列的参数,比如 imgpath)中出现了img_path = …/upload/test.php%00/test.jpg,此时,路径参数的后半部分就会被%00给截断,从而变成$img_path = …/upload/test.php
使用%00截断有两个要求:
1、php的版本 < 5.3.4
2、php.ini中的magic_quotes_gpc的状态为Off
补充:在保存文件的时候,如果路径结尾的文件名称和实际要保存的文件名称重名了的话,那么则会以路径结尾的文件名称为准。
例:…/upload/test.php # 保存路径
test.jpg # 文件名
实际保存以后的文件名:test.php
pass-12
类型:白名单校验
- 判断
- 尝试截断
- %00截断绕过
编码转化为16进制
+ =2b
aaaa.php+ Hex模块修改为00
../upload/1.php%00
------WebKitFormBoundary2Oj7Y1vz2d6AW4TB
Content-Disposition: form-data; name="upload_file"; filename="info.jpg"
Content-Type: application/octet-stream
<?php
phpinfo();
?>
pass-13
图片马
copy /b info.jpg+info.php=111.png
利用文件包含读取
include.php?file=upload/4720230522143433.jpg
pass-14
和13一样 区别为会判断头部文件是不是图片,文件名会变为jpeg
pass-15
一样 区别 需要开启php_exif模块
pass-16
不会 上传正常的图片都直接跳到首页
pass-17
不会
pass-18
普通图片马
pass-19
普通图片马
pass-20
普通图片马