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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-29780 — 演示了官方 eml-parser 示例脚本中的路径遍历漏洞,该漏洞允许通过精心构造的附件文件名实现任意文件写入,并附有 PoC 和修复方案。 | Kitploit
工具/GitHubGitHub/redyank/cve-2026-29780
静态分析漏洞分析代码分析漏洞利用Web安全
GitHubredyank/cve-2026-29780

CVE-2026-29780

演示了官方 eml-parser 示例脚本中的路径遍历漏洞,该漏洞允许通过精心构造的附件文件名实现任意文件写入,并附有 PoC 和修复方案。

查看仓库
14个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

官方示例脚本中的路径遍历漏洞导致任意文件写入

摘要

官方示例脚本 examples/recursively_extract_attachments.py 包含一个路径遍历漏洞,允许在预期输出目录之外进行任意文件写入。从解析的邮件中提取的附件文件名未经任何清理直接用于构造输出文件路径,使得攻击者控制的文件名能够逃逸目标目录。

详情

文件:examples/recursively_extract_attachments.py 行号:61–64

root@kitploit:~
for a in m['attachment']:
    out_filepath = out_path / a['filename']  # 无清理
    print(f'\t正在写入附件: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))

值 a['filename'] 可通过精心构造的邮件附件头由攻击者控制:

root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"

写入前未执行任何路径规范化或边界验证。

PoC

  1. 创建一个恶意 .eml 文件:
root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"
  1. 运行示例脚本:
root@kitploit:~
python recursively_extract_attachments.py -p ./emails -o ./safe
  1. 预期结果:./safe/pwned.txt
  2. 实际结果:./outside/pwned.txt ← 写入预期目录之外

已在 Kali Linux 上通过 pip 在虚拟环境中安装 eml-parser 进行验证。

影响

此漏洞仅限于示例脚本,不影响核心 eml-parser 库。然而,由于该脚本属于官方仓库的一部分,且很可能被改编用于生产环境,攻击者提供精心构造的邮件即可在执行上下文中实现任意文件写入。

潜在攻击场景包括:

  • Cron 任务注入:filename="../../etc/cron.d/backdoor"
  • Web shell 上传:filename="../../var/www/html/shell.php"
  • SSH 密钥注入:filename="../../home/user/.ssh/authorized_keys"

建议修复方案

root@kitploit:~
import os.path

for a in m['attachment']:
    filename = os.path.basename(a['filename'])
    out_filepath = out_path / filename

    if not out_filepath.resolve().is_relative_to(out_path.resolve()):
        print(f'[!] 跳过可疑文件名: {a["filename"]}')
        continue

    print(f'\t正在写入附件: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))
下载工具