Web網(wǎng)絡(luò)安全分析Union注入攻擊原理詳解
1、Union注入攻擊
Union注入攻擊的測(cè)試地址:http://127.0.0.1/sqli/union.php?di=1。
訪問該網(wǎng)址時(shí),頁(yè)面返回的結(jié)果如圖6所示。

圖6 訪問id=1時(shí)頁(yè)面的結(jié)果
在URL后添加一個(gè)單引號(hào),再次訪問,如圖7所示,頁(yè)面返回結(jié)果與id=1的結(jié)果不同。
圖7 訪問id=1'時(shí)頁(yè)面的結(jié)果
訪問id=1 and 1=1,由于and 1=1為真,所以頁(yè)面應(yīng)返回與id=1相同的結(jié)果,如圖8所示。訪問id=1 and 1=2,由于and 1=2為假,所以頁(yè)面應(yīng)返回與id=1不同的結(jié)果,如圖9所示。
圖8 訪問id=1 and 1=1時(shí)頁(yè)面的結(jié)果
圖9 訪問id=1 and 1=2時(shí)頁(yè)面的結(jié)果
可以得出該網(wǎng)站可能存在SQL注入漏洞的結(jié)論。
接著,使用order by 1-99語(yǔ)句查詢?cè)摂?shù)據(jù)表的字段數(shù)量,如訪問id=1 order by 3,頁(yè)面返回與id=1相同的結(jié)果,如圖10所示。
訪問id=1 order by 4,頁(yè)面返回與id=1不同的結(jié)果,則字段數(shù)位3,如圖11所示。
圖10 訪問d=1 order by 3時(shí)頁(yè)面的結(jié)果
圖11 訪問d=1 order by 4時(shí)頁(yè)面的結(jié)果
在數(shù)據(jù)庫(kù)中查詢參數(shù)ID對(duì)應(yīng)的內(nèi)容,然后將數(shù)據(jù)庫(kù)的內(nèi)容輸出到頁(yè)面,由于是將數(shù)據(jù)輸出到頁(yè)面上的,所以可以使用Union注入,且通過(guò)order by查詢結(jié)果,得到字段數(shù)為3,所以Union注入的語(yǔ)句如下所示。
union select 1,2,3
如圖12所示,可以看到頁(yè)面成功執(zhí)行,但沒有返回union select的結(jié)果,這是出于代碼只返回第一條的結(jié)果,所以u(píng)nion select獲取的結(jié)果沒有輸出到頁(yè)面。
圖12 訪問id=1 union select 1,2,3時(shí)頁(yè)面的結(jié)果
可以通過(guò)設(shè)置參數(shù)ID值,讓服務(wù)端返回union select的結(jié)果,例如,把ID的值設(shè)置為-1,這樣數(shù)據(jù)庫(kù)中沒有id=-1的數(shù)據(jù),所以會(huì)返回union select的結(jié)果,如圖13所示。
圖13 訪問id=-1 union select 1,2,3時(shí)頁(yè)面的結(jié)果
返回結(jié)果為2 : 3,意味著在union select 1,2,3中,2和3的位置可以輸入MySQL語(yǔ)句。我們嘗試在2的位置查詢當(dāng)前數(shù)據(jù)庫(kù)名(使用database()函數(shù)),訪問od=-1 union delect 1,database(),3,頁(yè)面成功返回了數(shù)據(jù)庫(kù)信息,如圖14所示。
圖14 利用Union注入獲取database()
得知了數(shù)據(jù)庫(kù)名后,接下來(lái)輸入以下命令查詢表名(數(shù)據(jù)庫(kù)名test根據(jù)實(shí)際情況進(jìn)行替換)。
select table_name from information_schema.tables where table_schema='test' limit 0,1
嘗試在2的位置粘貼語(yǔ)句,這里需要加上括號(hào),結(jié)果如圖15所示,頁(yè)面返回了數(shù)據(jù)庫(kù)的第一個(gè)表名。如果需要看第二個(gè)表名,則修改limit中的第一位數(shù)字,例如使用limit 1,1就可以獲取數(shù)據(jù)庫(kù)的第二個(gè)表名,如圖16所示。
圖15 利用Union注入獲取第一個(gè)表名
圖16 利用Union注入獲取第二個(gè)表名
現(xiàn)在所有的表名全部查詢完畢,已知數(shù)據(jù)庫(kù)名和表名,開始查詢字段名,這里以emails表名為例,查詢語(yǔ)句如下所示。
select column_name from information_schema.columns where table_schema='test' and table_name='emails' limit 0,1
嘗試在2和3的位置粘貼語(yǔ)句,括號(hào)還是不可少,結(jié)果如圖17所示,獲取了emails表的第一個(gè)和第二個(gè)字段名。
圖17 利用Union注入獲取第一個(gè)和第二個(gè)字段名
當(dāng)獲取了庫(kù)名、表名和字段名時(shí),就惡意構(gòu)造SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)的數(shù)據(jù),例如查詢字段email_id對(duì)應(yīng)的數(shù)據(jù),構(gòu)造的SQL語(yǔ)句如下所示。
select email_id from test.emails limit 0,1
結(jié)果如圖18所示,頁(yè)面返回了email_id的第一條數(shù)據(jù)。
圖18 利用Union注入獲取數(shù)據(jù)
2、Union注入代碼分析
在Union注入頁(yè)面中,程序獲取GET參數(shù)ID,將ID拼接到SQL語(yǔ)句中,在數(shù)據(jù)庫(kù)中查詢參數(shù)ID隨影的內(nèi)容,然后將第一條查詢結(jié)果中的username和address輸出到頁(yè)面,由于是將數(shù)據(jù)輸出到頁(yè)面上的,所以可以利用Union語(yǔ)句查詢其他數(shù)據(jù),頁(yè)面源代碼如下。
<?php
$con=mysqli_connect("localhost","root","root","test");
// 檢測(cè)連接
if (mysqli_connect_errno())
{
echo "連接失敗: " . mysqli_connect_error();
}
$id = @$_GET['id'];
$result = mysqli_query($con,"select * from users where `id`=".$id);
if (!$result)
{
exit();
}
$row = mysqli_fetch_array($result);
echo @$row['username'] . " : " . @$row['password'];
echo "<br>";
?>
當(dāng)訪問id=1 union select 1,2,3時(shí),執(zhí)行的SQL語(yǔ)句為:
select * from users where 'id'=1 union select 1,2,3
以上就是Web網(wǎng)絡(luò)安全分析Union注入攻擊原理詳解的詳細(xì)內(nèi)容,更多關(guān)于Web網(wǎng)絡(luò)安全Union注入攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11
Web網(wǎng)絡(luò)安全分析時(shí)間注入攻擊原理
這篇文章主要為打擊介紹了Web網(wǎng)絡(luò)安全分析時(shí)間注入攻擊的原理詳解,在學(xué)習(xí)網(wǎng)絡(luò)安全的同學(xué)可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
16進(jìn)制的轉(zhuǎn)換之javascript運(yùn)行時(shí)會(huì)自動(dòng)轉(zhuǎn)碼
16進(jìn)制的轉(zhuǎn)換之javascript運(yùn)行時(shí)會(huì)自動(dòng)轉(zhuǎn)碼...2007-05-05
超級(jí)震撼 讓我們來(lái)看看Skype有多危險(xiǎn)
超級(jí)震撼 讓我們來(lái)看看Skype有多危險(xiǎn)...2007-03-03
修改TTL值的具體實(shí)現(xiàn)方法,防內(nèi)網(wǎng)“窺視”
修改TTL值的具體實(shí)現(xiàn)方法,防內(nèi)網(wǎng)“窺視”...2007-02-02
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

