极端环境下DNS协议出网的命令回显

admin 2023年3月20日00:15:40评论31 views字数 2078阅读6分55秒阅读模式

之前有想过去写一个读取dnslog去获取命令回显的工具,后面看到已经有师傅写过了,就没研究了;但是过了一阵子,工具自带的dnslog改了时区,导致原有工具使用不了,于是,A0WaQ4师傅就二开+优化了这个工具,挺好用,也很方便。

0x01.背景

在一次日常的渗透测试任务中,进入了若依的后台,其中存在定时任务命令执行漏洞,但是无法使用http远程加载类执行命令,也无法注入内存马。

极端环境下DNS协议出网的命令回显

此时想到了这个漏洞可以利用ldap协议来执行命令,所以尝试使用了jndi来注入内存马,结果失败了,尝试执行命令,发现可以成功,但是无法直接上线。但此时发现它可以ping通DNS。由此产生了这篇文章。

极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显

0x02.漏洞利用

若依,命令无法正常回显,DNS协议出网,无法注入内存马,无法直接上线,种种特征使我立刻想到了一个工具:

https://github.com/sv3nbeast/DnslogCmdEcho

0x001.回显工具

极端环境下DNS协议出网的命令回显

该工具可以在极端环境下通过DNS获取命令回显。

研究了代码逻辑,发现该工具的实现是使用Hex编码命令执行的结果,将编码存储到一个文件中,再逐行读取该文件,将命令回显的Hex编码通过DNS协议发送出去,然后再根据DNS获取的结果重组编码获取命令回显。

0x002.出现问题

但是在使用过程中出现了很多问题,例如由于DNS服务器的时区和我的电脑时区不一样无法获取命令回显,使用的DNS服务器dim.pm无法接收到目标机器的DNS等。

极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显

0x003.略作修改

为了使用该工具,我更换了DNS服务器,调整了时区,最终获取了命令回显。

极端环境下DNS协议出网的命令回显

但是很明显,没有获取到完整的命令回显,最有可能的原因是命令回显太大,发送DNS需要时间,而该工具仅在3秒内就获取结果,导致无法获取完整的命令回显,由此我产生了彻底改造该工具的想法。

0x03.工具改造

改造的目标分为以下几个点:

修改DNS服务器

修改时区

合并两个文件,减少人工行为

获取完整的命令回显

0x001.修改DNS服务器

我选择了ceye服务器,利用它的过滤器可以达成dig.pm的token效果。

极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显

0x002.修改时区

这一点很简单,因为使用的是ceye服务器,所以使用的也是UTC时区,所以直接使用之前修改工具时已经加上的时区转换。

极端环境下DNS协议出网的命令回显

0x003.合并两个文件

原工具使用两个文件生成Windows和Linux命令,这可以直接合并在一起,只要让其每一次初始化时可以执行一次获取新的命令即可。

极端环境下DNS协议出网的命令回显

同时发现了Linux的命令在zsh下无法执行,也做了一下兼容。

0x004.获取完整的命令回显

实现该功能,只需要利用filter获取完整的DNS结果即可。实现过程,实现一个新的初始化函数get_config(),在想要获取完整的命令回显时只使用get_config()来初始化,便可直接进入到解码Hex的过程中,获取命令回显。

极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显

0x04.使用

usage: HexDnsEchoT.py [-h] [-d DNSURL] [-t TOKEN] [-lt LASTFINISHTIME] [-f FILTER] [-m MODEL]

options:
  -h, --help            show this help message and exit
  -d DNSURL, --dnsurl DNSURL
                        ceye dnslog
  -t TOKEN, --token TOKEN
                        ceye token
  -lt LASTFINISHTIME, --lastfinishtime LASTFINISHTIME
                        the lastfinisgtime
  -f FILTER, --filter FILTER
                        dns filter
  -m MODEL, --model MODEL
                        recent result

命令如下:

python3 HexDnsEchoT.py -d YourCeye.ceye.io -t ceyeToken
极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显

复制输出的命令,在目标机器上执行:

极端环境下DNS协议出网的命令回显

DNS获取到请求,进行解密,获取机器信息:

极端环境下DNS协议出网的命令回显

执行成功后自动开启新的filter,无需重新执行直接进行下一步命令执行

极端环境下DNS协议出网的命令回显

有时会出现目标机器的命令未执行完成,但是已经获取到了一部分结果,可以使用以下命令再次获取结果,本命令已经输出在上次的执行结果中,可直接复制使用:

python3 HexDnsEchoT.py -d yourceye.ceye.io -t ceyetoken -f filterstr -lt "上次命令执行的时间" -m GR
极端环境下DNS协议出网的命令回显
极端环境下DNS协议出网的命令回显

0x05.总结

在遇到工具无法使用时不要放弃,多想想办法就可以解决。

0x06.工具地址

https://github.com/A0WaQ4/HexDnsEchoT


原文始发于微信公众号(only security):极端环境下DNS协议出网的命令回显

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月20日00:15:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   极端环境下DNS协议出网的命令回显http://cn-sec.com/archives/1614892.html

发表评论

匿名网友 填写信息