亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Web中二次注入攻擊原理的示例分析

發布時間:2021-11-07 11:57:36 來源:億速云 閱讀:280 作者:小新 欄目:開發技術

這篇文章主要介紹Web中二次注入攻擊原理的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

二次注入攻擊

二次注入攻擊的測試地址:http://127.0.0.1/sqli/double1.php?username=test 和 http://127.0.0.1/sqli/double2.php?id=1。 其中,double1.php頁面的功能是注冊用戶名,也是插入SQL語句的地方;double2.php頁面的功能是通過參數ID讀取用戶名和用戶信息。

第一步,訪問double1.php?username=test',如圖40所示。

Web中二次注入攻擊原理的示例分析 

圖40 注冊用戶名test'

從頁面返回結果可以看到用戶名test'對用的ID為9,訪問double2.PHP?id=9,結果如圖41所示。

Web中二次注入攻擊原理的示例分析 

圖40 訪問test'的信息

從返回結果可以看到服務端返回了MySQL的錯誤(多了一個單引號引起的語法錯誤),這時回到第一步,先訪問double1.php?username=test' order by 1--+,獲取一個新的id=10,當再次訪問double2.php?id=10時,頁面返回空白;再次嘗試,訪問double1.php?username=test' order by 10--+,獲取一個新的id=11,當再次訪問double2.php?id=11時,頁面返回錯誤信息(Unknown column ‘10' in ‘order clause'),如圖42所示。

Web中二次注入攻擊原理的示例分析 

圖42 訪問order by 10的結果

這說明空白頁面就是正常返回,通過不斷地嘗試,筆者判斷出數據庫中一共有3個字段。

訪問double1.php?username=test' union select 1,2,3--+,獲取一個新id=12,再訪問double2.php?id=12,發現頁面返回了union select中的1和2字段,結果如圖43所示。

Web中二次注入攻擊原理的示例分析 

圖43 使用Union語句的結果

在2或3的位置,插入我們的語句,比如訪問double1.php?username=test' union select 1,user(),3--+,獲得新的id=13,再訪問double2.php?id=13,得到user()的結果,如圖44所示,使用此方法就可以獲取數據庫中的數據。

Web中二次注入攻擊原理的示例分析 

圖44 利用二次注入獲取數據

二次注入代碼分析

二次注入中double1.php頁面的代碼如下所示,實現了簡單的用戶注冊功能,程序獲取到GET參數username的參數password,然后將username和password拼接到SQL語句,使用insert語句插入到數據庫中。由于參數username使用addslashes進行轉義(轉義了單引號,導致單引號無法閉合),參數password進行了MD5哈希,所以此處不存在SQL注入漏洞。

<?php header('Content-type:text/html;charset=utf-8');
$con=mysqli_connect("localhost","root","root","test");
if (mysqli_connect_errno())
{
    echo "連接失敗: " . mysqli_connect_error();
}
$username = @$_GET['username'];
$password = @$_GET['password'];
$result = mysqli_query($con,"insert into users(`username`,`password`) values ('".addslashes($username)."','".md5($password)."')");
echo "新的id為:".mysqli_insert_id($con);
?>

當訪問username=test'&password=123456時,執行的SQL語句為:

insert into users(`username`,`password`) values ('test\'','e10adc3949ba59abbe56e057f20f883e')

從圖45中的數據庫里可以看到,插入的用戶是test'。

Web中二次注入攻擊原理的示例分析 

圖45 插入到數據庫中的數據

在二次注入中double2.php中的代碼如下所示。首先將GET參數ID轉換成int類型(防止拼接到SQL語句時,存在SQL注入漏洞),然后到users表中獲取ID對應的username,接著到person表中查詢username對應的數據。

<?php header('Content-type:text/html;charset=utf-8');
$con=mysqli_connect("localhost","root","root","test");
if (mysqli_connect_errno())
{
    echo "連接失敗: " . mysqli_connect_error();
}
$id = intval(@$_GET['id']);

$result = mysqli_query($con,"select * from users where `id`=".$id);
$row = mysqli_fetch_array($result);

$username = $row['username'];
$result2 = mysqli_query($con,"select * from person where `username`='".$username."'");
if (!$result2)
{
    echo mysqli_error($con);
    exit();
}
if($row2 = mysqli_fetch_array($result2))
{
    echo $row2['username'] . " : " . $row2['money'];

}
else
{
    echo mysqli_error($con);
}
?>

但是此處沒有對$username進行轉義,在第一步中我們注冊的用戶名是test',此時執行的SQL語句為:

select * from users where `username`='test''

單引號被帶入SQL語句中,由于多了一個單引號,所以頁面會報錯。

以上是“Web中二次注入攻擊原理的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

web
AI

自治县| 那曲县| 和平县| 剑阁县| 玛纳斯县| 博湖县| 赫章县| 惠州市| 昔阳县| 丘北县| 安平县| 汝城县| 西盟| 闸北区| 水富县| 漠河县| 永泰县| 浦北县| 文山县| 吴忠市| 柞水县| 平顺县| 武强县| 康乐县| 昭通市| 县级市| 筠连县| 永福县| 浦江县| 鄂托克前旗| 辽中县| 平陆县| 连南| 普格县| 洞口县| 扬州市| 大埔区| 钟山县| 永吉县| 来凤县| 读书|