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

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

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

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

工具目录

分类

查看所有分类
Loading categories
practice-22-23 — CVE-2017-9608 analysis | Kitploit
工具/GitHubGitHub/lacinquette/practice-22-23
Container SecurityVulnerability AnalysisExploitationFuzzingBinary AnalysisLearning & Education
GitHublacinquette/practice-22-23

practice-22-23

CVE-2017-9608 analysis

查看仓库
3年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

项目

运行方式:./script.sh

GitHub仓库 - https://github.com/LaCinquette/practice-22-23

执行步骤

  1. 为了寻找漏洞,我选择了FFmpeg项目。在其中找到了符合要求的提交,具体来说:

    • 符合CWE-476类型 - 空指针解引用
  2. 创建了一个Dockerfile,其中:

    1. 选择Ubuntu 22.04作为基础镜像
    2. 设置DEBIAN_FRONTEND=nointeractive以避免在安装包和其他命令时与命令行交互
    3. 安装了官方维基中指定的必要依赖
    4. 准备工作目录(workdir文件夹)
    5. 下载、解压并将漏洞未修复的提交移动到工作目录
    6. 使用make工具运行程序构建
    7. 创建脚本copy_out.sh,用于查找包含错误的目标文件并将其复制到workspace/out目录
    8. 留下执行脚本copy_out.sh的指令,该指令应在容器启动时执行
  3. 为了自动化,我创建了脚本script.sh,它构建镜像并启动容器,然后从容器中取出文件并将其移动到当前目录:

    1. 删除当前的out文件夹(如果存在)
    2. 构建名为ffmpeg_image的镜像
    3. 基于构建的镜像启动容器,并传递以下参数:
      • --rm 用于在完成后自动删除容器
      • -v $PWD/out:/workspace/out 用于挂载临时目录,通过该目录将目标文件传递到主机
    4. 从out文件夹复制所需的文件
    5. 删除out文件夹

漏洞分析

来源:

  • 修复错误的提交
  • GitHub上的漏洞页面
  • 安全研究员关于漏洞的信件

分析:

问题:

  1. 通过命令ffmpeg -c:v dnxhd -i poc.mov -y output.ts向程序输入一个特制的.mov文件
  2. 为了解析DNxHD格式,调用了dnxhd_parser文件中的dnxhd_parse函数
  3. 它又调用了(同一文件中的)dnxhd_find_frame_end函数,该函数在特定条件下找不到结尾并返回一个非错误代码的负数
  4. 这个数与其他参数一起传递给ff_combine_frame函数(位于parser文件中)用于拼接帧
  5. 由于这个数不是错误代码,ff_combine_frame将其识别为偏移量并尝试重新读取缓冲区中的这些字节,而由于此时缓冲区为空,发生了空指针解引用,导致Segmentation fault

在汇编层面:

0x08000d4e - 节起始

  1. movsxd rcx, dword [rbx + 0xc]

    在rcx寄存器中获取对pc->buffer的引用

  2. add rcx, rdi

    将next加到pc->buffer

  3. add rcx, qword [rbx]

    将pc->last_index加到next和pc->buffer

  4. movzx edi, byte [rcx]

    计算地址rcx处的字节,但由于pc->buffer最初为null,导致Segmentation fault

解决方案:

通过正确处理异常情况,防止访问未分配的内存区域。当检测到剩余字节数为负数时,跳过循环继续处理文件。

下载工具