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

相关推荐
zzb15803 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
一只鹿鹿鹿3 小时前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
堕2743 小时前
MySQL数据库《基础篇--数据库索引(2)》
数据库·mysql
wei_shuo3 小时前
数据库优化器进化论:金仓如何用智能下推把查询时间从秒级打到毫秒级
数据库·kingbase·金仓
雷工笔记4 小时前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying4 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组4 小时前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法4 小时前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t5 小时前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite
MaximusCoder5 小时前
等保测评命令——Anolis Linux
linux·运维·服务器·网络·经验分享·安全·php