#前言: 学习了一下sql注入中的二次注入,特写下这篇文章记录一下。

靶场: http://127.0.0.1/sqli-labs-master/Less-24/new_user.php

注入原理:1.先构造恶意语句(转义字符),2.存入数据库中(让网站认为数据是合法的)。3.再次取出,执行恶意语句。

访问靶场

通过下面的图可以看出是个用户登录框。为了满足上面注入的原理,我们可以创建带有恶意语句的用户名存入数据库中。

进入数据库中查看用户名,是否插入进去。 如图所示已经在里面了。

登录进去之后是一个重置密码的页面,更具上图我们可以看到有个admin用户名。
之前创建的用户名admin'# 更改我们的用户名,admin 也会发生改变。
这个可以去php 代码里看。可以看到 admin 的密码变成1111了。

打开 对应的php 文件. 下面是密码更新语句.
如果我们把 "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
改为:"UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' ";
可以发现admin' 和前面闭合起来成一个语句。 # 注释掉后面的语句了.
if($pass==$re_pass)
{
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
$res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
$row = mysql_affected_rows();
echo '<font size="3" color="#FFFF00">';
echo '<center>';