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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章