%00截断 [GKCTF 2020]cve版签到

文章讨论了PHP中get_headers函数的CVE-2020-7066漏洞,指出当与用户提供的URL结合时,若URL包含零字符,可能导致URL被截断并引发信息泄露。讲解了零字符()截断的概念,并提及了与文件上传绕过类似的技术手法。

打开题目

F12之后在Headers中发现hint

两者结合利用零字符截断使get_headers()请求到本地127.0.0.

结合链接

构造

?url=http://127.0.0.1%00www.ctfhub.com

必须以123结尾

?url=http://127.0.0.123%00www.ctfhub.com

得到flag

知识点:

PHP中get_headers函数

 get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组。 如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在)

参数

### %00截断安全漏洞及其在字符串终止中的应用 #### 背景介绍 %00截断是一种常见的安全漏洞,主要源于某些编程语言或系统在处理字符串时遇到ASCII Null字节(`%00` 或 `\x00`)会将其视为字符串的结束标志。这种行为可能导致文件路径被意外截断,从而引发严重的安全隐患。 #### 技术细节 当Web应用程序接收到带有Null字节的文件名时,如果未正确过滤该字符,则可能触发以下问题: - **文件上传路径截断**:攻击者可以利用此特性伪造合法的文件扩展名,使服务器误认为上传的是允许类型的文件[^1]。 - **字符串处理错误**:由于C语言及其他低级语言通常以Null Byte作为字符串终结符,在解析过程中一旦遇到`\x00`就会停止进一步操作,这可能会导致后续逻辑执行失败或者数据丢失[^3]。 #### 实际案例分析 在一个典型的CTF场景下,假设存在一个支持图片格式验证机制但缺乏有效防护措施防止非法字符注入的功能模块。此时,通过精心构造包含null byte编码形式(%00) 的恶意请求参数提交给目标站点后端服务端口监听进程进行交互通讯连接建立握手协议协商过程完成身份认证授权许可权限授予访问控制列表管理配置项设定等等一系列复杂流程环节之后最终实现成功突破限制条件达成预期效果目的——即实现了所谓的“零日漏洞利用”。 以下是模拟如何检测并修复此类潜在风险的一个简单Python脚本示例: ```python import os def secure_filename(filename): """Remove null bytes from filenames to prevent truncation attacks.""" if '\x00' in filename: raise ValueError("Filename contains invalid characters.") return filename.replace('..', '').lstrip('/') # Example usage of the function try: safe_name = secure_filename("example.php\x00.jpg") except Exception as e: print(f"Error: {e}") ``` 上述代码片段展示了如何去掉任何试图嵌入到文件名称里面的NULL BYTES(`\X00`) , 并且还额外做了些其他基本安全性考量比如去除目录遍历尝试 ( `../` ) 和绝对路径指定 (`/`). #### 防护建议 为了防范这类基于%00截断的技术手段所造成的威胁, 开发人员应当采取如下策略: - 对所有外部输入的数据进行全面严格的校验与清理工作. - 特别注意对于那些将会参与到操作系统命令调用或是数据库查询语句构建之中的变量值更要加倍小心谨慎对待. - 使用现代高级别的框架库组件它们往往已经内置了很多针对常见web应用层面上可能出现的各种类型攻击的有效防御方法. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值