開始挑戰第十八關(Header Injection - Uagent field - Error based)
常見的HTTP注入點產生位置為【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】;
(1)HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器基此可以獲得一些信息用於處理。
(2)X-Forwarded-For:簡稱XFF頭,它代表客戶端,用於記錄代理信息的,每經過一級代理(匿名代理除外),代理服務器都會把這次請求的來源IP
追加在X-Forwarded-For
中
(3)Cookie,有時也用其復數形式 Cookies,指某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密)
(4)X-Real-IP一般只記錄真實發出請求的客戶端IP,看下面的例子,
X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
代表 請求由1.1.1.1發出,經過三層代理,第一層是2.2.2.2,第二層是3.3.3.3,而本次請求的來源IP4.4.4.4是第三層代理
如果配置了X-Read-IP,將會是:
X-Real-IP: 1.1.1.1
所以 ,如果只有一層代理,這兩個頭的值就是一樣的
(5)Accept-Language請求頭允許客戶端聲明它可以理解的自然語言,以及優先選擇的區域方言
來吧來吧,先看看頁面長什么樣,看看和之前的也沒什么變化,只是這里多了個一個your ip address is 127.0.0.1
搜嘎,這里估摸着是要記錄你每次訪問的ip地址,以前看到過uagent注入,翻翻文章,果斷有了騷思路。
先看看源代碼
這里看見兩個參數都被check了一番 不用考慮 了 那么從用戶輸入的數據不可信的角度來講 我們該 從哪里下手吶
我們看到了$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES (‘$uagent‘, ‘$IP‘, $uname)";將useragent和ip插入到數據庫中,那么我們是不是可以用這個來進行注入呢?首先這里要輸入正確的賬號和密碼才能繞過賬號密碼判斷,才能進入處理uagent部分,
說句實話 注入的條件有點苛刻 必須要前面的密碼和用戶名審核正確才能注入 我滴天 我弄了半天 我的用戶名 admin 密碼空
0X02接下里開始我們的注入之旅
經過這次嘗試可以看到:修改XFF頭對IP沒有影響,登陸成功會回顯你的User-Agent
。
這里要輸入正確的賬號和密碼才能繞過賬號密碼判斷,進入處理User-Agent
部分。這跟現實中的注冊登錄再注入是比較貼合。
所以注入點就在User-Agent
處
加入單引號 在user-agent的地方
看見報錯信息
猜想在數據中的sql語句為:INSEERT INTO table VALUES('User-Agent','Ip','Username')
接下來我們嘗試在User-Agent的位置進行注入測試,我們修改User-Agnet的值使其符合整個INSERT INTIO 的語法,閉合后就應該為
INSEERT INTO table VALUES('1' ,1,1)#','Ip','Username'),成功繞過
,相當於將sql語句改變成INSEERT INTO table VALUES('1)','Ip','Username')
並沒有報錯 成功繞過
1',1,1')#報錯了 這里三個一的意思是要插入3個數據
而且還爆出了正確的值應該是什么
好的寶貝 那我們開始構造我們的語句
0X03爆數據庫
1',1,updatexml(1,concat(0x3a,database(),0x3a),1)a)#
0X04爆表名
User-Agent: 1',1,updatexml(1,concat(0x3a,(select table_name from information_schema.tables where table_schema='security'),0x3a),1))#
得到報錯 這句話
Subquery returns more than 1 ro
百度翻譯結果
子查詢返回1個以上的ro
意思就是叫我們用limit嘛
成功
好的 今天的學習這個從早上學到了晚上
雖然還是不懂 但是還是得學習
接下來我會去仔細了解updatexml這個函數再mysql中的作用
切記 學習勿要浮躁 少就是多