什么是ImageMagick?
ImageMagick是一個功能強大的開源圖形處理軟件,可以用來讀、寫和處理超過90種的圖片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。使用它可以對圖片進行切割、旋轉(zhuǎn)、組合等多種特效的處理。
由于其功能強大、性能較好,并且對很多語言都有拓展支持,所以在程序開發(fā)中被廣泛使用。許多網(wǎng)站開發(fā)者喜愛使用ImageMagick拓展來做web上的圖片處理工作,比如用戶頭像生成、圖片編輯等。
01 漏洞描述
ImageMagick是一款開源圖片處理庫,支持PHP、Ruby、NodeJS和Python等多種語言,使用非常廣泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多個圖片處理插件都依賴它運行。當(dāng)攻擊者構(gòu)造含有惡意代碼得圖片時,ImageMagick庫對于HTTPPS文件處理不當(dāng),沒有做任何過濾,可遠(yuǎn)程實現(xiàn)遠(yuǎn)程命令執(zhí)行,進而可能控制服務(wù)器。
02 影響程度
攻擊成本:低
危害程度:高
影響范圍:ImageMagick 6.9.3-9以前的所有版本
03 漏洞分析
命令執(zhí)行漏洞是出在ImageMagick對https形式的文件處理的過程中。
ImageMagick之所以支持那么多的文件格式,是因為它內(nèi)置了非常多的圖像處理庫,對于這些圖像處理庫,ImageMagick給它起了個名字叫做”Delegate”(委托),每個Delegate對應(yīng)一種格式的文件,然后通過系統(tǒng)的system()命令來調(diào)用外部的lib進行處理。調(diào)用外部lib的過程是使用系統(tǒng)的system命令來執(zhí)行的,導(dǎo)致命令執(zhí)行的代碼。
ImageMagick委托的默認(rèn)配置文件: /etc/ImageMagick/delegates.xml
具體代碼請參考:Github-ImageMagick
我們定位到https委托得那一行:
""
可以看到,command定義了它對于https文件處理時帶入system()函數(shù)得命令:"wget" -q -O "%o" "https:%M"。
wget是從網(wǎng)絡(luò)下載文件得命令,%M是一個占位符,它得具體定義在配置文件中如下:
%i input image filename %o output image filename %u unique temporary filename %Z unique temporary filename %# input image signature %b image file size %c input image comment %g image geometry %h image rows (height) %k input image number colors %l image label %m input image format %p page number %q input image depth %s scene number %w image columns (width) %x input image x resolution %y input image y resolution
可以看到%m被定義為輸入的圖片格式,也就是我們輸入的url地址。但是由于只是做了簡單的字符串拼接,沒有做任何過濾,直接拼接到command命令中,所以我們可以將引號閉合后通過"|",”`”,”&”等帶入其他命令,也就形成了命令注入。
比如我們傳入如下代碼:
https://test.com"|ls “-al
則實際得system函數(shù)執(zhí)行得命令為:
“wget” -q -O “%o” “ https://test.com"|ls “-al”
這樣,ls -al命令成功執(zhí)行。
04 漏洞利用
這個漏洞得poc由老外給出得,如下:
push graphic-context viewbox 0 0 640 480 fill 'url(https://"|id; ")' pop graphic-context
push和pop是用于堆棧的操作,一個進棧,一個出棧;
viewbox是表示SVG可見區(qū)域的大小,或者可以想象成舞臺大小,畫布大小。簡單理解就是根據(jù)后面得參數(shù)選取其中得一部分畫面;
fill url()是把圖片填充到當(dāng)前元素內(nèi);
在其中我們使用了fill url()的形式調(diào)用存在漏洞的https delegate,當(dāng)ImageMagick去處理這個文件時,漏洞就會被觸發(fā)。
附:ImageMagick默認(rèn)支持一種圖片格式,叫mvg,而mvg與svg格式類似,其中是以文本形式寫入矢量圖的內(nèi)容,允許在其中加載ImageMagick中其他的delegate(比如存在漏洞的https delegate)。并且在圖形處理的過程中,ImageMagick會自動根據(jù)其內(nèi)容進行處理,也就是說我們可以將文件隨意定義為png、jpg等網(wǎng)站上傳允許的格式,這大大增加了漏洞的可利用場景。
利用過程:
創(chuàng)建一個exploit.png文件,包含以下內(nèi)容:
push graphic-context viewbox 0 0 640 480 fill 'url(https://test.com/image.jpg"|ls "-al)' pop graphic-context
執(zhí)行命令:convert exploit.png 1.png(后面的是convert的參數(shù))
05 漏洞修復(fù)
升級到最新版本
配置/etc/ImageMagick/policy.xml的方式來禁止https、mvg這些delegate,或者直接在配置文件刪除相應(yīng)的delegate
以上所述是小編給大家介紹的ImageMagick命令執(zhí)行漏洞的知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com