淺談HTTP頭注入


首先按常見性羅列一下存在http頭注入的參數.

HTTP頭部詳解

User-Agent:使得服務器能夠識別客戶使用的操作系統,游覽器版本等.(很多數據量大的網站中會記錄客戶使用的操作系統或瀏覽器版本等存入數據庫中)

Cookie:網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密).

X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,(通常一些網站的防注入功能會記錄請求端真實IP地址並寫入數據庫or某文件[通過修改XXF頭可以實現偽造IP]).

Clien-IP:同上,不做過多介紹.

Rerferer:瀏覽器向 WEB 服務器表明自己是從哪個頁面鏈接過來的.

Host:客戶端指定自己想訪問的WEB服務器的域名/IP 地址和端口號(這個我本人還沒碰到過,不過有真實存在的案例還是寫上吧).

HTTP頭注入檢測

  HTTP頭存在注入的話,可以使用burpsuite抓包工具,進行抓包注入.(PS:可能需要手工添加相關頭參數).

通過圖上,可明顯看出是基於時間的sql盲注.(sqlmap 構造的payload).

在可能存在注入的http頭部加上(*)星號可以理解為sqlmap跑注入時候的定位符(就是說明這個’可控參數可能存在sql注入’)[同 sqlmap -r url.txt -p “User-agent”]。

結果 (關於頭注入,sqlmap可能不能直接檢測出頭部sql注入,可以嘗試添加一些參數在進行測試)

火狐某插件(modify headers)

  插件可以用來進行源IP地址的偽造,也可以添加一些可能存在http頭注入的參數進行抓包檢測.

按照上圖進行配置

開啟modify headers插件,使用burpsuite進行抓包時,發現截獲的數據包某些HTTP字段已經按照我們想要的格式添加上去了.(host這里是個變體,根據實際情況改)。

host 頭注入結果

案例:

  1. ZZCMS v8.1 HTTP頭注入

問題在/admin/logincheck.php的19-28行

$ip=getip(); define('trytimes',20);//可嘗試登錄次數 define('jgsj',15*60);//間隔時間,秒 $sql="select * from zzcms_login_times where ip='$ip' and count>=".trytimes." and unix_timestamp()-unix_timestamp(sendtime)<".jgsj." "; $rs = mysql_query($sql); $row= mysql_num_rows($rs); if ($row){ $jgsj=jgsj/60; showmsg("密碼錯誤次數過多,請於".$jgsj."分鍾后再試!"); } 

限制登錄次數的功能,使用getip()獲取IP,然后查詢IP和登錄時間,如果超過嘗試登錄次數就禁止登錄

跟進一下getip()函數

/inc/function.php 69-81行

function getip(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip); } 

首先使用CLIENT_IP獲取IP(第一步就出問題了),若沒有,則使用X_FORWARDED_FOR獲取IP(第二步也出問題了)

以此類推。

為什么說出問題呢?因為這兩個頭都是可控的,我之前寫過一篇關於XFF頭的文章,不了解問題在哪的可以看一下。

既然可控,那么就可以輸入任意字符,構造sql語句,直接標記一下丟到sqlmap

CLTENT-IP:

X-Forwarded-For:

 

 

【注】本文轉自:https://zhuanlan.zhihu.com/p/27553821


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM