欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Web網(wǎng)絡(luò)安全分析Union注入攻擊原理詳解

 更新時(shí)間:2021年11月02日 14:34:03   作者:Phanton03167  
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全中分析Union注入攻擊原理詳解,有需要的朋友可以借鑒學(xué)習(xí)下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

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語句查詢?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注入,且通過order by查詢結(jié)果,得到字段數(shù)為3,所以Union注入的語句如下所示。

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é)果

可以通過設(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語句。我們嘗試在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ù)名后,接下來輸入以下命令查詢表名(數(shù)據(jù)庫(kù)名test根據(jù)實(shí)際情況進(jìn)行替換)。

select table_name from information_schema.tables where table_schema='test' limit 0,1

嘗試在2的位置粘貼語句,這里需要加上括號(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表名為例,查詢語句如下所示。

select column_name from information_schema.columns where table_schema='test' and table_name='emails' limit 0,1

嘗試在2和3的位置粘貼語句,括號(hào)還是不可少,結(jié)果如圖17所示,獲取了emails表的第一個(gè)和第二個(gè)字段名。

 

圖17 利用Union注入獲取第一個(gè)和第二個(gè)字段名

當(dāng)獲取了庫(kù)名、表名和字段名時(shí),就惡意構(gòu)造SQL語句查詢數(shù)據(jù)庫(kù)的數(shù)據(jù),例如查詢字段email_id對(duì)應(yīng)的數(shù)據(jù),構(gòu)造的SQL語句如下所示。

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語句中,在數(shù)據(jù)庫(kù)中查詢參數(shù)ID隨影的內(nèi)容,然后將第一條查詢結(jié)果中的username和address輸出到頁(yè)面,由于是將數(shù)據(jù)輸出到頁(yè)面上的,所以可以利用Union語句查詢其他數(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語句為:

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)文章

最新評(píng)論