问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
0成本快速创建高匿HTTP/DNS LOG
安全工具
0成本保姆级手把手教你搭建自己专属的高匿HTTP/DNS LOG,从此挖洞无忧!
0x0 前言 ------ 经过log4j2漏洞的洗礼,相信很多人意识到自建DNSLog的重要性。笔者的工作流有两个,一个是类似P神Conote那种常规化的功能高度集成的WEB平台,另一个则是今天要与大家分享的,如何零成本快速创建一个高匿HTTP/DNS LOG服务的。 0x1 申请域名 -------- 挂上代理访问:<https://www.freenom.com/zh/index.html?lang=zh>  输入一个域名进行获取即可,然后点击右上角的`check out`去结算。  申请域名结束后,进入域名管理,配置NameServer,指向CloudFlare。 ```bash darl.ns.cloudflare.com gene.ns.cloudflare.com ```  CloudFlare的域名解析记录的速度是非常快的,后面添加到[CloudFlare](https://www.cloudflare.com/)即可。  0x2 配置NS记录 ---------- 分别申请两个DNS记录,NS记录代表子域名`log.log4j.ga`的DNS服务器为`ns.log4j.ga`。 然后我们设置`ns.log4j.ga`的A记录指向我们DNS服务器所在的地址即可。  为了测试是否生效,可以用Python2写一个简单的DNS服务器返回指定的应答IP。 ```python #/usr/bin/python2 # -*- coding:utf-8 -*- from twisted.internet import reactor, defer from twisted.names import client, dns, error, server record={} class DynamicResolver(object): def _doDynamicResponse(self, query): name = query.name.name # 返回指定应答IP ip = "x.x.x.x" print(name+" ===> "+ip) answer = dns.RRHeader( name=name, type=dns.A, cls=dns.IN, ttl=0, # 这里设置DNS TTL为 0 payload=dns.Record_A(address=b'%s'%ip,ttl=0) ) answers = [answer] authority = [] additional = [] return answers, authority, additional def query(self, query, timeout=None): return defer.succeed(self._doDynamicResponse(query)) def main(): factory = server.DNSServerFactory( clients=[DynamicResolver(), client.Resolver(resolv='/etc/resolv.conf')] ) protocol = dns.DNSDatagramProtocol(controller=factory) reactor.listenUDP(53, protocol) reactor.run() if __name__ == '__main__': raise SystemExit(main()) ``` 如图说明配置成功:  0x3 选择一 部署Knary --------------- 二进制文件部署: ```bash wget https://ghproxy.com/https://github.com/sudosammy/knary/releases/download/v3.3.1/knary-3.3.1-linux-amd64 chmod +x knary-3.3.1-linux-amd64 mv knary-3.3.1-linux-amd64 knary ./knary ``` 如果二进制不安全,可以考虑Docker 快速搭建: ```bash export GIT_SSL_NO_VERIFY=0 git clone http://ghproxy.com/https://github.com/sudosammy/knary.git # 编辑docker-compose.yaml的信息 vim docker-compose.yaml ``` 可以看到环境变量信息有两种配置方式,一种是利用当目前的`.env`文件,一种是直接配置环境变量`environment`,也可以混合来用,我这里先配置下`CANARY_DOMAIN`=`CANARY_DOMAIN=log.log4j2.ga`。 ```dockerfile version: "3.9" services: knary: container_name: knary hostname: knary restart: always env_file: - .env # as commented below, you can also use the `environment` key to specify variables. This will overwrite anything in `env_file` # environment: # - DNS=true # - HTTP=true # - BIND_ADDR=127.0.0.1 - CANARY_DOMAIN=log.log4j2.ga # (etc. etc.) build: . ports: - "80:80" - "443:443" - "53:53/udp" volumes: - ./certs:/certs/ ``` 编辑一份环境变量: ```bash vim .env # 内容 # RENAME ME TO .env DNS=true HTTP=true BIND_ADDR=0.0.0.0 CANARY_DOMAIN=log.log4j.ga LETS_ENCRYPT=xxxxx@qq.com EXT_IP=1x1.xxx.1xx.x3 DEBUG=true LOG_FILE=knary.log ``` 有两种方法,快速配置HTTPS证书: 1)自签名证书 当前目录创建一个cert文件夹 ```bash mkdir certs ``` openssl创建证书 ```bash sudo 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启动 ```bash # 卸载原先docker apt-get remove -y remove docker # 安装最新docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 安装docker-compose sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose sudo chmod +x /usr/bin/docker-compose ```  Ubuntu构建过程可能会报错,修改`/etc/resolv.conf`的值为这个即可。 ```php nameserver 8.8.8.8 nameserver 114.114.114.114 nameserver 127.0.0.53 nameserver 223.5.5.5 options edns0 ``` 为了兼容国内VPS还需要修改Dockerfile添加`Golang`代理,要不然`go get`会失败: ```bash RUN export GOPROXY=https://goproxy.io && go get . ```  **效果展示** 强烈推荐直接二进制运行,非常方便!  Docker运行界面:  0x4 选择二 部署Hyuga --------------- ```bash git clone https://github.com/Buzz2d0/Hyuga.git cd Hyuga ``` 修改`config.xml`文件 ```bash cd hyuga/ vim config.yaml ``` 配置如图所示:  Docker快速组建: ```bash docker-compose build docker-compose up -d ``` 如图所示,搭建成功!  访问:<http://log.log4j.ga/> DNS记录:  HTTP记录:  设置DNS重绑定:  ```php for((i=1;i<=2;i++)) do sleep 0.5 && dig @8.8.8.8 r.amz3.log.log4j.ga; done ```  0x5 选择三 部署Interactsh -------------------- 1\) 手工搭建 安装Golang 1.16.1环境: ```bash sudo apt-get update sudo apt-get -y upgrade apt install -y gcc mkdir tmp cd /tmp wget https://dl.google.com/go/go1.16.1.linux-amd64.tar.gz sudo tar -xvf go1.16.1.linux-amd64.tar.gz sudo mv go /usr/local/ echo "export GOROOT=/usr/local/go" >> ~/.profile echo "export GOPATH=$HOME/go" >> ~/.profile echo "export PATH=$GOPATH/bin:$GOROOT/bin:$PATH" >> ~/.profile source ~/.profile ``` 安装Interachsh Server ```bash go install -v github.com/projectdiscovery/interactsh/cmd/interactsh-server@latest ``` 2\) docker搭建 ```bash docker run projectdiscovery/interactsh-server:latest -domain log.log4j.ga ``` 用法: ```bash interactsh-server -domain log.log4j.ga -auth ```  获取到Client Token,打开https://app.interactsh.com/#/  结果界面显示:  0x6 分析三者优缺点 ----------- Knary的优点在于支持单文件部署,支持国外的信息推送、支持域名过滤,支持DNS、HTTP/HTTPS,缺点则是缺乏可视化界面、不支持生成随机域名,且运行的时候并不是很稳定,内存占用有点高。 Hyuga是国内开发者开发的,可以说很符合笔者的需求,有良好、简洁的WEB界面,支持DNS、HTTP、支持DNS重绑定、支持API,安装过程也很简单,但是很可惜缺乏信息推送和支持HTTPS请求,但是目前来说这个工具能满足大部分的需求了。 Interactsh安装过程也并不复杂,支持DNS、HTTP/HTTPS等多种协议,有可视化界面,支持生成随机域名,可通过与projectdiscovery的notify工具联动来进行信息推送,缺点不支持国内信息推送流、生成的随机域名太长,容易被判定为恶意网址。 笔者针对三者做了个简单的对比表格: | | [Knary](https://github.com/sudosammy/knary/) | [Hyuga](https://github.com/Buzz2d0/Hyuga) | [Interactsh](https://github.com/projectdiscovery/interactsh/) | |---|---|---|---| | DNS | √ | √ | √ | | HTTP | √ | √ | √ | | HTTPS | √ | × | √ | | WEB | × | √ | √ | | 信息推送 | √ | × | √ | | API | × | √ | × | | 支持随机子域 | × | √ | √ | | 安装过程 | 非常简单 | 简单 | 简单 | | 使用难易 | 较难 | 简单 | 有点难 | 0x7 问题汇总 -------- 下面由于安装环境的差异,可能会出现这些问题,提供给读者进行参考。 1\) 53端口占用 `vim /etc/systemd/resolved.conf`,如下图配置,关闭监听。  接着重启服务,`sudo systemctl restart systemd-resolved`,发现53端口不被占用了。  如果出现这个错误,VPS一直都是依赖本地的DNS服务器,因为关闭了53端口导致错误。 `vim /etc/resolv.conf`,分别指定两个公共DNS服务器即可。  2)域名没有备案,针对国内的VPS。 有两种解决方案: 1)不要用80,8080,443等端口,但这样会限制使用性,不推荐。 2)建议更换为国外服务器,比如Vultr、digital等等,按时间付费都很便宜。 3)乖乖备案,合理使用,适合白帽子! 0x8 总结 ------ 本文可以说是保姆级别的手把手教程了,涵盖了Github中较为流行、可用性强的项目具体搭建过程及其调试步骤,一条龙服务踩坑填坑,将三者的优缺点进行了分析。基于本文,读者不仅可以无需购买域名即可快速搭建出私人的Log,还可深入拓展研究,由于三个项目都是开源的,且代码量不大,有能力的读者完全可以去DIY自己的功能。
发表于 2021-12-31 09:43:44
阅读 ( 9728 )
分类:
安全工具
2 推荐
收藏
0 条评论
请先
登录
后评论
xq17
11 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!