攻防世界 文件上传总结

这篇博客总结了攻防世界中关于文件上传漏洞的案例,包括easyupload和upload1两个题目。作者指出,文件上传漏洞通常由于未对上传文件进行严格审查,允许上传恶意文件如php或包含危险函数的文件。在easyupload中,利用user.ini文件来实现类似.htaccess的功能,通过配置文件解析实现文件执行。而在upload1中,可以通过前端代码篡改或使用Burp Suite修改文件头绕过后缀名检查。文章强调了前端和后端检查的重要性,并表示将补充更多相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00

文件上传漏洞,(主要指上传至后端的)对上传的文件以及文件内容并未做出审查过滤,导致给后端服务器上传木马或者含有危险函数的文件。

0x01

题目:easyupload

官方wirteup写的很明白,绕过的点:

  • 检查文件内容是否有php字符串
  • 检查后缀中是否有htaccess或ph
  • 检查文件头部信息
  • 文件MIME类型

下面是抓的数据包

然后这题思路是通过上传user.ini,然后上传user.ini中对应的格式文件配上payload。最后在访问上传的payload的文件。

user.ini的作用和.htacess文件作用是类似的,都是通过上传配置文件,利用配置文件解析当前目录指定文件,比如我上传了user.ini/..htacess 这里面内容我定为将png.文件解析为.php文件,我在访问.png文件就会解析为php内容反馈到浏览器上

这题有个拓展可以去了解,凡是用fastcgi的服务器,apache/ngnix 都可以用此思路

最后上传文件后,你可以用蚁剑或者相关工具,翻目录查看,也可以命令执行直接cat flag。

题目:upload1

查看网页源码

<think>嗯,用户想了解攻防世界的CATCAT这个CTF挑战。首先,我需要回忆一下相关的知识点和解题思路。根据提供的引用,特别是引用3和4,CATCAT涉及到PHP的curl使用@文件路径的特性,还有Django的一些知识,以及如何利用/proc/self/maps和/proc/self/mem来读取内存信息获取flag。 首先,用户可能想知道这个挑战的基本情况,比如题目类型、考察的知识点。根据引用3,这是一个Web安全题,涉及到PHP和Django,所以可能需要结合这两个方面的知识。此外,关键点在于利用curl的@符号来上传文件,这可能涉及到文件包含或者路径处理漏洞。 然后,引用4提到通过读取/proc/self/maps获取内存映射信息,再通过start和end参数读取mem的内容,从而利用正则表达式匹配flag。这说明题目中存在任意文件读取漏洞,或者内存泄露的问题。需要解释这些步骤的具体操作,比如如何构造请求来获取maps和mem的数据,如何解析这些数据找到flag的位置。 用户可能还需要解题步骤的详细说明,比如如何利用curl的@特性,如何结合Django的路由或视图函数来触发漏洞。同时,内存映射信息中的app.py部分可能指向了关键的内存区域,进而通过传递正确的start和end参数来提取内存中的敏感数据。 另外,相关的知识点可能需要进一步展开,比如PHP中curl的@用法,Django处理请求的过程,以及Linux中/proc文件系统的作用,特别是/proc/self/maps和mem文件的结构和访问方法。还要注意正则表达式如何匹配flag格式,通常是类似\w+{\w+}这样的模式。 用户可能还会关心如何防御这类漏洞,比如在Django中如何安全处理用户输入,避免任意文件读取,或者限制对系统文件的访问。同时,PHP中curl的安全配置,防止用户通过@上传恶意文件路径。 总结来说,回答需要涵盖挑战的概述、涉及的技术点、解题思路、关键步骤,以及相关的防御措施。同时,生成的问题需要引导用户深入理解每个环节,比如如何利用/proc文件、如何分析内存数据等。</think># 攻防世界 CATCAT CTF 挑战解析 ## 1. 挑战概述 CATCAT 是攻防世界中的 Web 安全类 CTF 题目,主要考察文件操作漏洞、内存信息泄露和正则表达式匹配能力。题目环境基于 Flask 框架构建,涉及 `PHP curl` 的 `@` 文件路径特性[^3],以及通过 `/proc/self/maps` 读取内存映射信息的技巧[^4]。 ## 2. 核心知识点 ### 2.1 PHP curl 文件路径特性 - 使用 `@` 符号可直接指定本地文件路径上传文件 - 例如 `@/etc/passwd` 会读取服务器本地的 passwd 文件 ### 2.2 内存信息泄露利用 - `/proc/self/maps` 文件包含当前进程的内存映射信息 - `/proc/self/mem` 是当前进程的内存镜像文件 - 通过这两个文件可定位敏感数据的内存地址范围[^4] $$ \begin{aligned} &\text{内存地址范围表达式} \\ &\text{start_addr-end_addr} \in \text{/proc/self/maps} \end{aligned} $$ ## 3. 解题关键步骤 1. **获取内存映射信息** 构造请求读取 `/proc/self/maps`,定位应用代码段地址: ```python # 示例请求 GET /info?start=0&end=1024 HTTP/1.1 ``` 2. **内存数据提取** 通过参数注入读取 `/proc/self/mem`: ```python # 读取 app.py 的内存区域 GET /info?start=0x555555554000&end=0x555555556000 ``` 3. **正则匹配 Flag** 在内存数据中搜索标准 Flag 格式: ```python re.search(r'\w+{\w+}', mem_data) ``` ## 4. 防御建议 1. 对用户输入的 `start/end` 参数进行严格校验 2. 禁用 `/proc` 文件系统的访问权限 3. 使用 Flask-Session 插件增强会话安全(含防篡改机制)[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值