Web安全解析Boolean注入攻擊原理
1. Boolean注入攻擊
Boolean注入攻擊的測(cè)試地址:http://127.0.0.1/sqli/boolean.php?id=1。
訪問(wèn)該網(wǎng)站時(shí),頁(yè)面返回yes,如圖19所示。
圖19 訪問(wèn)id=1時(shí)頁(yè)面的結(jié)果
在URL后添加一個(gè)單引號(hào),再次訪問(wèn),發(fā)現(xiàn)返回結(jié)果由yes變成no,如圖20所示。
圖20 訪問(wèn)id=1'時(shí)頁(yè)面的結(jié)果
訪問(wèn)id=1' and 1=1%23,id=1' and 1=2%23,發(fā)現(xiàn)返回的結(jié)果分別是yes和no,更愛(ài)ID的值,返現(xiàn)返回的仍然是yes或者no,由此可判斷,頁(yè)面只返回yes或no,而沒(méi)有返回?cái)?shù)據(jù)庫(kù)中的數(shù)據(jù),所以此處不可使用Union注入。
此處可以嘗試?yán)肂oolean注入,Boolean注入是指構(gòu)造SQL判斷語(yǔ)句,通過(guò)查看頁(yè)面的返回結(jié)果來(lái)推測(cè)哪些SQL判斷條件是成立的,以此獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。我們先判斷數(shù)據(jù)庫(kù)名的長(zhǎng)度,語(yǔ)句如下所示。
' and length(database())>=1--+
因?yàn)椴樵?xún)語(yǔ)句前面有單引號(hào),所以和源碼中的SQL語(yǔ)句拼接后會(huì)多出一個(gè)單引號(hào),因此需要注釋符來(lái)注釋。
http請(qǐng)求中+會(huì)被替換為空格與--組合成為注釋符,空格也可用%20來(lái)代替,--%20效果等同。
由于#是用來(lái)指導(dǎo)瀏覽器動(dòng)作的,對(duì)服務(wù)器端完全無(wú)用,所以,HTTP請(qǐng)求中不包括#。在第一個(gè)#后面出現(xiàn)的任何字符,都會(huì)被瀏覽器解讀為位置標(biāo)識(shí)符。這意味著,這些字符都不會(huì)被發(fā)送到服務(wù)器端。所以如果想用#注釋符,就要將#轉(zhuǎn)換為%23。
故上面的語(yǔ)句還可寫(xiě)為:
' and length(database())>=1--%20
或
' and length(database())>=1%23
1的位置上可以是任意數(shù)字,如' and length(database())>=3--+和' and length(database())>=4--+,我們可以構(gòu)造這樣的語(yǔ)句,然后觀察也免得返回結(jié)果,如圖21~23所示。
圖21 判斷數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度(1)
圖22 判斷數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度(2)
圖23 判斷數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度(3)
以上幾個(gè)語(yǔ)句的意思是,數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度大于等于3,結(jié)果為yes;數(shù)據(jù)庫(kù)庫(kù)名的唱的大于等于4,結(jié)果為no。結(jié)合以上幾個(gè)語(yǔ)句,可以判斷出數(shù)據(jù)庫(kù)的長(zhǎng)度為3。
接著,使用逐字符判斷的方式獲取數(shù)據(jù)庫(kù)庫(kù)民。數(shù)據(jù)庫(kù)庫(kù)名的范圍一般在a~z、0~9之內(nèi),可能還有一些特殊字符,這里的字母不區(qū)分大小寫(xiě)。逐字符判斷的SQL語(yǔ)句為:
' and substr(database(),1,1)='t'--+
substr是截取的意思,其意思是截取database()的值,從第一個(gè)字符開(kāi)始,每次只返回一個(gè)。
substr的用法和limit的有區(qū)別,需要注意。limit是從0開(kāi)始排序,而substr是從1開(kāi)始排序。可以使用Burp的爆破功能爆破每個(gè)位置的字符值,如圖24所示,爆破結(jié)果如圖25所示。
圖24 利用Burp爆破數(shù)據(jù)庫(kù)的庫(kù)名(1)
圖25 利用Burp爆破數(shù)據(jù)庫(kù)的庫(kù)名(2)
其實(shí)還可以使用ASCII碼的字符進(jìn)行查詢(xún),t的ASCII碼是116,而在MySQL中,ASCII轉(zhuǎn)換的函數(shù)為ord(),則逐字符判斷的SQL語(yǔ)句應(yīng)該為如下所示。
' and ord(substr(database(),1,1))=116--+
從Union注入和Burp的爆破結(jié)果中我們知道,數(shù)據(jù)庫(kù)名是'test'。
查詢(xún)表名、字段名的語(yǔ)句也應(yīng)粘貼在database()的位置,從Union注入中已經(jīng)知道數(shù)據(jù)庫(kù)'test'的第一個(gè)表名是emails,第一個(gè)字母應(yīng)當(dāng)是e,判斷語(yǔ)句如下所示。
' and substr((select table_name from information_schema.tables where table_schema='test' limit 0,1),1,1)='e'--+
以此類(lèi)推,就可以查詢(xún)出所有的表名和字段名,如圖27所示,利用Burp爆破的結(jié)果如圖28所示。
2. Boolean注入代碼分析
在Boolean注入頁(yè)面中程先獲取GET參數(shù)ID,通過(guò)pre_match判斷其中是否存在union/sleep/benchmark等危險(xiǎn)字符。然后將參數(shù)ID拼接到SQL語(yǔ)句,從數(shù)據(jù)庫(kù)中查詢(xún),如果有結(jié)果,則返回yes,否則返回no。當(dāng)訪問(wèn)該頁(yè)面時(shí),代碼根據(jù)數(shù)據(jù)庫(kù)查詢(xún)結(jié)果返回yes或no,而不返回?cái)?shù)據(jù)庫(kù)中的任何數(shù)據(jù),所以頁(yè)面上智慧顯示yes或no,代碼如下所示。
<?php $con=mysqli_connect("localhost","root","root","test"); // 檢測(cè)連接 if (mysqli_connect_errno()) { echo "連接失敗: " . mysqli_connect_error(); } $id = @$_GET['id']; if(preg_match("/union|sleep|benchmark/i",$id)) { exit("no"); } $sql = "select * from users where `id`='".$id."'"; $result = mysqli_query($con,$sql); if(!$result) { exit("no"); } $row = mysqli_fetch_array($result); if ($row) { exit("yes"); }else{ exit("no"); } ?>
當(dāng)訪問(wèn)id=1' or 1=1%23時(shí),數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句為select * from users where ‘id'=‘1' or 1=1#,由于or 1=1是永真條件,所以此頁(yè)面可定會(huì)返回yes。當(dāng)訪問(wèn)id=1' and 1=2%23時(shí),數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句為select * from users where ‘id'=‘1' and 1=2#,由于and1=2是永假條件,所以此時(shí)頁(yè)面肯定會(huì)返回no。
以上就是Web安全解析Boolean注入攻擊原理的詳細(xì)內(nèi)容,更多關(guān)于Web安全Boolean注入攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
常見(jiàn)的反爬蟲(chóng)urllib技術(shù)分享
這篇文章主要介紹了常見(jiàn)的反爬蟲(chóng)urllib技術(shù)分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04網(wǎng)站存在啊D注入工具的SQL注入點(diǎn)的修復(fù)方法
我的網(wǎng)站還有我給老師做的單片機(jī)網(wǎng)站相繼被黑,從他那得知,他用的是“啊D注入工具”,先找我的網(wǎng)站是否存在可注入點(diǎn),如果有,進(jìn)行注入,能夠破解得到后臺(tái)密碼2012-12-12Web網(wǎng)絡(luò)安全分析堆疊查詢(xún)注入攻擊原理
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析堆疊查詢(xún)注入攻擊的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11網(wǎng)絡(luò)安全中流量加密實(shí)現(xiàn)工具冰蝎4.0介紹
冰蝎是一個(gè)動(dòng)態(tài)二進(jìn)制加密網(wǎng)站管理客戶端。在實(shí)戰(zhàn)中,第一代webshell管理工具"菜刀"的流量特征非常明顯,很容易就被安全設(shè)備檢測(cè)到。基于流量加密的webshell變得越來(lái)越多,"冰蝎"在此應(yīng)運(yùn)而生2022-09-09滲透測(cè)試信息收集查詢(xún)真實(shí)IP過(guò)程
這篇文章主要為大家介紹了滲透測(cè)試信息收集查找真實(shí)IP過(guò)程步驟,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家,多多進(jìn)步,早日升職加薪2021-11-11突破神奇的Cloudflare防火墻的網(wǎng)絡(luò)安全學(xué)習(xí)
這篇文章主要為大家介紹了突破神奇的Cloudflare防火墻的網(wǎng)絡(luò)安全學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Web網(wǎng)絡(luò)安全漏洞分析XSS常用語(yǔ)句及編碼繞過(guò)詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全漏洞分析XSS常用語(yǔ)句及編碼繞過(guò)詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11防御SQL注入攻擊時(shí)需要注意的一個(gè)問(wèn)題
SQL注入算是一個(gè)極為普通的問(wèn)題了,解決方案也多如牛毛,但是新的注入方式仍然層出不窮。2009-02-02微軟又爆預(yù)留后門(mén) 警方可輕松獲取硬盤(pán)資料
一直以來(lái),人們都在猜測(cè)微軟為了配合警方執(zhí)法,設(shè)立了各種各樣的后門(mén)來(lái)方便警方獲得證據(jù)。2008-05-05