sqli-labs靶场实现(十)【二次注入(二阶注入)】(less-24、具体步骤+图文详解)

一)二次注入
1)二次注入介绍
2)二次注入代码分析
3)二次注入利用
4)二次注入危害
5)代码审计

————————————————————————————————————————————————————


一)二次注入

1)二次注入介绍:
在这里插入图片描述
网站服务器和数据库服务器的交互是一个双向的过程,用户通过浏览器访问网站服务器进行用户注册,注册之后就可以登录网站。此时注册时的信息会进行“注册信息存储”(如:账号、密码),那么也就会存储到数据库服务器中就有了第一个输入。之后我们进行信息修改时也会进行数据库的交互,那么就会将第一次输入的信息提取出来之后进行修改再重新存入数据库,实现第二次输入

以上是正常情况下的信息修改和数据库交互(没有恶意,一般就是登录的密码忘记了),但是如果 攻击者将对应的payload输入到登录框让恶意代码植入数据库并且成功执行,那么这就是一个二次注入漏洞。 简而言之,二次注入是指对已存的数据库内容被读取后再次进入查询语句之后产生的恶意SQL语句

二次注入需要具备的两个条件:

a)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)。

b)数据库对自己存储的数据非常放心,直接取出恶意数据给用户。


2)二次注入代码分析:

实现注册的代码:
在这里插入图片描述
实现密码修改的代码:
在这里插入图片描述
从代码中可以知道,此时如果在修改密码的框中构造payload:其中用户名假如是admin,我们将单引号闭合再结合 – 注释符将后面的password注释掉那么就变成了:username='admin'--+ 此时 ' and password='$curr_pass' " 都无效了。那么此时只要指定表users中的所有为admin的用户名的密码都会被修改为我们修改的新密码。

3)二次注入利用:

实现流程:

1)访问存在SQL二次注入的网站,并且已知此网站中一个真正存在的用户名:admin;
2)进入登录界面进行注册:用户名:admin'-- -,密码:1234563)用新注册的用户和密码登录网站;
4)点击“忘记密码”对我们注册的用户名:admin'-- - 进行密码修改:12345)此时如果网站中原本的admin用户使用此用户名和原本他自己设置的密码进行登录时,会显示密码错误,因为此时admin用户的密码已经被修改为1234了。

在这里插入图片描述
users表中存在一个用户名和密码均为admin的用户,此时我们访问网站,注册一个新的用户:
在这里插入图片描述
确定新建用户的用户名和密码(admin’-- -或者admin’#或者admin’–+):
在这里插入图片描述
此时再次查看user表中的数据会发现admin’-- -用户出现了(第一次输入):
在这里插入图片描述
此时使用admin’-- -用户名和对应密码就登录了,但我们的重点操作是接下来通过忘记密码开始利用:
在这里插入图片描述
在这里插入图片描述
将admin’-- -用户的密码进行修改(第二次输入
在这里插入图片描述
在这里插入图片描述
此时再次查看user表中的数据会发现admin’-- -用户它的密码并没有改变,但是admin用户的密码却变了:
在这里插入图片描述

5)代码审计:

注册用户时,网站出现问题的页面很显然是注册页面,与密码修改重置页面。他们仅对特殊字符进行了转义,判断输入两次密码是否一致,然后将用户键入,将数据插入至数据库: $sql = "insert into users ( username, password) values(\"$username\", \"$pass\")"。当攻击者直接输入构造的payload进行修改密码:

$username= $_SESSION["username"];//直接取出了数据库的数据
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";//对该用户的密码进行更新
$sql = "UPDATE users SET PASSWORD='12345678' where username='admin‘#


4)二次注入最常见的危害:

a)构造payload触发二次SQL注入;
b)构造payload触发XSS攻击;





  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值