ffmpeg ,结合 SSRF任意文件读取漏洞
前言
初衷:最近空闲,想通过vulhub靶场进行学习,猛的看到ffmpeg,很熟悉。在2018年开发的堡垒机时,曾经用过它进行视频文件的处理。于是决定从它开始练习写博客。
漏洞分析:漏洞最初是由neex提交到HackerOne平台,并最终获得了1000$的奖励,原文链接为 https://hackerone.com/reports/226756 。根据作者所述,该漏洞利用了FFmpeg可以处理HLS播放列表的特性,而播放列表可以引用外部文件。通过在AVI文件中添加自定义的包含本地文件引用的HLS播放列表,可以触发该漏洞并在该文件播放过程中显示本地文件的内容。
一、ffmpeg是什么?
FFmpeg 背景知识简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。其基本的工作流程是:
原始的封装视频 –> demux 分离器对封装的视频资源进行分离 –> 得到音频资源和视频资源 –> 进行解码 –> 得到解压后的音频资源和视频资源 –> 进入 filter 进行编辑处理 –> 得到处理后的音频资源和视频资源 –> 对资源编码得到转码后的音频资源和视频资源 –> 进入 mux 混合器进行封装 –> 得到转码封装后的视频
HLS (HTTP Live Streaming)
常用的流媒体协议主要有 HTTP 渐进下载(HLS,flash 渐进式等)和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。
在这个中 apple 公司的 HTTP Live Streaming 是这个方面的代表。它会把整个视频流分成多个小的,基于 HTTP 的文件来下载,每次下载一部分,并把视频流元数据存放于 m3u8 文件中。
M3U8文件概念
M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。
简单归纳起来就是:首先将一个完整视频分成多个TS视频文件,用户下载m3u8文件,通过m3u8文件的索引地址 播放具体的每个小段视频。
二、使用步骤
CentOS7下的安装
1、安装过程: 下载安装源,配置,编译,安装,设置环境变量。
# wget http://www.ffmp