Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-3156-Project — 针对CVE-2021-3156(Baron Samedit)的教育型实验室环境,包含Docker化的易受攻击的sudo目标、漏洞利用脚手架、金丝雀测试、根因分析以及已打补丁版本的对比。 | Kitploit
工具/GitHubGitHub/shams-ul-mehmood/cve-2021-3156-project
权限提升漏洞分析漏洞利用学习与教育二进制利用实验室与实践
GitHubshams-ul-mehmood/cve-2021-3156-project

CVE-2021-3156-Project

针对CVE-2021-3156(Baron Samedit)的教育型实验室环境,包含Docker化的易受攻击的sudo目标、漏洞利用脚手架、金丝雀测试、根因分析以及已打补丁版本的对比。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
521天前尚未审核

CVE-2021-3156 — Baron Samedit

sudo 中的基于堆的缓冲区溢出 → 本地权限提升

ITSOLERA 网络安全部门 | 红队实习 2026


root@kitploit:~
  ██████╗  █████╗ ██████╗  ██████╗ ███╗   ██╗    ███████╗ █████╗ ███╗   ███╗███████╗██████╗ ██╗████████╗
  ██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗  ██║    ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
  ██████╔╝███████║██████╔╝██║   ██║██╔██╗ ██║    ███████╗███████║██╔████╔██║█████╗  ██║  ██║██║   ██║
  ██╔══██╗██╔══██║██╔══██╗██║   ██║██║╚██╗██║    ╚════██║██╔══██║██║╚██╔╝██║██╔══╝  ██║  ██║██║   ██║
  ██████╔╝██║  ██║██║  ██║╚██████╔╝██║ ╚████║    ███████║██║  ██║██║ ╚═╝ ██║███████╗██████╔╝██║   ██║
  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝    ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝╚═════╝ ╚═╝   ╚═╝

⚠️ 仅供教育 / 隔离实验室使用 所有测试必须在 Docker 实验室容器内进行。 切勿针对真实、生产或共享系统运行。


目录

  1. CVE 概述
  2. 此 CVE 的特殊之处
  3. 项目结构
  4. 团队交付物
  5. 快速开始
  6. 漏洞利用原理
  7. 漏洞金丝雀测试
  8. exploit.py 用法
  9. 实验室重置与快照
  10. 已修补与易受攻击版本对比
  11. 参考资料

CVE 概述


此 CVE 的特殊之处

关键点:溢出发生在 set_cmnd() — 即解析参数的函数 — 该函数在 sudo 查询 /etc/sudoers 之前运行。一个 10 秒前创建、拥有零权限的账户即可利用此漏洞。


项目结构

root@kitploit:~
CVE-2021-3156-Project/
│
├── README.md                        ← you are here
│
├── lab/                             ← Member 1: Lab Environment
│   ├── Dockerfile                   ← Ubuntu 20.04 + sudo 1.8.31 (pinned)
│   ├── docker-compose.yml           ← vulnerable target + patched reference
│   ├── evidence_helper.sh           ← pre/post-exploit state capture
│   ├── SETUP.md                     ← step-by-step VM/Docker guide
│   └── config_notes.md              ← CVE conditions & container details
│
├── exploit/                         ← Member 2: Exploit Development
│   ├── exploit.py                   ← Python LPE framework + canary test
│   └── payloads.txt                 ← heap overflow research notes
│
├── docs/                            ← Member 3: Research & Documentation
│   ├── root_cause_analysis.md       ← set_cmnd() deep dive + off-by-one
│   ├── references.md                ← all sources, PoCs, CWE mapping
│   └── mitigation.md                ← sudo upgrade + hardening checklist
│
├── proof/                           ← Member 4: Evidence Collection
│   ├── screenshots/                 ← exploitation screenshots
│   └── terminal_logs.txt            ← command output template + logs
│
└── report/
    └── CVE-2021-3156_Report.docx    ← Member 4: Final professional report

团队交付物

成员 1 — 实验室环境与 CVE 验证

成员 2 — 漏洞利用开发(PoC 脚本)

注意:按照道德准则,不包含可用的内核/堆漏洞利用代码。 exploit.py 中的 TODO 存根引用 https://github.com/blasty/CVE-2021-3156 和 https://github.com/worawit/CVE-2021-3156 作为权威公开 PoC, 供你的团队研究并集成。

成员 3 — 根因分析与研究

文件描述
docs/root_cause_analysis.md详细内容:set_cmnd() 的大小计算与拷贝不匹配、含代码示例的 off-by-one 错误、补丁差异、漏洞利用链、CVSS 7.8 逐项指标、10 年时间线、受影响发行版分布表

成员 4 — 证据收集、报告与集成

文件描述
proof/terminal_logs.txt证据收集模板(用实际实验室输出填写)
proof/screenshots/存放 7 张必需截图的目录
report/CVE-2021-3156_Report.docx12 个部分的专业报告:封面页、执行摘要、CVE 描述、根因分析、CVSS 细分、利用步骤、代码说明、证据清单、缓解措施、时间线、参考资料、免责声明

快速开始

1. 构建并启动实验室

root@kitploit:~
cd CVE-2021-3156-Project/lab/

# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build

# Start both containers
docker compose up -d

# Confirm containers are running
docker compose ps

预期输出:

root@kitploit:~
NAME                      STATUS
baron_samedit_target      running
baron_samedit_patched     running

2. 进入易受攻击的容器

root@kitploit:~
docker exec -it baron_samedit_target bash

3. 确认漏洞条件

root@kitploit:~
# Inside the container as labuser

whoami                         # Expected: labuser
id                             # Expected: uid=1000(labuser)...
sudo --version                 # Expected: Sudo version 1.8.31
sudo -l                        # Expected: Sorry, user labuser may not run sudo...
sudoedit -s '\' 2>&1          # Expected: NOT "usage:" → VULNERABLE

4. 复制并运行漏洞利用程序

root@kitploit:~
# From host machine
docker cp exploit/exploit.py baron_samedit_target:/home/labuser/

# Inside container
python3 exploit.py --check-only      # verify all prerequisites pass
python3 exploit.py --safe-mode       # canary only, no exploitation
python3 exploit.py --cmd "id"        # LPE → show root identity
python3 exploit.py --cmd "whoami /all" --output /tmp/proof.txt

5. 捕获证据

root@kitploit:~
# Inside container — before exploit
~/evidence_helper.sh > /tmp/before.txt

# After exploit
~/evidence_helper.sh > /tmp/after.txt

# Copy to host
docker cp baron_samedit_target:/tmp/before.txt proof/terminal_logs_before.txt
docker cp baron_samedit_target:/tmp/after.txt  proof/terminal_logs_after.txt

漏洞利用原理

root@kitploit:~
Step 1: Run 'sudoedit -s <crafted_argument>'
        ↓
Step 2: sudo calls set_cmnd() to parse arguments in shell mode
        ↓
Step 3: set_cmnd() COUNTS bytes for the cmnd_args buffer (correct size)
        ↓
Step 4: set_cmnd() COPIES bytes — but reads 1 byte past the null
        terminator of any argument ending with '\'
        ↓
Step 5: Off-by-one overflow writes 1 unexpected byte beyond cmnd_args
        ↓
Step 6: Heap grooming (environment variable layout manipulation) ensures
        a valuable sudo struct sits adjacent to the overflowed buffer
        ↓
Step 7: The overflow byte corrupts a pointer in the adjacent struct
        ↓
Step 8: sudo follows the corrupted pointer → executes attacker-controlled
        command (via SUDO_EDITOR) with root privileges
        ↓
Result: uid=0(root) — from a user with ZERO sudo permissions

根本原因一句话总结

root@kitploit:~
size_calculation("A\") = 2 bytes  ≠  copy("A\") = writes 3 bytes → overflow

漏洞金丝雀测试

确认是否存在 CVE-2021-3156 的最安全方式 — 无需进行漏洞利用:

root@kitploit:~
sudoedit -s '\' 2>&1; echo "Exit: $?"

exploit.py 用法

root@kitploit:~
Usage: python3 exploit.py [OPTIONS]

Modes (mutually exclusive):
  --check-only        Run all pre-checks only — no exploitation
  --safe-mode         Run canary test only — confirm vulnerability
  --cmd COMMAND       Execute COMMAND as root after successful LPE

Options:
  --verbose, -v       Show detailed heap/system debug output
  --output, -o FILE   Save all output to FILE
  --no-colour         Disable ANSI colour codes (for log files)
  --help              Show this help message

Examples:
  python3 exploit.py --check-only
  python3 exploit.py --safe-mode
  python3 exploit.py --cmd "id"
  python3 exploit.py --cmd "cat /etc/shadow" --output proof/root_output.txt
  python3 exploit.py --cmd "whoami" --verbose

执行的预检查


实验室重置与快照

快速重置(保留容器,清除临时文件)

root@kitploit:~
docker exec baron_samedit_target bash -c "rm -f /tmp/*.txt /tmp/exploit* /home/labuser/exploit.py"

保存快照

root@kitploit:~
docker commit baron_samedit_target baron-samedit:clean-state
echo "[+] Snapshot saved as baron-samedit:clean-state"

恢复快照

root@kitploit:~
docker compose down
docker run -it --name baron_samedit_target baron-samedit:clean-state bash

完全重置(从头重建)

root@kitploit:~
docker compose down -v
docker compose up -d --build

已修补与易受攻击版本对比

如需在已修补的容器上测试:

root@kitploit:~
docker exec -it baron_samedit_patched bash
# Then repeat the canary test — should output "invalid argument"

参考资料


道德声明

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│  This project was created for EDUCATIONAL PURPOSES ONLY as      │
│  part of the ITSOLERA Cybersecurity Red Team Internship 2026.   │
│                                                                 │
│  ✅ DO:  Use against the isolated Docker lab only               │
│  ✅ DO:  Study the vulnerability to understand heap exploits    │
│  ✅ DO:  Contribute findings to the team report                 │
│                                                                 │
│  ❌ DON'T: Run against any real system, VM, or cloud instance   │
│  ❌ DON'T: Share outside the internship programme               │
│  ❌ DON'T: Use for any unauthorised access                      │
└─────────────────────────────────────────────────────────────────┘

ITSOLERA 网络安全部门 — 红队实习,2026 年夏季

下载工具
属性值
CVE IDCVE-2021-3156
别名Baron Samedit
类型基于堆的缓冲区溢出 → 本地权限提升
组件sudo — Linux 权限工具(src/sudo.c 中的 set_cmnd())
CVSS v3 评分7.8 高危
向量CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
受影响版本sudo 1.8.2 – 1.8.31p2 及 1.9.0 – 1.9.5p1
已修复版本sudo 1.9.5p2(1.9 分支)/ sudo 1.8.32(1.8 分支)
实验室目标版本Ubuntu 20.04 上的 sudo 1.8.31
补丁 KB / 公告SA: https://www.sudo.ws/security/advisories/unescape_overflow/
发现者Qualys 研究团队
披露时间2021-01-26
在野时长(代码)约 2011-07-09(sudo 1.8.2)起 — 约 10 年未被发现
所需认证仅需本地用户 — 无需任何 sudo 权限
属性CVE-2021-3156典型 sudo 本地权限提升
需要 sudoers 条目❌ 否✅ 是
需要 sudo 组成员资格❌ 否✅ 是
需要任何先前的 sudo 访问权❌ 否✅ 是
全新用户账户即可利用✅ 是❌ 否
利用权限系统❌ 完全绕过✅ 滥用
攻击面参数解析器(认证前)权限检查
文件描述
lab/DockerfileUbuntu 20.04,固定 sudo 1.8.31(易受攻击);已安装 Python 3;labuser 账户无任何 sudo 权限
lab/docker-compose.yml编排易受攻击的目标容器 + 已修补的 Ubuntu 22.04 参考容器
lab/evidence_helper.shBash 脚本,用于在漏洞利用前后捕获系统状态(用户、sudo 版本、金丝雀)
lab/SETUP.md分步指南:构建 → 启动 → 进入 → 验证 sudo 版本 → 运行金丝雀测试 → 快照
lab/config_notes.md解释为何无需错误配置、Docker 安全设置、凭据参考
文件描述
exploit/exploit.py完整的 Python 框架:check_platform()、check_sudo_version()、run_canary_test()、get_system_info() + 三个漏洞利用 TODO 存根(select_heap_strategy、build_overflow_argument、trigger_overflow_and_escalate),并附有 blasty/worawit PoC 的详细参考
exploit/payloads.txt堆溢出概念、COMPRESSION_TRANSFORM 等效(参数结构)、三种堆利用策略、失败尝试日志模板、检测特征
docs/references.md
Qualys 公告、MITRE、NVD、sudo 项目、blasty PoC、worawit PoC、ExploitDB、GTFOBins、CWE 映射
docs/mitigation.mdapt-get install --only-upgrade sudo、验证金丝雀、AppArmor 加固、auditd 监控、加固表
输出含义
sudoedit: /\: not a regular file✅ 易受攻击
段错误 / Exit: 139✅ 易受攻击(崩溃)
sudoedit: invalid argument❌ 已修补(1.9.5p2+)
usage: sudoedit ...❌ 已修补
检查项作用
平台(Linux)确保我们运行在 Linux 上
sudoedit 存在在 PATH 中查找 sudoedit
sudo 版本与受影响版本范围(1.8.2–1.8.31p2、1.9.0–1.9.5p1)比对
非 root 身份确认 UID ≠ 0(本地权限提升才有意义)
系统信息收集 glibc 版本和架构以制定堆利用策略
漏洞金丝雀运行 sudoedit -s '\' 并对响应进行分类
测试易受攻击(sudo 1.8.31)已修补(sudo 1.9.5p2+)
sudo --versionSudo version 1.8.31Sudo version 1.9.x
sudoedit -s '\'not a regular file 或段错误invalid argument
exploit.py --safe-mode金丝雀:通过 → 易受攻击金丝雀:失败 → 已修补
exploit.py --cmd iduid=0(root)在检查阶段失败
补丁是否存在?无 KB已应用补丁
来源网址
Qualys 公告https://blog.qualys.com/vulnerabilities-threat-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3156
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2021-3156
sudo 公告https://www.sudo.ws/security/advisories/unescape_overflow/
blasty PoChttps://github.com/blasty/CVE-2021-3156
worawit PoChttps://github.com/worawit/CVE-2021-3156
ExploitDB #49521https://www.exploit-db.com/exploits/49521
Rapid7 Metasploithttps://www.rapid7.com/db/modules/exploit/linux/local/sudo_baron_samedit/
GTFOBins — sudohttps://gtfobins.github.io/gtfobins/sudo/