目录

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记录,如图所示:

3.2 对外开放53端口

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

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 = 1self.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 + 1self.querybytes =data[0:i + 1](self.type,self.classify) = struct.unpack('>HH', data[i + 1:i + 5])self.len = i + 5def getbytes(self):return self.querybytes+ struct.pack('>HH', self.type, self.classify)
# DNS Answer RRS
class SinDNSAnswer:def __init__(self, ip):self.name = 49164self.type = 1self.classify = 1self.timetolive = 190self.datalength = 4self.ip = ipdef 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.namedef setip(self, ip):self.answer =SinDNSAnswer(ip)self.answers = 1self.flags = 33152def 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.namemapif(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 itsocket.sendto(data, self.client_address)# DNS Server
class SinDNSServer:def __init__(self,port=53):SinDNSServer.namemap ={}self.port = portdef addname(self, name,ip):SinDNSServer.namemap[name] = ipdef start(self):HOST, PORT ="0.0.0.0", self.portserver =SocketServer.UDPServer((HOST, PORT), SinDNSUDPHandler)server.serve_forever()
if __name__ == "__main__":sev = SinDNSServer()sev.addname('*','127.0.0.1') # default addresssev.start() # start DNSserver

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

运行效果如下图:       回显的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

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

5 后记

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

修改DNS服务器如下图:

渗透测试 回显机制平台 dnslog 搭建相关推荐

  1. 掌握渗透测试,从Web漏洞靶场搭建开始

    摘要:漏洞靶场,不仅可以帮助我们锻炼渗透测试能力.可以帮助我们分析漏洞形成机理.更可以学习如何修复提高代码能力,同时也可以帮助我们检测各种各样漏洞扫描器的效果. 本文分享自华为云社区<Web漏洞 ...

  2. 渗透测试-web到内网的总结

    前言 本着知识梳理的心态写的这篇文章,参考了很多大佬的文章,如有侵权,联系必删!! 其中可能有很多不清除的概念,大佬轻喷~~~~~~~~ WEB渗透 sql注入 [存在数据库交互就存在注入,本质就是传 ...

  3. Spring Mvc 数据回显、异常处理、文件上传、json交互、ResTful、拦截器的使用(高级三)

    1,数据回显 SpringMvc包含三种数据回显机制 第一种:对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到request域实现显示. (回顾jsp四 ...

  4. 年轻人不讲武德!200个网络渗透测试工具大汇总

    最近有粉丝私信我说能不能写一期资料整理的文章 那么....它来了! 以下工具适合渗透测试人员,安全研究人员. 可以通过以下命令检查所有的工具: git clone --recursive https: ...

  5. 【CyberSecurityLearning 32】Apache配置、Apache的访问控制设定、LAMP平台的搭建

    目录 Apache配置 web服务 Apache 1.先启动httpd服务 2.通过端口来验证服务是否启动 3.建立主页 4.关于Apache服务软件的主配置文件分析 Apache的访问控制设定 1. ...

  6. iView级联选择器Cascader回显慢的问题

    简单小结一下,iView在日常开发中所遇到的一点小问题, 今日简单聊聊iView级联选择器Cascader的使用心得: [参考资料:iView ] 1.存在问题: Cascader选择器在回显数据时会 ...

  7. [渗透测试学习靶机05] vulnhub靶场 DarkHole: 2

    kali IP地址为192.168.127.139 靶机 IP地址为192.168.127.144 目录 一.信息搜集 1.1.扫描主机口 1.2. 扫描端口 1.3.访问端口 1.4.扫描目录 二. ...

  8. 84.网络安全渗透测试—[SQL注入篇23]—[高级注入技巧-dnslog无回显注入]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.高级注入技巧 dnslog无回显注入 1.原理 2.dnslog平台 3.MySQL dnslog无回显注入 ...

  9. kali dvwa php mysql,kali linux 2.0下搭建DVWA渗透测试演练平台

    DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...

最新文章

  1. escape sequence
  2. c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...
  3. 一个网卡设置多个IP作用
  4. Win32页上的所有控件属性与方法
  5. flash大作业一分钟源文件_「百树云课堂」一写作业就像被雷劈,是什么“病”?...
  6. 阜阳市计算机学校助学金申请书,计算机系贫困生助学金申请书
  7. Java面试高频题:Spring Boot+JVM+Nacos高并发+高可用已撸完​
  8. php本地文件打包代码,PHP实战:几行代码轻松实现PHP文件打包下载zip
  9. 量化信噪比 非均匀量化_键摄基础1:为什么要正确曝光/ADC精度和量化噪声
  10. (82)Verilog HDL:状态机二段式
  11. 测试开发工程师成长日记001 - 敏捷测试、CI/CD/CT、DecOps的一些介绍
  12. C++ 代码实现定义法计算行列式的值
  13. PyQt5之Drag拖曳功能
  14. C语言学习教程免费分享
  15. 由于系统错误 1114:动态连接库(DLL)初始化例程失败。(MySQL ODBC 5.3 Unicode Driver,c:\Program Files(x86)\MySQL\Connector
  16. python找不到指定模块sklearn怎么办_python中sklearn找不到指定模块怎么办
  17. 面部刮痧:别样的美丽疗法
  18. push时git报错 error: failed to push some refs to 'git@gitee.com:git_zn/jianli.git' 解决办法...
  19. 计算机是如何读懂高级语言的——编译过程简述
  20. 微盟副总裁樊欣:洞见下一个风口

热门文章

  1. 架构师之路 — API 经济 — Web、HTTP Server、API Service、Application
  2. Windwos 08R2_DNS+AD安装图文
  3. altium designer 原理图和PCB 多通道设计
  4. CentOS 6.5 安装 Mysql 5.7.* (tar.gz)
  5. debian配置集锦
  6. 非微信打开不显示页面
  7. Tomcat7.0源码分析——Session管理分析(上)
  8. 【vijos】P1448 校门外的树
  9. 时代中坚:互联网电视迎来极致时代
  10. 放弃OpenStack?恐怕还不到时候