upload_lab题解
upload_lab
1
- 禁止使用js文件即可
2(MIME)
查看源代码

未限制类型
为白名单
提交php文件并且抓包绕过

将Content-Type修改为if中的正确条件
(image/jpeg、image/png、image/gif)
forword提交
3(phph5和php3和phtml实现绕过)
确定类型

罗列黑名单
直接通过phph5和php3和phtml实现绕过
.pht .php3 .php4 .php5 .php6 .php7 .php8 .phtml)
4(htaccess)
确定类型

罗列黑名单
未屏蔽.htaccess
htaccess实现文件解析自定义
(名称任意)(保存后,修改文件后缀为**.htaccess**)提交此文件 .htaccess
提交任意后缀的文件
(提交的文件名称与图片相互匹配)
所提交文件为php格式

1
2
3
<FilesMatch .jpg>
SetHandler application/x-httpd-php
</FilesMatch>5
提交a.jpg(写了php代码)
写一个 .user.ini文件
1
auto_prepend_file=a.jpg提交后
访问readme.php
6(大小写)
确定类型

基本上禁用了所有后缀
往下查看条件
未禁用大小写

(没有这一条)
修改php为大写即可(PHP)
7(空格绕过)
确定类型

往下查看条件
缺少收尾去空(将字符串转化为空格,未去除空格)

(没有这一条)
抓包

在尾部加空格
forword提交
8(删除文件末尾的点)
确定类型

往下查看条件
缺少“删除文件末尾的点”

(没有这一条)
抓包

forword提交
9(::DATA)
确定类型

往下查看条件
缺少“将字符串转化为空格”

(没有这一条)
抓包

在后面写::DATA
forword提交
10(只有一次过滤)
确定类型

往下查看条件
啥都不少,但是源代码只有一次过滤
抓包

多写几层
forword提交
11(过滤黑名单有的后缀)
确定类型

往下查看条件
啥都不少,但是源代码只有一次过滤

过滤黑名单有的后缀
抓包

多写几次
forword提交
12(%00截断)(get)
确定类型

往下查看条件
源代码满足多次过滤

(图中所示**+1即为循环**)
抓包

修改提交路径
添加1.php%00
(%00会截断后面的部分,即xxx.jpg)
forword提交
13(%00截断)(post)
确定类型

往下查看条件
源代码满足多次过滤

(图中所示**+1即为循环**)
为post提交方式

抓包

修改提交路径
添加1.php%00
(%00会截断后面的部分,即xxx.jpg)
post提交需要编码%00


forword提交
14(图片码)
1
2
3
4
5
6
7
8
9
10
11
查看提示,说检查图片内容开头两个字节。
PEG/IFIF(常见的照片格式):头两个字节为·0 xFF·0xD8。
PNG(无损压缩格式):头两个字节为·0x89·0x50。
GIF(支持动画的图像格式):头两个字节为·0x47·0x49。
BMP(Windows位图格式):头两个字节为·0x42·0x4D。
TFF(标签图像文件格式):头两个字节可以是不同的数值查看源代码

根据题目要求,将png文件,php文件打开
将php中代码粘贴·到png中———>生成一个新文件为jpg的文件
(上传图片,所以是jpg格式的)

配合文件包含漏洞–将图片转化为php代码执行

(file的名称为所上传图片的地址)
15
查看源代码

函数表名,只能提交图像(不是图像无法执行)

16
查看源代码

函数表名,只能提交图像(不是图像无法执行)

17
查看源代码

函数表名,只能提交图像(不是图像无法执行)

18(二次渲染)(条件竞争)
查看源代码

先移动,再条件
19(二次渲染)(条件竞争)
1.
20(黑名单下:文件夹名称)
查看源代码

最终判定的条件名称(if)与提交文件名(post save_name)有关

抓包,末尾添加饶过的词语

或者

- 抓包,末尾添加饶过的词语,变成文件夹名称

21(白名单下:文件夹名称)
查看源代码

数组影响最后结果
save_name[0]影响文件名称
save_name[1]写不写都行(为一个点)
save_name[2]文件后缀
抓包进行修改


(类似这种情况的文件名上传)