sql注入之二次注入

二次注入

二次注入漏洞是一种在Web应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有与---次注入攻击漏洞相同的攻击威力。

黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。

服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。

黑客向服务端发送第二个与第一次不相同的请求数据信息。

服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。

服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功

总结,二次注入就是由于将数据存储进数据库中时未做好过滤,先提交构造好的特殊字符请求存储进数据库,然后提交第二次请求时与第一次提交进数据库中的字符发生了作用,形成了一条新的sql语句导致被执行。以sqli-labs第24关为例

sqli-labs less-24

  1. 如下点击注册用户

这里注册用户名为 admin'#

此时我们查看数据库,注册的用户已经存储进去了,并且admin的密码是DDD

  1. 对注册的账号进行登录然后修改密码为ccccc

此时提示密码已经成功修改了

此时我们发现反倒是admin的密码被修改成了ccccc,而我们注册的用户admin'#的密码并没有被修改

漏洞原因

  1. 在进行用户注册的允许存在'和#这种特殊字符

  2. 在修改密码页面的源码中,发现这里很明显存在注入漏洞

sql = "UPDATE users SET PASSWORD='pass' where username='username' and password='curr_pass' ";

当我们登录账号admin'#并修改密码时,这条sql语句就变成了如下这个样子,#把后面的代码都注释掉了,所以修改了用户admin的密码为ccccc

sql = "UPDATE users SET PASSWORD='pass' where username='admin'#' and password='$curr_pass' ";

原文链接:https://blog.csdn.net/qq_44159028/article/details/114325805

相关推荐
马克学长2 分钟前
SSM校园公益活动网站7a9p4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·校园公益活动网站
李慕婉学姐4 分钟前
Springboot在线阅读平台的设计与实现5yy58005(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
IT 行者10 分钟前
Spring Authorization Server 迁移至 Spring Security 7.0:变革与展望
java·数据库·spring
码农学院15 分钟前
Mysql 是如何解决幻读问题的?
数据库·mysql
tjjingpan24 分钟前
HCIP-Datacom Core Technology V1.0_12流量过滤与转发路径控制
网络
计算机毕设VX:Fegn089527 分钟前
计算机毕业设计|基于springboot + vue高校实验室教学管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
net3m3330 分钟前
websocket下发mp3帧数据时一个包被分包为几个子包而导致mp3解码失败而播放卡顿有杂音或断播的解决方法
开发语言·数据库·python
TG:@yunlaoda360 云老大31 分钟前
华为云国际站代理商WeLink的资源与工具支持具体有哪些?
服务器·数据库·华为云
qq. 280403398433 分钟前
http 状态码
网络·网络协议·http
TG:@yunlaoda360 云老大34 分钟前
华为云国际站代理商申请跨账号代维权限的流程复杂吗?
网络·数据库·华为云