最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、Union注入攻擊

Union注入攻擊的測試地址:http://127.0.0.1/sqli/union.php?di=1。

訪問該網(wǎng)址時,頁面返回的結(jié)果如圖6所示。

圖6 訪問id=1時頁面的結(jié)果

在URL后添加一個單引號,再次訪問,如圖7所示,頁面返回結(jié)果與id=1的結(jié)果不同。

 

圖7 訪問id=1'時頁面的結(jié)果

訪問id=1 and 1=1,由于and 1=1為真,所以頁面應(yīng)返回與id=1相同的結(jié)果,如圖8所示。訪問id=1 and 1=2,由于and 1=2為假,所以頁面應(yīng)返回與id=1不同的結(jié)果,如圖9所示。

 

圖8 訪問id=1 and 1=1時頁面的結(jié)果

 

圖9 訪問id=1 and 1=2時頁面的結(jié)果

可以得出該網(wǎng)站可能存在SQL注入漏洞的結(jié)論。

接著,使用order by 1-99語句查詢該數(shù)據(jù)表的字段數(shù)量,如訪問id=1 order by 3,頁面返回與id=1相同的結(jié)果,如圖10所示。

訪問id=1 order by 4,頁面返回與id=1不同的結(jié)果,則字段數(shù)位3,如圖11所示。

 

圖10 訪問d=1 order by 3時頁面的結(jié)果

 

圖11 訪問d=1 order by 4時頁面的結(jié)果

在數(shù)據(jù)庫中查詢參數(shù)ID對應(yīng)的內(nèi)容,然后將數(shù)據(jù)庫的內(nèi)容輸出到頁面,由于是將數(shù)據(jù)輸出到頁面上的,所以可以使用Union注入,且通過order by查詢結(jié)果,得到字段數(shù)為3,所以Union注入的語句如下所示。

union select 1,2,3

如圖12所示,可以看到頁面成功執(zhí)行,但沒有返回union select的結(jié)果,這是出于代碼只返回第一條的結(jié)果,所以union select獲取的結(jié)果沒有輸出到頁面。

 

圖12 訪問id=1 union select 1,2,3時頁面的結(jié)果

可以通過設(shè)置參數(shù)ID值,讓服務(wù)端返回union select的結(jié)果,例如,把ID的值設(shè)置為-1,這樣數(shù)據(jù)庫中沒有id=-1的數(shù)據(jù),所以會返回union select的結(jié)果,如圖13所示。

 

圖13 訪問id=-1 union select 1,2,3時頁面的結(jié)果

返回結(jié)果為2 : 3,意味著在union select 1,2,3中,2和3的位置可以輸入MySQL語句。我們嘗試在2的位置查詢當(dāng)前數(shù)據(jù)庫名(使用database()函數(shù)),訪問od=-1 union delect 1,database(),3,頁面成功返回了數(shù)據(jù)庫信息,如圖14所示。

 

圖14 利用Union注入獲取database()

得知了數(shù)據(jù)庫名后,接下來輸入以下命令查詢表名(數(shù)據(jù)庫名test根據(jù)實際情況進(jìn)行替換)。

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

嘗試在2的位置粘貼語句,這里需要加上括號,結(jié)果如圖15所示,頁面返回了數(shù)據(jù)庫的第一個表名。如果需要看第二個表名,則修改limit中的第一位數(shù)字,例如使用limit 1,1就可以獲取數(shù)據(jù)庫的第二個表名,如圖16所示。

 

圖15 利用Union注入獲取第一個表名

 

圖16 利用Union注入獲取第二個表名

現(xiàn)在所有的表名全部查詢完畢,已知數(shù)據(jù)庫名和表名,開始查詢字段名,這里以emails表名為例,查詢語句如下所示。

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

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

 

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

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

select email_id from test.emails limit 0,1

結(jié)果如圖18所示,頁面返回了email_id的第一條數(shù)據(jù)。

 

圖18 利用Union注入獲取數(shù)據(jù)

2、Union注入代碼分析

在Union注入頁面中,程序獲取GET參數(shù)ID,將ID拼接到SQL語句中,在數(shù)據(jù)庫中查詢參數(shù)ID隨影的內(nèi)容,然后將第一條查詢結(jié)果中的username和address輸出到頁面,由于是將數(shù)據(jù)輸出到頁面上的,所以可以利用Union語句查詢其他數(shù)據(jù),頁面源代碼如下。

<?php
$con=mysqli_connect("localhost","root","root","test");
// 檢測連接
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時,執(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注入攻擊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

竹山县| 固始县| 皋兰县| 潼关县| 宝山区| 五寨县| 东源县| 措勤县| 平果县| 定陶县| 吉安县| 淮安市| 安岳县| 建平县| 梅州市| 金华市| 秀山| 措勤县| 巴彦淖尔市| 新泰市| 壶关县| 松溪县| 襄樊市| 承德县| 西乌珠穆沁旗| 班玛县| 寿光市| 灵丘县| 河津市| 扎赉特旗| 德庆县| 灌阳县| 赤城县| 探索| 唐海县| 临西县| 丰原市| 金溪县| 鲁山县| 荥阳市| 镇江市|