二阶注入简介
注入分类:
SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入
什么是二阶注入?
二阶注入就是无法直接注入,它时指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。
注入原理
注入比较:
一阶SQL注入:
1;一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的;
2;攻击者在http请求中提交非法输入;
3;应用程序处理非法输入,使用非法输入构造SQL语句;
4;在攻击过程中向攻击者返回结果。
二阶SQL注入:
1;攻击者在http请求中提交恶意输入;
2;恶意输入保存在数据库中;
3;攻击者提交第二次http请求;
4;为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句;
5;如果攻击成功,在第二次请求响应中返回结果。
两者危害一致。但是二阶注入很难通过扫描工具直接扫描出来;可以进行黑盒测试,但是想要发现漏洞有一定的难度;最好的发现漏洞的方法是通过白盒审计
引入知识:
mysql_escape_string函数,该函数可以过滤用户输入的参数,如果输入中存在单引号之类的特殊字符,则会在单引号前面添加反斜杠进行转义,但是经过改函数处理的参数在存入数据库时,会被还原成原数据
addsashes函数,作用同上
注入实现
查看源码
发现登陆处的username和password都经过了mysql_real_escape_string函数的转义,直接执行SQL语句会转义’,所以该处无法造成SQL注入。
注册用户的时候用了mysql_escape_string过滤参数:
注入测试
首先查看靶场中的用户列表,发现存在admin用户密码是admin,如下图
接下来注册一个新用户,admin'#,密码是123456,然后进入数据库查看是否注册成功,如下图
接下来登录我们新注册的账户,在这个页面可以进行修改密码,把新密码改成666666,如下图
神奇的事情发生了,数据库中admin'#的密码并没有被修改,但是admin的密码成功被修改,如下图
注入实例
ZZCMS v8.3二阶注入:https://www.freebuf.com/vuls/183360.html
ZoneMinder:https://www.4hou.com/info/news/19267.html
Joomla3.8.2:https://blog.csdn.net/publicStr/article/details/80261667