渗透测试 回显机制平台 dnslog 搭建

目录

1 前言

2 前期准备

3 实验过程

3.1 添加DNS解析

3.2 对外开放53端口

3.3 DNSLOG代码

4 WEB界面

5 后记


1 前言

       DNSLOG是一种回显机制,常用于在某些漏洞无法回显但可以发起DNS请求的情况下,利用此方式外带数据,以解决某些漏洞由于无回显而难以利用的问题。主要利用场景有SQL盲注、无回显的命令执行、无回显的SSRF。本文介绍一种搭建DNSLOG平台的方法,旨在为渗透测试提供一些帮助。

 

2 前期准备

       一个域名,一台vps

       本文使用的是:阿里云购买的域名和云服务器ECS

       域名:example.icu

       vps ip:100.100.100.100

 

3 实验过程

3.1 添加DNS解析

       在云解析DNS处添加一条A记录和一条NS记录,如图所示:

1.png

3.2 对外开放53端口

       在云服务器ECS安全组规则里添加对外开发53端口的规则,协议是udp。

 

2.jpg

 

3.3 DNSLOG代码

       dnslog.py

       运行在python2下,无需安装依赖包。      

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import SocketServer
import struct
import socket as socketlib
# DNS Query
class SinDNSQuery:
    def __init__(self, data):
        i = 1
        self.name = ''
        while True:
            d = ord(data[i])
           if d == 0:
               break;
           if d < 32:
                self.name =self.name + '.'
            else:
               self.name =self.name + chr(d)
           i = i + 1
        self.querybytes =data[0:i + 1]
        (self.type,self.classify) = struct.unpack('>HH', data[i + 1:i + 5])
        self.len = i + 5
    def getbytes(self):
        return self.querybytes+ struct.pack('>HH', self.type, self.classify)
# DNS Answer RRS
class SinDNSAnswer:
    def __init__(self, ip):
       self.name = 49164
        self.type = 1
        self.classify = 1
        self.timetolive = 190
       self.datalength = 4
        self.ip = ip
    def getbytes(self):
        res =struct.pack('>HHHLH', self.name, self.type, self.classify, self.timetolive,self.datalength)
        s = self.ip.split('.')
        res = res +struct.pack('BBBB', int(s[0]), int(s[1]), int(s[2]), int(s[3]))
        return res
# DNS frame
class SinDNSFrame:
    def __init__(self, data):
        (self.id, self.flags,self.quests, self.answers, self.author, self.addition) =struct.unpack('>HHHHHH', data[0:12])
        self.query =SinDNSQuery(data[12:])
    def getname(self):
        return self.query.name
    def setip(self, ip):
        self.answer =SinDNSAnswer(ip)
        self.answers = 1
        self.flags = 33152
    def getbytes(self):
        res =struct.pack('>HHHHHH', self.id, self.flags, self.quests, self.answers,self.author, self.addition)
        res = res +self.query.getbytes()
        if self.answers != 0:
            res = res +self.answer.getbytes()
        return res
# A UDPHandler to handle DNS query
class SinDNSUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
       data =self.request[0].strip()
        dns =SinDNSFrame(data)
        socket =self.request[1]
        namemap =SinDNSServer.namemap
        if(dns.query.type==1):
           # If this is query a A record, thenresponse it        
           name =dns.getname();
            toip =namemap['*']
            dns.setip(toip)
            print '%s:%s-->%s'%(self.client_address[0], name, toip)
            socket.sendto(dns.getbytes(),self.client_address)
        else:
            # If this is notquery a A record, ignore it
           socket.sendto(data, self.client_address)

# DNS Server
class SinDNSServer:
    def __init__(self,port=53):
        SinDNSServer.namemap ={}
        self.port = port
    def addname(self, name,ip):
        SinDNSServer.namemap[name] = ip
    def start(self):
        HOST, PORT ="0.0.0.0", self.port
        server =SocketServer.UDPServer((HOST, PORT), SinDNSUDPHandler)
        server.serve_forever()
if __name__ == "__main__":
    sev = SinDNSServer()
    sev.addname('*','127.0.0.1') # default address
    sev.start() # start DNSserver

       在vps上直接运行dnslog.py,一个简易的DNSLOG平台就搭起来了。

       运行效果如下图:3.png       回显的ip地址可通过sev.addname('*', '127.0.0.1')自定义。

 

 

4 WEB界面

       使用tornado框架写一个web界面。

       项目已上传至github:https://github.com/sa1tor/dnslog

       pip安装tornado之后直接运行server.py即可,当然也可以使用Nginx+Tornado+Supervisor来进行部署。

       pip install tornado

       python server.py

       默认在8000端口,浏览器访问http://ip:8000/ 即可看到web界面

       我指定了6002端口,python server.py --port=6002

4.jpg

       界面比较简单,只有3个按钮,getsubdomain按钮用来获取随机子域名,refresh按钮用来刷新页面,delete all按钮用来删除所有记录

5 后记

       网上的相关实验大多数都是使用两个域名来实现的,一个域名修改DNS服务器,另一个域名修改NS记录。不过其实只用一个域名也是可以的。

       修改DNS服务器如下图:

5.jpg

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DNSLog渗透测试活动事件是指利用DNSlog进行渗透测试的相关活动。DNSlog是一种工具,它利用DNS解析的过程将渗透测试的结果回显到一个特定的记录DNS日志的网站中。这样可以获取被攻击目标的信息,包括请求的域名和IP地址等。在渗透测试中,DNSlog通常被用于以下场景:SQL注入盲注、XSS盲打、无回显的命令执行、无回显的SSRF和无回显的XXE(Blind XXE)。通过使用DNSlog渗透测试人员可以获取目标系统的敏感信息,并进一步分析和攻击目标系统的漏洞。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【老火柴擦出新火花】利用DNSlog进行更高效率的无回显渗透测试](https://blog.csdn.net/jklbnm12/article/details/118857693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [深度剖析DNSLog注入原理&本地实例测试](https://blog.csdn.net/monster663/article/details/113757235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值