一、DNSlog简介

在某些情况下,无法利用漏洞获得回显。但是,如果目标可以发送DNS请求,则可以通过DNS log方式将想获得的数据外带出来(oob)。

DNS log常用于以下情况:

  • SQL盲注
  • 无回显的命令执行
  • 无回显的SSRF

二、搭建DNS log平台

1、前期准备

一台VPS

1.x.x.x

一个域名

wolke.cn

在wolke.cn中添加添加一个A记录与一个NS记录。其中A记录指向服务器IP地址,NS记录指向A记录的域名地址

img

img

2、项目部署

参考开源项目DNSlog-GO:https://github.com/lanyi1998/DNSlog-GO

img

  1. 该项目是由GO语言编写的,所以部署的时候需要用到GO语言的环境

img

  1. DNS使用的是53(UDP)端口,记得53端口的放行

img

  1. 配置文件config.yaml的修改(我这里HTTP采用的是8000端口,也记得要放行)

img

img

  1. 启动

img

3、测试

访问http://ip:8000

需要输入token,这里的token就是config.yaml设置的值

img

img

点击复制随机子域名获取到 8xek8.dnslog.wolke.cn

使用ping命令

img

可以看到回显结果

img

三、后台运行并加入开机自启动

上面的方法有两个不足

  • 无法后台运行
  • 重启后进程不复存在

经过一个多小时的排错和搜索资料,终于实现了开机自启动并后台运行。这里我详细地写下教程,免得大家像我一样出现很多错误耽误时间。

1、编写Shell脚本

在/root/DNSlog目录下编写run.sh,内容如下

cd /root/DNSlog  # 这里根据自己DNSlog的main可执行文件所在位置进行修改即可
./main &

之后执行run.sh这个脚本,此时进程虽然会输出到当前终端会话,但其实进程已经脱离了当前会话,可以安全的推出会话,进程也不会退出。

2、修改rc.local

vim /etc/rc.d/rc.local

在末尾加上这句

/root/DNSlog/run.sh >/dev/null 2>&1

image-20220712033650679

给rc.local加上可执行权限

chmod +x /etc/rc.d/rc.local

3、修改rc-local服务

systemctl status rc-local.service # 检查rc-local服务是否开启
systemctl start rc-local.service # 开启rc-local服务
systemctl enable rc-local.service # 将rc-local服务加入开机自启动

4、测试

重启vps后,使用ps -ef可以发现已经自动运行了该程序,后台进程ID为1146

img

Web服务也能成功访问

img

杀死进程可以使用命令 kill -9 进程PID

5、最后

到这里我们就实现了只要VPS处于开机状态,main程序就自动运行,常开随用,我们可以方便快捷地使用DNSlog。但常开随用也带来了一个问题就是,如果某个攻击者获得了我们的Token(社工或爆破等手段),那么攻击者就可能会使用我们的VPS主机开启的DNSlog服务去进行一些非法渗透,而如果被溯源到就会很麻烦,因此我们需要提高Token的复杂度且避免泄露,或者不使用这节的技术,使用原始的随开随用方法,什么时候需要用DNSlog就什么时候运行main程序,很大程度上可以避免这个问题。