对 Cobalt Strike DNS隧道的理解与实战-对 Cobalt Strike DNS隧道的理解与实战-华盟网

对 Cobalt Strike DNS隧道的理解与实战

华盟学院山东省第二期线下学习计划

开始之前,有必要先稍微理解下基于dns beacon的大致通信过程,其实,非常非常简单,前提是你对dns的解析过程早已经烂透于心,不熟悉的朋友可以先去参考前段时间写的 [DNS 深度理解 一] ,把基础打扎实了,再回过头来理解这些东西自然就易如反掌了


1、-> beacon shell会向指定的域名发起正常的dns查询 


2、-> 中间依然是经过一些列的常规dns迭代及递归查询,大致过程就是,一直从根开始找,直到找到我们自己的ns服务器,最后再定位到团队服务器ip,仅此而已


3 、 -> 也就是说,第一次通信可能会慢点,后续就会稍微快些,不过说实话,dns再快也快不到哪里去,毕竟,我们要的是足够的隐蔽,而不一味追求速度,不然容易露点 


0x02 

废话说完,我们就开始来尝试在实战中应用,首先,你要先买台vps,亚马逊或者vultr都挺不错的,自己也一直在用,之后装好系统,推荐用ubuntu,此处演示用的是ubuntu 16.04.2,具体的系统安装方法直接一路点点点就好了,全程傻瓜化,大概等个六七分钟,待系统初始化完成就可以用ssh连上去了

对 Cobalt Strike DNS隧道的理解与实战

0x03

成功连到vps上以后,接着就开始配置jdk,关于对jdk版本的选择需要稍微注意下,jdk版本和cobalt strike版本务必要保持兼容,因为演示的用的是cobalt strike 3.8,所以此处就用的jdk1.8,如下,则是jdk在Ubuntu中的具体配置过程


1、wget http://enos.itcollege.ee/~jpoial/allalaadimised/jdk8/jdk-8u152-linux-x64.tar.gz

2、tar xf jdk-8u152-linux-x64.tar.gz

3、mv jdk1.8.0_152/ /usr/local/ln -s /usr/local/

4、ln -s /usr/local/jdk1.8.0_152/ /usr/local/jdk

5、# vi /etc/profile

6、   export JAVA_HOME=/usr/local/jdk/

7、   export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

8、  export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

9、# source /etc/profile

10 、# java -version

对 Cobalt Strike DNS隧道的理解与实战

0x04 

搞定vps,再紧接着就要去准备域名了,推荐直奔 godaddy,别问我为什么,以后你就会明白的,注册域名时切记千万不要用真实的个人信息,别用太扎眼的字符,如,hack,sec,fuck,rootkit,backdoor 之类,不然,别人一眼就看出来了,可以选择注册一些非常常规的,如 shop,book,之类……相对还容易蒙混过关,域名搞定以后,就可以来配置解析了,如下,首先,你要创建一条A记录,A记录务必要指向我们自己团队服务器的ip,而后再创建几条ns记录,此处创建了三个ns记录,实际中还可以更多些,然后再把所有ns记录的A记录指向刚刚创建的A记录,也就是说,让解析可以准确的找到我们的团队服务器位置,此处是整个过程最核心的一步,务必要好好理解

对 Cobalt Strike DNS隧道的理解与实战

0x05 

域名解析配置完成后,我们可以拿 dig +trace 域名先来简单跟踪下域名解析过程,看看我们的ns最后是不是被解析到了之前指定的A记录上,如果解析不到,也就意味着你的payload回连时很可能就定位不到团队服务器,后果就是无法正常上线,此处务必成功,再往后继续,否则都是徒劳

对 Cobalt Strike DNS隧道的理解与实战

0x06 

一切准备就绪,在本地用cobalt strike客户端连到我们的团队服务器上,创建监听器和payload,注意,这里的payload要选择beacon_dns,host要用A记录的域名,端口随意,最好用一些穿透性比较强的端口

对 Cobalt Strike DNS隧道的理解与实战

此处是用于解析上述A记录的ns服务器域名,把我们之前创建的那三个ns域名全部加进去,用逗号隔开即可

对 Cobalt Strike DNS隧道的理解与实战

最后,再基于此listener创建payload,丢到目标机器上执行,稍微等一下,即可看到目标成功上线后的效果,如下

对 Cobalt Strike DNS隧道的理解与实战

此时,再回到目标机器上看看都发生了什么,首先,是目标机器不停发送针对我们域名的dns请求,因为它最终要定位到团队服务器把封装在里面的数据传给它

对 Cobalt Strike DNS隧道的理解与实战

再来看看目标机器的进程端口,我们发现只有进程,似乎没端口,其实并不是没端口,而是在睡眠,我们暂时看不见而已

www.idc126.com

对 Cobalt Strike DNS隧道的理解与实战

后话:

俗称 域名上线,只不过底层用的是dns协议,而非http,https,或者udp…使用dns的好处,想必就不用再多说了,大家应该早都熟透了,域名相对于ip有更强的隐蔽性,而且它相对比较固定,只要没被发现,解析到的ip是可以随便换的,也就是说,不用担心你的权限再因为这样的原因掉了,这样也给了我们更多的灵活性,另外,cobalt strike也非常轻量,在目标机器上几乎是感觉不到的,在你自己团队没有很强的RAT能力时,Cobalt Strike将会是个非常不错的替代品。


文章出处: 黑白之道

本文由 华盟网 作者:karl456789 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论