upload_lab题解

upload_lab

1

  • 禁止使用js文件即可

2(MIME)

  1. 查看源代码

    image-20250213005144971

    未限制类型

    为白名单

  2. 提交php文件并且抓包绕过

    image-20250213005117515

  3. 将Content-Type修改为if中的正确条件

    (image/jpeg、image/png、image/gif)

  4. forword提交

3(phph5和php3和phtml实现绕过)

  1. 确定类型image-20250213011454171

    罗列黑名单

  2. 直接通过phph5和php3和phtml实现绕过

  3. .pht .php3 .php4 .php5 .php6 .php7 .php8 .phtml)

4(htaccess)

  1. 确定类型

    image-20250213012033408

    罗列黑名单

    未屏蔽.htaccess

  2. htaccess实现文件解析自定义

    image-20250213013048887(名称任意)(保存后,修改文件后缀为**.htaccess**)

  3. 提交此文件 .htaccess

  4. 提交任意后缀的文件

    (提交的文件名称与图片相互匹配)

  5. 所提交文件为php格式

image-20250307181457737

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(大小写)

  1. 确定类型

    image-20250213013834182

    基本上禁用了所有后缀

  2. 往下查看条件

  3. 未禁用大小写

    image-20250213014132854

    (没有这一条)

  4. 修改php为大写即可(PHP)

7(空格绕过)

  1. 确定类型

    image-20250213014238310

  2. 往下查看条件

  3. 缺少收尾去空(将字符串转化为空格,未去除空格)

    image-20250213014408766

    (没有这一条)

  4. 抓包

  5. image-20250213014649147

    在尾部加空格

  6. forword提交

8(删除文件末尾的点)

  1. 确定类型

    image-20250213015053022

  2. 往下查看条件

  3. 缺少“删除文件末尾的点”

    image-20250213015311465

    (没有这一条)

  4. 抓包

  5. image-20250213015448547

  6. forword提交

9(::DATA)

  1. 确定类型

    image-20250213015053022

  2. 往下查看条件

  3. 缺少“将字符串转化为空格”

    image-20250213015634038

    (没有这一条)

  4. 抓包

  5. image-20250213015800602

    在后面写::DATA

  6. forword提交

10(只有一次过滤)

  1. 确定类型

    image-20250213015053022

  2. 往下查看条件

  3. 啥都不少,但是源代码只有一次过滤

  4. 抓包

  5. image-20250213020343377

    多写几层

  6. forword提交

11(过滤黑名单有的后缀)

  1. 确定类型

    image-20250213015053022

  2. 往下查看条件

  3. 啥都不少,但是源代码只有一次过滤

    image-20250213020702307

    过滤黑名单有的后缀

  4. 抓包

  5. image-20250213021057055

    多写几次

  6. forword提交

12(%00截断)(get)

  1. 确定类型

    image-20250213021159570

  2. 往下查看条件

  3. 源代码满足多次过滤

    image-20250213021313487

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

  4. 抓包

  5. image-20250213023637421

    修改提交路径

    添加1.php%00

    (%00会截断后面的部分,即xxx.jpg)

  6. forword提交

13(%00截断)(post)

  1. 确定类型

    image-20250213023909677

  2. 往下查看条件

  3. 源代码满足多次过滤

    image-20250213021313487

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

  4. 为post提交方式

    image-20250213030200898

  5. 抓包

  6. image-20250213030336875

    修改提交路径

    添加1.php%00

    (%00会截断后面的部分,即xxx.jpg)

  7. post提交需要编码%00

    image-20250213030458867

    image-20250213030648499

  8. 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(标签图像文件格式):头两个字节可以是不同的数值
  1. 查看源代码

    image-20250213023909677

  2. 根据题目要求,将png文件,php文件打开

    将php中代码粘贴·到png中———>生成一个新文件为jpg的文件

    (上传图片,所以是jpg格式的)

    image-20250213230853507

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

    image-20250213231620298

    (file的名称为所上传图片的地址)

15

  1. 查看源代码

    image-20250213233806957

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

    image-20250213233915636

16

  1. 查看源代码

    image-20250213234142840

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

    image-20250213234202315

17

  1. 查看源代码

    image-20250213234350113

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

    image-20250213234408359

18(二次渲染)(条件竞争)

  1. 查看源代码

    image-20250214003010406

  2. 先移动,再条件

19(二次渲染)(条件竞争)

1.

20(黑名单下:文件夹名称)

  1. 查看源代码

    image-20250214003208206

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

    image-20250214003543621

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

    image-20250214003705994

    或者

    1. image-20250214004038208
    2. 抓包,末尾添加饶过的词语,变成文件夹名称
    3. image-20250214004120826

21(白名单下:文件夹名称)

  1. 查看源代码image-20250214004247923

  2. 数组影响最后结果

    save_name[0]影响文件名称

    save_name[1]写不写都行(为一个点)

    save_name[2]文件后缀

  3. 抓包进行修改image-20250214005515857

image-20250214005702713

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


upload_lab题解
http://example.com/2025/10/27/upload_lab题解/
作者
Piggy Sprint
发布于
2025年10月27日
许可协议