深入浅析ImageMagick命令执行漏洞
00 前言
什么是ImageMagick?
ImageMagick是一个功能强大的开源图形处理软件,可以用来读、写和处理超过90种的图片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。使用它可以对图片进行切割、旋转、组合等多种特效的处理。
由于其功能强大、性能较好,并且对很多语言都有拓展支持,所以在程序开发中被广泛使用。许多网站开发者喜爱使用ImageMagick拓展来做web上的图片处理工作,比如用户头像生成、图片编辑等。
01 漏洞描述
ImageMagick是一款开源图片处理库,支持PHP、Ruby、NodeJS和Python等多种语言,使用非常广泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多个图片处理插件都依赖它运行。当攻击者构造含有恶意代码得图片时,ImageMagick库对于HTTPPS文件处理不当,没有做任何过滤,可远程实现远程命令执行,进而可能控制服务器。
02 影响程度
攻击成本:低
危害程度:高
影响范围:ImageMagick 6.9.3-9以前的所有版本
03 漏洞分析
命令执行漏洞是出在ImageMagick对https形式的文件处理的过程中。
ImageMagick之所以支持那么多的文件格式,是因为它内置了非常多的图像处理库,对于这些图像处理库,ImageMagick给它起了个名字叫做”Delegate”(委托),每个Delegate对应一种格式的文件,然后通过系统的system()命令来调用外部的lib进行处理。调用外部lib的过程是使用系统的system命令来执行的,导致命令执行的代码。
ImageMagick委托的默认配置文件: /etc/ImageMagick/delegates.xml
具体代码请参考:Github-ImageMagick
我们定位到https委托得那一行:
" <delegate decode=\"https\" command=\""wget" -q -O "%o" "https:%M"\"/>"
可以看到,command定义了它对于https文件处理时带入system()函数得命令:"wget" -q -O "%o" "https:%M"。
wget是从网络下载文件得命令,%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函数执行得命令为:
“wget” -q -O “%o” “ https://test.com"|ls “-al”
这样,ls -al命令成功执行。
04 漏洞利用
这个漏洞得poc由老外给出得,如下:
push graphic-context viewbox 0 0 640 480 fill 'url(https://"|id; ")' pop graphic-context
push和pop是用于堆栈的操作,一个进栈,一个出栈;
viewbox是表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小。简单理解就是根据后面得参数选取其中得一部分画面;
fill url()是把图片填充到当前元素内;
在其中我们使用了fill url()的形式调用存在漏洞的https delegate,当ImageMagick去处理这个文件时,漏洞就会被触发。
附:ImageMagick默认支持一种图片格式,叫mvg,而mvg与svg格式类似,其中是以文本形式写入矢量图的内容,允许在其中加载ImageMagick中其他的delegate(比如存在漏洞的https delegate)。并且在图形处理的过程中,ImageMagick会自动根据其内容进行处理,也就是说我们可以将文件随意定义为png、jpg等网站上传允许的格式,这大大增加了漏洞的可利用场景。
利用过程:
创建一个exploit.png文件,包含以下内容:
push graphic-context viewbox 0 0 640 480 fill 'url(https://test.com/image.jpg"|ls "-al)' pop graphic-context
执行命令:convert exploit.png 1.png(后面的是convert的参数)
05 漏洞修复
升级到最新版本
配置/etc/ImageMagick/policy.xml的方式来禁止https、mvg这些delegate,或者直接在配置文件删除相应的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命令执行漏洞的知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Perintah sudo membolehkan pengguna menjalankan arahan dalam mod keistimewaan tinggi tanpa bertukar kepada mod superuser. Artikel ini akan memperkenalkan cara untuk mensimulasikan fungsi yang serupa dengan arahan sudo dalam sistem Windows. Apakah Perintah Shudao? Sudo (singkatan untuk "superuser do") ialah alat baris perintah yang membenarkan pengguna sistem pengendalian berasaskan Unix seperti Linux dan MacOS untuk melaksanakan arahan dengan keistimewaan tinggi yang biasanya dipegang oleh pentadbir. Menjalankan arahan SUDO dalam Windows 11/10 Walau bagaimanapun, dengan pelancaran versi pratonton Windows 11 Insider terkini, pengguna Windows kini boleh mengalami ciri ini. Ciri baharu ini membolehkan pengguna

Artikel ini akan memperkenalkan pembaca kepada cara menggunakan gesaan arahan (CommandPrompt) untuk mencari alamat fizikal (alamat MAC) penyesuai rangkaian dalam sistem Win11. Alamat MAC ialah pengecam unik untuk kad antara muka rangkaian (NIC), yang memainkan peranan penting dalam komunikasi rangkaian. Melalui gesaan arahan, pengguna boleh dengan mudah mendapatkan maklumat alamat MAC semua penyesuai rangkaian pada komputer semasa, yang sangat membantu untuk menyelesaikan masalah rangkaian, mengkonfigurasi tetapan rangkaian dan tugas lain. Kaedah 1: Gunakan "Command Prompt" 1. Tekan kombinasi kekunci [Win+X], atau [klik kanan] klik [logo Windows] pada bar tugas, dan dalam item menu yang terbuka, pilih [Run]; . Jalankan tetingkap , masukkan perintah [cmd] dan kemudian

Dalam sistem Win11, anda boleh mendayakan atau melumpuhkan mod sesi dipertingkatkan Hyper-V melalui arahan. Artikel ini akan memperkenalkan cara menggunakan arahan untuk mengendalikan dan membantu pengguna mengurus dan mengawal fungsi Hyper-V dalam sistem dengan lebih baik. Hyper-V ialah teknologi virtualisasi yang disediakan oleh Microsoft Ia dibina ke dalam Windows Server dan Windows 10 dan 11 (kecuali Home Edition), membenarkan pengguna menjalankan sistem pengendalian maya dalam sistem Windows. Walaupun mesin maya diasingkan daripada sistem pengendalian hos, mereka masih boleh menggunakan sumber hos, seperti kad bunyi dan peranti storan, melalui tetapan. Salah satu tetapan utama adalah untuk mendayakan Mod Sesi Dipertingkat. Mod sesi dipertingkatkan ialah Hiper

1. Gambaran Keseluruhan Perintah sar memaparkan laporan penggunaan sistem melalui data yang dikumpul daripada aktiviti sistem. Laporan ini terdiri daripada bahagian yang berbeza, setiap satu mengandungi jenis data dan masa data dikumpulkan. Mod lalai perintah sar memaparkan penggunaan CPU pada kenaikan masa yang berbeza untuk pelbagai sumber yang mengakses CPU (seperti pengguna, sistem, penjadual I/O, dsb.). Selain itu, ia memaparkan peratusan CPU terbiar untuk tempoh masa tertentu. Nilai purata untuk setiap titik data disenaraikan di bahagian bawah laporan. laporan sar mengumpul data setiap 10 minit secara lalai, tetapi anda boleh menggunakan pelbagai pilihan untuk menapis dan melaraskan laporan ini. Sama seperti arahan masa aktif, arahan sar juga boleh membantu anda memantau beban CPU. Melalui sar, anda boleh memahami berlakunya beban yang berlebihan

Widget adalah ciri baharu sistem Win11 Ia dihidupkan secara lalai Walau bagaimanapun, tidak dapat dielakkan bahawa sesetengah pengguna tidak banyak menggunakan widget dan mahu melumpuhkannya kerana mereka menggunakan ruang. Editor di bawah akan mengajar anda cara mengendalikannya, dan anda boleh mencubanya. Apakah itu widget? Widget ialah kad kecil yang memaparkan kandungan dinamik daripada apl dan perkhidmatan kegemaran anda pada desktop Windows anda. Ia muncul pada papan widget, tempat anda boleh menemui, menyemat, menyahsemat, menyusun, mengubah saiz dan menyesuaikan widget untuk mencerminkan minat anda. Papan widget dioptimumkan untuk memaparkan widget yang berkaitan dan kandungan yang diperibadikan berdasarkan penggunaan. Buka panel widget dari penjuru kiri bar tugas, tempat anda boleh melihat cuaca secara langsung

Linux ialah sistem pengendalian berkuasa yang menyediakan banyak mekanisme komunikasi antara proses yang cekap, seperti paip, isyarat, baris gilir mesej, memori kongsi, dll. Tetapi adakah cara yang lebih mudah, lebih fleksibel dan lebih cekap untuk berkomunikasi? Jawapannya ya, itulah eventfd. eventfd ialah panggilan sistem yang diperkenalkan dalam Linux versi 2.6 Ia boleh digunakan untuk melaksanakan pemberitahuan acara, iaitu, untuk menyampaikan acara melalui deskriptor fail. eventfd mengandungi pembilang integer tidak bertanda 64-bit yang diselenggara oleh kernel Proses ini boleh membaca/menukar nilai pembilang dengan membaca/menulis deskriptor fail ini untuk mencapai komunikasi antara proses. Apakah kelebihan eventfd? Ia mempunyai ciri-ciri berikut

Apakah cara yang betul untuk memulakan semula perkhidmatan dalam Linux? Apabila menggunakan sistem Linux, kami sering menghadapi situasi di mana kami perlu memulakan semula perkhidmatan tertentu, tetapi kadangkala kami mungkin menghadapi beberapa masalah semasa memulakan semula perkhidmatan, seperti perkhidmatan tidak benar-benar berhenti atau bermula. Oleh itu, adalah sangat penting untuk menguasai cara yang betul untuk memulakan semula perkhidmatan. Di Linux, anda biasanya boleh menggunakan perintah systemctl untuk mengurus perkhidmatan sistem. Perintah systemctl adalah sebahagian daripada pengurus sistem systemd

LSOF (ListOpenFiles) ialah alat baris arahan yang digunakan terutamanya untuk memantau sumber sistem yang serupa dengan sistem pengendalian Linux/Unix. Melalui arahan LSOF, pengguna boleh mendapatkan maklumat terperinci tentang fail aktif dalam sistem dan proses yang mengakses fail ini. LSOF boleh membantu pengguna mengenal pasti proses yang sedang menduduki sumber fail, dengan itu mengurus sumber sistem dengan lebih baik dan menyelesaikan masalah yang mungkin berlaku. LSOF berkuasa dan fleksibel, dan boleh membantu pentadbir sistem mengesan masalah berkaitan fail dengan cepat, seperti kebocoran fail, deskriptor fail yang tidak ditutup, dsb. Melalui Perintah LSOF Alat baris arahan LSOF membenarkan pentadbir dan pembangun sistem untuk: Menentukan proses yang sedang menggunakan fail atau port tertentu, sekiranya berlaku konflik port
