需要先将原本的参数进行解密 ,然后结合之前的 注入手法 (如联合注入,报错注入等)进行加密 ,再作为参数进行注入
base64在线加解密:?type=3
其他编码注入的注入方法一样,举一反三。
二次注入二次注入概述
什么是二次注入?
简单的说二次注入是指已存储 (数据库、文件)的用户输入被读取后 ,再次进入到SQL査询语句中 导致的注入。
原理
- 有些网站当用户输入恶意数据 时对其中的特殊字符 进行了转义处理 ,但在恶意数据插入到数据库 时被处理的数据又
被还原并存储在数据库中 ,当web程序调用存储在数据库中的恶意数据并执行SQL査询时 ,就发生了SQL二次注入
- 注意:可能毎一次注入都不构成漏洞,但是如果一起用就可能造成注入。
二次注入思路
攻击者通过构造数据 的形式,在浏览器或其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了攻击者构造的SQL语句或者命令 。
服务端 应用程序会将攻击者提交的数据信息进行存储 ,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据 并对客户端请求做岀响应。
攻击者向服务端发送第二个与第一次不相同的请求数据信息。
服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会査询数据库中已经存储的数据信息并处理,从而导致攻击者在第一次请求中构造的SQL语句或者命令在服务端环境中执行 。
服务端返回执行的处理结果数据信息,攻击者可以通过返回的结果数据 信息判断是否成功利用 二次注入漏洞。
堆叠注入堆叠查询概述
什么是堆叠查询?
- 在SQL语句中,分号(;)用来表示一条sql语句的结束。所以可以在以分号(;)结束一个sql语句后,继续构造一下条语句,可以一起执行 。
堆叠查询和联合查询的区别
- 联合查询: union或者 union all执行的语句类型有限,可以用来执行查询语句
- 堆叠査询:堆叠查询可以执行的是任意的语句
- 如用户输入:Select from products where pro=1;DELETE FROM products
- 当执行查询后,第一条显示查询信息,第二条则将整个表进行删除
堆叠注入原理
堆叠注入,就是将许多sql语句叠加 在一起执行。将原来的语句构造完成后加上分号,代表该语句结束,后面再输入的就是个全新的sql语句,这时我们使用的语句将毫无限制 。
如:[1';show tables();#]
利用条件
可能受到API或者数据库引擎 不支持的限制
mysqli_multi_query支持 / mysql_query不支持
(1)MySQL+PHP支持 (2)SQL Server+ Any API支持 (3)Oracle+ Any API不支持
注意
1. 由于在web系统中,代码通常只返回一个査询结果 ,所以在读取数据 时,建议使用联合注入