標籤:

FFMPEG任意文件讀取漏洞靶場搭建過程

醜化說在前頭,我這人有一癖好,就是研究一些已經過時的東西,發一些過時的文章。文章之前就寫好了,只是一直沒發出來充數。距離FFMPEG任意文件讀取漏洞發布的時間已經過去很久了,記得剛出來那會兒國內幾個大型的視頻網站都有這個問題。靶機是之前為了一個比賽場景搭建的,作為環境搭建的初探者,主要介紹下自己在搭建這個環節過程中遇到的一些坑。

1. 搭建需求

搭建一個FFMPEG任意文件讀取漏洞靶場,可用於漏洞練習或者攻防題目。

2. Win2003下復現FFMPGE任意文件讀取漏洞

最初想法:優先嘗試了win下復現FFMPEG任意文件讀取漏洞。

結果在WIN上搭建FFMPEG,出現補丁報錯的情況。

找到解決辦法,安裝如下補丁:WindowsServer2003-KB914961-SP2-x86-CHS,地址:microsoft.com/zh-cn/dow

解決後可以正常運行ffmpeg並實現視頻、圖片等文件的格式轉換,但問題由來了。 Windows下無法復現ffmpeg任意文件讀取漏洞,原因如下:ffmpeg任意文件讀取漏洞payload中需要利用類似linux中的/dev/zero的空文件進行對數據進行讀取和不斷的寫入。Win下不存在這種文件或者功能。嘗試修改payload無果,最後沒能在win下復現該漏洞。

3. Linux下復現FFMPGE任意文件讀取漏洞

Linux下安裝ffmpeg漏洞版本很容易,也不會出問題。直接執行如下腳本便可安裝好。

sudo apt-get install build-essential git-core checkinstall yasm texi2html libvorbis-dev libx11-dev libvpx-dev libxfixes-dev zlib1g-dev pkg-config netcat libncurses5-devnFFMPEG_VERSION=2.3.3ncd /usr/local/srcnif [ ! -d "/usr/local/src/ffmpeg-${FFMPEG_VERSION}" ]; thenn sudo wget "http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2"n sudo tar -xjf "ffmpeg-${FFMPEG_VERSION}.tar.bz2"nfincd "ffmpeg-${FFMPEG_VERSION}"nsudo ./configure --enable-version3 --enable-postproc --enable-libvorbis --enable-libvpxnsudo makensudo checkinstall --pkgname=ffmpeg --pkgversion="5:${FFMPEG_VERSION}" --backup=no --deldoc=yes --defaultn

執行poc,生成avi文件:python3 gen_xbin_avi.py file:///etc/passwd 111.avi

POC地址:

github.com/neex/ffmpeg-

本地測試漏洞:轉換視頻格式ffmpeg -i 111.avi 2.mp4

播放轉換格式後的視頻文件,成功看到轉換過程中寫入的文件。

4. Ubuntu下搭建環境的坑

為了用戶體驗好,決定找一個像模像樣的整站,嵌入視頻處理功能實現需求。

l 優先想到的是找個開源的在線視頻cms進行修改,結果找了很久也沒找到這樣的站點。

l 沒辦法,上述路線走不通只能自己搭建了,於是基於如下基礎漏洞代碼,找個cms寫個視頻的功能。可是,最終發現效果太深(生)硬。一看就知道問題所在了沒什麼意思。

l 最後,在wordpress的插件中搜索ffmpeg關鍵詞發現有處理視頻的插件。發布文章時可以嵌入視頻,於是研究一番真的可以調用ffmpeg處理視頻,插件名為:Video Embed & Thumbnail Generator。最後決定用自豪的WordPress搭建這個環境。

那麼,先搭建LAMP環境。

? Mysql安裝坑

通過sudo apt-get install mysql-server 安裝的mysql默認以mysql_safe模式啟動,此模式下很難完成mysql提權操作。所以最好是自己下載mysql版本進行編譯安裝。

? 安裝&修復PHPmyamdin報錯

sudo apt-get install phpmyadminnsudo cp /usr/share/phpmyadmin /var/www/html -an

通過apt-get安裝的phpmyadmin可通過sudo dpkg-reconfigure phpmyadmin解決報錯問題。

5. WordPress下調用ffmpeg任意文件讀取

看來這麼多,MD終於可以進入正題了。來吧,相互傷害(裝插件)吧。

WordPress後台安裝插件:Video Embed & Thumbnail Generator。安裝後看下配置項中bin、ffmpeg的位置是否對應得上。

安裝後會自動執行測試命令,如果配置沒問題會有如下顯示:

安裝好後咋們就可以去發布文章了,在添加媒體處,可以上傳視頻文件:

上傳後編輯視頻文件,可調用ffmpeg插件進行處理視頻,包括格式轉換,截圖等等。

這裡最快的方法就是直接點Generate進行截圖:發現在這個過程中已經進行了文件讀取:

所以,這個FFMPEG文件讀取漏洞不管是存在於視頻文件轉換過程中,圖片等格式的轉換也可能造成任意文件讀取。

6. 解決Wordpress配置訪問IP問題

本以為大功告成了,結果又遇到了一個坑。wordpress在安裝時會向資料庫中寫明站點URL,在站點遷移或者想同時部署多個靶機時,會出先因為IP地址和URL地址不一致問題,導致無法正常使用。如原始伺服器IP為192.168.222.13。當站點被遷移到其他機器,伺服器IP變更為192.168.222.133時候,你再訪問192.168.222.133/便會出現如下情況:站點無法正常顯示,而且很慢。

訪問後台地址192.168.222.133/wp-admi,網站會自動跳轉到初始配置IP。

192.168.222.133/wp-logi

這樣肯定不行呀,怎麼解決楠?

參考了網上提供的方法,不太實用需求,這裡也說下吧。對於個人的站點,可通過進入後台修改(此方法不適用於黑盒實驗)

WordPress支持自動重定位方法,該方法可自動計算定位並更新定位值。將網站從一台伺服器重新定位到另一台伺服器上時,該方法能夠快速協助網站開始運行。用法如下:

1.、編輯wp-config.php 文件,在「define」語句後添加如下代碼:define(RELOCATE,true);

2、 在web瀏覽器中訪問wp-login.php頁面,進入後台可更改配置IP:

後來仔細想想,既然配置文件寫在資料庫中的,那麼我完全可以通過動態修改資料庫中的數據達到修改IP的目的。過程如下:

在首頁包含的代碼中增加一條語句自動更新資料庫中的URL地址,這裡我選擇了wp-blog-header.php,只要有人訪問網站就會執行這條語句,獲取伺服器IP並修改配置IP的欄位。

$iipp=$_SERVER[SERVER_ADDR];n$sql1="UPDATE `wordpress`.`wp_options` SET `option_value` = http://".$iipp." WHERE `wp_options`.`option_id` = 1;";n$sql2="UPDATE `wordpress`.`wp_options` SET `option_value` = http://".$iipp." WHERE `wp_options`.`option_id` = 2;";nmysql_query($sql1);nmysql_query($sql2);n

修改後,便能自動修改後台中的URL。

這樣一來就可以隨意更改伺服器IP了。

7. 來個小姐姐

搭建靶機是個細活兒,需要多研究漏洞原理並理解相關利用方法。這是一個很簡單的環境但牽扯到很多細節的東西。所以還是很佩服那些CTF出題的老師們。

本文為 echo 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載,如若轉載,請聯繫嘶吼編輯: 4hou.com/vulnerable/753 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

apache特性繞過雲鎖sql注入防護
惡意軟體偽裝成遊戲攻略應用偷跑廣告,Google Play商店數十萬用戶中招
Metasploit域滲透測試全程實錄(終結篇)

TAG:信息安全 |