渗透测试 回显机制平台 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记录,如图所示:
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 搭建相关推荐
- 掌握渗透测试,从Web漏洞靶场搭建开始
摘要:漏洞靶场,不仅可以帮助我们锻炼渗透测试能力.可以帮助我们分析漏洞形成机理.更可以学习如何修复提高代码能力,同时也可以帮助我们检测各种各样漏洞扫描器的效果. 本文分享自华为云社区<Web漏洞 ...
- 渗透测试-web到内网的总结
前言 本着知识梳理的心态写的这篇文章,参考了很多大佬的文章,如有侵权,联系必删!! 其中可能有很多不清除的概念,大佬轻喷~~~~~~~~ WEB渗透 sql注入 [存在数据库交互就存在注入,本质就是传 ...
- Spring Mvc 数据回显、异常处理、文件上传、json交互、ResTful、拦截器的使用(高级三)
1,数据回显 SpringMvc包含三种数据回显机制 第一种:对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到request域实现显示. (回顾jsp四 ...
- 年轻人不讲武德!200个网络渗透测试工具大汇总
最近有粉丝私信我说能不能写一期资料整理的文章 那么....它来了! 以下工具适合渗透测试人员,安全研究人员. 可以通过以下命令检查所有的工具: git clone --recursive https: ...
- 【CyberSecurityLearning 32】Apache配置、Apache的访问控制设定、LAMP平台的搭建
目录 Apache配置 web服务 Apache 1.先启动httpd服务 2.通过端口来验证服务是否启动 3.建立主页 4.关于Apache服务软件的主配置文件分析 Apache的访问控制设定 1. ...
- iView级联选择器Cascader回显慢的问题
简单小结一下,iView在日常开发中所遇到的一点小问题, 今日简单聊聊iView级联选择器Cascader的使用心得: [参考资料:iView ] 1.存在问题: Cascader选择器在回显数据时会 ...
- [渗透测试学习靶机05] vulnhub靶场 DarkHole: 2
kali IP地址为192.168.127.139 靶机 IP地址为192.168.127.144 目录 一.信息搜集 1.1.扫描主机口 1.2. 扫描端口 1.3.访问端口 1.4.扫描目录 二. ...
- 84.网络安全渗透测试—[SQL注入篇23]—[高级注入技巧-dnslog无回显注入]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.高级注入技巧 dnslog无回显注入 1.原理 2.dnslog平台 3.MySQL dnslog无回显注入 ...
- kali dvwa php mysql,kali linux 2.0下搭建DVWA渗透测试演练平台
DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...
最新文章
- escape sequence
- c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...
- 一个网卡设置多个IP作用
- Win32页上的所有控件属性与方法
- flash大作业一分钟源文件_「百树云课堂」一写作业就像被雷劈,是什么“病”?...
- 阜阳市计算机学校助学金申请书,计算机系贫困生助学金申请书
- Java面试高频题:Spring Boot+JVM+Nacos高并发+高可用已撸完​
- php本地文件打包代码,PHP实战:几行代码轻松实现PHP文件打包下载zip
- 量化信噪比 非均匀量化_键摄基础1:为什么要正确曝光/ADC精度和量化噪声
- (82)Verilog HDL:状态机二段式
- 测试开发工程师成长日记001 - 敏捷测试、CI/CD/CT、DecOps的一些介绍
- C++ 代码实现定义法计算行列式的值
- PyQt5之Drag拖曳功能
- C语言学习教程免费分享
- 由于系统错误 1114:动态连接库(DLL)初始化例程失败。(MySQL ODBC 5.3 Unicode Driver,c:\Program Files(x86)\MySQL\Connector
- python找不到指定模块sklearn怎么办_python中sklearn找不到指定模块怎么办
- 面部刮痧:别样的美丽疗法
- push时git报错 error: failed to push some refs to 'git@gitee.com:git_zn/jianli.git' 解决办法...
- 计算机是如何读懂高级语言的——编译过程简述
- 微盟副总裁樊欣:洞见下一个风口
热门文章
- 架构师之路 — API 经济 — Web、HTTP Server、API Service、Application
- Windwos 08R2_DNS+AD安装图文
- altium designer 原理图和PCB 多通道设计
- CentOS 6.5 安装 Mysql 5.7.* (tar.gz)
- debian配置集锦
- 非微信打开不显示页面
- Tomcat7.0源码分析——Session管理分析(上)
- 【vijos】P1448 校门外的树
- 时代中坚:互联网电视迎来极致时代
- 放弃OpenStack?恐怕还不到时候