最近在玩CTF的時候遇到了跟這個函數相關的幾道題,我感覺這是一個非常有趣的參數,他能透過代理IP取到真實用戶的地址。對HTTp協議進行擴展。定義了一個叫做X-Forwarded-For的實體頭

X-Forwarded-For也就是常說的XFF頭,因為XFF頭是客戶端的,所以我們能控制XFF頭部分,可以用來”偽造IP”我之前寫過一個隨機請求頭爆破用戶名的腳本,就用到了XFF頭偽造IP。

當然使用BURP也可以構造XFF頭”偽造IP”
獲取IP界面:
PHP使用$_SERVER[‘HTTP_X_FORWARDED_FOR’]獲取IP

當沒用XFF頭就用$_SERVER[‘REMOTE_ADDR’];獲取IP。
如果有就使用$_SERVER[‘HTTP_X_FORWARDED_FOR’],前面說過,XFF頭是客戶端發送的,我們可以控制,那么就來偽造一下
在請求中加一個X-Forwarded-For

$_SERVER[‘HTTP_X_FORWARDED_FOR’]普遍用於獲取客戶端IP並存入數據庫,一般做數據分析,或者WAF會用的到
就拿WAF為例,大部分喜歡這樣玩。
<?php header("Content-Type: text/html; charset=UTF-8"); function Ip(){ $ip = ''; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } $getIp = Ip(); echo '你的IP'.Ip().'以被記錄<br>以啟動報警功能!'.'<br>'; $mydb = new mysqli('localhost', 'root', 'root', 'ip'); $sql = "insert into ip(ip) values ('$getIp')"; $mydb->query($sql); ?>
獲取某個IP然后存入數據庫,因為首先是用$_SERVER[‘HTTP_X_FORWARDED_FOR’],發送的請求頭,我們可以控制,那么沒有經過過濾的情況下,會造成http請求頭中的XFF頭注入,很有趣的一個注入。

sqlmap -r xff.txt –level 3 –dbms=mysql –risk 1 –users
注入類型是比較奇葩時間盲注


【注】本文轉自:http://www.lsafe.org/?p=481
