打开题目
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 级别的错误信息(可用来判断远程文件是否存在)
参数
url 目标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
)
具体方法见;CTF中的CVE-2020-7066_ctf your_cve-CSDN博客
CVE-2020-7066漏洞
PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘get_headers()
’函数存在安全漏洞。攻击者可利用该漏洞造成信息泄露
将get_headers()与用户提供的URL一起使用时,如果URL包含零(\ 0)字符,则URL将被静默地截断。这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器。
关于截断
有0x00截断和%00截断
这里可以参考:文件上传绕过之00截断_00截断绕过-CSDN博客