upload-labs通关(Pass-11~Pass-15)

目录

Pass-11

Pass-12

Pass-13

Pass-14

Pass-15


Pass-11

什么鬼,我都做好了上传不成功的准备,结果sh.php居然上传成功了。

一看Response报文,果然事情没有这么简单,后端自动把文件名中的php去掉了,文件名变成sh.了

这样的话,盲猜可以用双写绕过。这关直接在repeater中试一下,就不劳intruder大驾了。

果然,双写php之后,服务器上保存的文件名是sh.php,成功绕过黑名单过滤。

代码分析:

本关代码在文件名中出现黑名单中的字符串时,用str_ireplace()函数替换为啥也没有,但是这个替换它不迭代,所以采用套娃的方式双写敏感后缀就可以绕过了。

if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");

        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.$file_name;        
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

Pass-12

上传sh.php之后,看这关页面返回的提示,似乎是白名单过滤呢

不死心,burp中把上图所示的报文send to repeater,发现filename改成sh.xxx上传失败,改成sh.jpg上传成功。看来真是文件名后缀的白名单过滤……

白名单还怎么玩呢(如果没有文件包含漏洞的话)……幸好这关看上去上传的文件的保存路径是用户可控的。如上图所示,请求报文的url中有个save_path参数,文件上传到服务器后的位置似乎是由这个参数决定的,这就给了%00截断发挥的机会。

构造请求报文,filename保持sh.jpg,为的是通过对文件名后缀的白名单校验;save_path的值改为 ../upload/sh.php%00,为的是使程序以为上传的文件应该保存为../upload/sh.php

虽然Response报文中显示的图片路径挺奇葩,但是后面分析代码的时候就知道显示的这个并不是文件真正的路径,实际上文件被保存为C:\phpstudy_pro\WWW\upload-labs\upload\sh.php

### 关于 Upload-Labs Pass-12 的解法 #### 背景介绍 Upload-Labs 是一个基于 PHP 编写的靶场项目,用于练习和学习文件上传漏洞的相关技巧。Pass-12 主要涉及通过特定条件下的文件上传来实现攻击目标。 #### 文件类型检测机制分析 在第十二关中,服务器端不仅会检查文件头信息还会验证 MIME 类型以及文件扩展名。为了成功绕过这些限制并完成挑战,可以利用某些浏览器或工具发送自定义 HTTP 请求头部[^1]。 #### 利用方法 一种常见的策略是构造特殊格式的数据包,在请求体内的 `Content-Type` 字段指定合法的图片MIME类型(如 image/jpeg),而实际提交的内容则为恶意脚本代码。由于服务端仅依赖客户端声明的信息来进行初步判断,因此这种方法可以在一定程度上规避基本的安全过滤[^2]。 另外需要注意的是,尽管该题目可能允许上传带有 .php 扩展名以外其他类型的文件,但在最终保存到磁盘之前通常会被重命名为随机字符串加上固定的后缀形式存储。所以即使能够上传 php 文件也需要考虑如何触发执行[^3]。 ```bash curl -X POST \ http://target_url/index.php?case=12&action=upload \ -H 'content-type: multipart/form-data;' \ -F "file=@/path/to/malicious_file.jpg;filename=image.jpg" ``` 此命令展示了如何使用 curl 工具向目标 URL 发送包含伪造 Content-Type 头部字段的POST请求,并附带一个名为image.jpg的实际载荷文件路径。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值