您好,登錄后才能下訂單哦!
在HTTP請求報文中,請求頭是我們需要重點了解的部分,下面是請求頭中的主要內容:
(1) Host,指定被請求資源的URL。
(2) User-Agent,客戶端操作系統和瀏覽器的版本信息。很多網站通過它來判斷操作系統和瀏覽器類型,來展示對應的頁面。也有很多通過UA來判斷訪問是否合法,是用戶訪問還是程序訪問等。
Windows版本與內核的對應關系:
例題:貌似有點難
實驗吧 http://ctf5.shiyanbar.com/phpaudit/
打開鏈接之后,提示“錯誤!你的IP不在允許列表之內!”,并且給出了網站源碼。
<?php
function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
$cip = $_SERVER["HTTP_CLIENT_IP"];
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if(!empty($_SERVER["REMOTE_ADDR"]))
$cip = $_SERVER["REMOTE_ADDR"];
else
$cip = "0.0.0.0";
return $cip;
}
$GetIPs = GetIP();
if ($GetIPs=="1.1.1.1"){
echo "Great! Key is *********";
}
else{
echo "錯誤!你的IP不在訪問列表之內!";
}
?>
我們首先來分析一下這段代碼。
$_SERVER是一個全局變量,與$_GET、$_POST一樣,可用于獲取客戶端的信息。在這段代碼中,使用了三種不同的獲取客戶端IP的方法,
$_SERVER[“REMOTE_ADDR”]獲取的是客戶端與服務器三次握手建立TCP連接時的IP,這個無法偽造。
$_SERVER['HTTP_CLIENT_IP']和$_SERVER["HTTP_X_FORWARDED_FOR]都是通過HTTP頭來獲取信息,因而都是可以偽造的。它們分別獲取的是HTTP請求頭“CLIENT-IP”和"X-FORWARDED-FOR"域的信息,不過“CLIENT-IP”不屬于標準的頭信息,而"X-FORWARDED-FOR"則是,因而修改該屬性更為可取。.
比如我們自己編寫下面一個腳本文件:
默認情況下只能獲取到$_SERVER["REMOTE_ADDR"],這是因為HTTP請求頭中默認并沒有那兩個值。
我們利用Burpsuite截獲報文,然后在其中增加兩個頭部信息,并發送出去,這時服務器可以通過三種方法來獲取到客戶端的IP。
搞清楚這些問題之后,這道題目的解法就很簡單了,只要將“CLIENT-IP”或是“X-FORWARDED-FOR"修改為1.1.1.1即可。
最后還是需要說明一下,既然$_SERVER[“REMOTE_ADDR”]獲取的是客戶端的真實IP,而且用戶無法偽造,那么服務器為什么不用這種方法來獲取客戶端IP呢?這是因為在局域網環境下,客戶端與服務器之間直接通信,通過三次握手建立連接,此時獲取的IP自然沒問題。但是互聯網的網絡環境就復雜得多了,在服務器的前面一般會有防火墻,在客戶端也可以設置代理服務器,也就是說與服務器三次握手的往往并非是客戶端,而是這些中間設備,這都會導致利用$_SERVER[“REMOTE_ADDR”]獲取的IP不準確。而利用$_SERVER['HTTP_CLIENT_IP']和$_SERVER["HTTP_X_FORWARDED_FOR]獲取的IP直接來自客戶端發來的消息頭,不受中間設備的干擾,因而更為準確,只是這也為***留下了利用的空間。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。