第26天 安全开发-PHP应用模板引用Smarty渲染MVC模型数据联动RCE安全

时间轴:

4d3c8e17e8b24e779f7e2ad20139f9f0.jpeg

演示案例

新闻列表&模板引用-代码RCE安全

知识点

1、PHP 新闻显示-数据库操作读取显示
2、PHP 模版引用-自写模版&Smarty 渲染
3、PHP 模版安全-RCE 代码执行&三方漏洞

新闻列表

1.数据库创建新闻存储

2.代码连接数据库读取

3.页面进行自定义显示

navicat新建表:news

下面勾选自动递增:

类型长度是否是null
idint10不是null1
titlevarchar255不是null 
authorvarchar255不是null 
contenttext 不是null 
imagevarchar255不是null 

 

在表中自定义输入内容,效果如下图所示

(图片可以自己找,保存在对应路径就行了)

5ee10195d5a14d4288fbf2ebc28bf31f.png

new.php

<?php
include 'config.php';$id=$_GET['id'] ?? '1';
$sql="select * from new where id = $id";
$data=mysqli_query($con,$sql);
while ($row=mysqli_fetch_row($data)) {echo "<title>" . $row['1'] . "</title><br>";echo $row['2'] . "<br>";echo $row['3'] . "<br>";echo "<img src='$row[4]' width='1000' height='3000'></img><br>";
}

显示如下:

caa09cf485fb43e48329f728d168b8d7.png

 

模板调用:

演示1:

在php中改变,从而影响html,导致页面得到改变。

php代码如下:

<?php
include 'config.php';
$template = file_get_contents('new.html'); //读取new.html
$id=$_GET['id'] ?? '1';
$sql="select * from new where id = $id";
$data=mysqli_query($con,$sql);
while ($row=mysqli_fetch_row($data)) {echo "<title>" . $row['1'] . "</title><br>";echo $row['2'] . "<br>";echo $row['3'] . "<br>";echo "<img src='$row[4]' width='1000' height='3000'></img><br>";
}
$template=str_replace('{title}',$row['1'],$template); //str_replace:替换(search,替换为,替换对象(位置))
eval('?>'.$template);   //尝试确保$template字符串以PHP结束标签结束 

html代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{Title}</title>
</head>
<body></body>
</html>

演示2:

数据库编辑:

3fad31146daa4a6eb0f839a2cc7c3148.png

news.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>{page_title}</title><style>/* 一些样式 */body {font-family: Arial, sans-serif;margin: 0;padding: 0;}header {background-color: #4CAF50;color: white;text-align: center;padding: 20px;}nav {background-color: #f2f2f2;display: flex;justify-content: space-between;padding: 10px;}nav a {color: black;text-decoration: none;padding: 10px;border-radius: 5px;transition: background-color 0.3s ease;}nav a:hover {background-color: #4CAF50;color: white;}.container {max-width: 1200px;margin: 0 auto;padding: 20px;}h1 {font-size: 36px;font-weight: bold;margin-bottom: 20px;}p {font-size: 18px;line-height: 1.5;margin-bottom: 20px;}ul {margin-left: 20px;margin-bottom: 20px;}li {margin-bottom: 10px;}</style>
</head>
<body>
<header><h1>{heading}</h1>
</header>
<nav><a href="#">首页</a><a href="#">新闻</a><a href="#">留言</a><a href="#">关于</a>
</nav>
<div class="container"><h1>{subheading}</h1><p>{content}</p><img src="{$item}" width="1000" height="3000"></img></div>
</body>
</html>

news.php

<?php
include 'config.php';
$template = file_get_contents('new.html'); //读取new.html
$id=$_GET['id'] ?? '1';
$sql="select * from news where id = $id";
$data=mysqli_query($con,$sql);
while ($row=mysqli_fetch_row($data)) {$page_title=$row['1'];$heading=$row['2'];$subheading=$row['3'];$content=$row['4'];$item=$row['5'];//echo $page_title;
}//echo "$page_title<br>$page_title";$template=str_replace('{page_title}',$page_title,$template);
$template=str_replace('{heading}',$heading,$template);
$template=str_replace('{subheading}',$subheading,$template);
$template=str_replace('{content}',$content,$template);
$template=str_replace('{$item}',$item,$template);//str_replace:替换(search,替换为,替换对象(位置))
eval('?>'.$template);   //尝试确保$template字符串以PHP结束标签结束

效果演示:

b857d76a3ad74072b8ee725bf41f0429.png

总结:

使用模板可以减少每个页面都写html,且在php中改就可以影响html从而决定页面。

对于MVC模型:(v——>video视图)

使用模板保证了

1.效率   2.美观度

 

z-blog模板:

全局搜索:Powered By进行修改,找到WhitePage —>footer.php

cf240eb910d646149d35e176edb776a5.png

效果演示:

0b0f717a550a4e16a61d1568999e4c91.png

总结:

找到首页文件可以在WhitePage中修改,其他首页内容和其也有关。

安全漏洞:

1.在数据库后台加上<?php phpinfo();?>(数据库中)

bc03129e49fe4e1382cd215acd0fa1fc.png

2.在new.html代码中加入<?php phpinfo();>后

使用new.php,会让new.php渲染new.html,会执行new.html中的php代码。

(所以当得到模板后加以修改,可以在后台执行)

703ce676f8ff4b7bba7675010d5c33f4.png

 

#Smarty 模版引用

下载: https://github.com/smarty-php/smarty/releases
使用:
1、在phpstorm用文件夹创建一个文件夹,命名为 smarty-demo。(注意级别)
2、拉入demo项目
3、创建一个index.php,将代码复制进去。
4、将目录与代码中对应上
4.1—>新建一个index.tpl
4.2—>在里面写入html代码与index.php里的对应
5.在第三方模板index.tpl写上<?php phpinfo();?>不会显示

index.php:

(目录位置要和代码对应上)

<?php
// 引入 Smarty 类文件
require('smarty/libs/Smarty.class.php');
// 创建 Smarty 实例
$smarty = new Smarty;
// 设置 Smarty 相关属性
$smarty->template_dir = 'smarty/templates/';    //smarty目录和此smarty对应上
$smarty->compile_dir = 'smarty/templates_c/';
$smarty->cache_dir = 'smarty/cache/';
$smarty->config_dir = 'smarty/configs/';
// 赋值变量到模板中
$smarty->assign('title', '欢迎使用 Smarddddty');   //title和index.tql里的$title对应上
// 显示模板
$smarty->display('index.tpl');  
?>
在smarty中创建templates:
在templates下创建index.tpl
在index.tpl中放入html代码。
33b2bab2adf144ef84a6516a41b57e33.png
效果显示:打开index.php,在index.tpl写上<?php phpinfo();?>(不会显示)
6f25fffdebb246d8b1129ff08e13ea52.png

安全漏洞:

CVE-2021-29454:

smarty<=3.1.32

将代码放入index1.tpl:(其他步骤一样)

index1.tpl:

<?phpdefine('SMARTY_ROOT_DIR', str_replace('\\', '/', __DIR__));define('SMARTY_COMPILE_DIR', SMARTY_ROOT_DIR.'/smarty3/templates_c');define('SMARTY_CACHE_DIR', SMARTY_ROOT_DIR.'/smarty3/cache');include_once(SMARTY_ROOT_DIR . '/smarty3/libs/Smarty.class.php');class testSmarty extends Smarty_Resource_Custom
{protected function fetch($name, &$source, &$mtime){$template = "CVE-2017-1000480 smarty PHP code injection";$source = $template;$mtime = time();}
}$smarty = new Smarty();
$smarty->setCacheDir(SMARTY_CACHE_DIR);
$smarty->setCompileDir(SMARTY_COMPILE_DIR);
$smarty->registerResource('test', new testSmarty);
$smarty->display('test:'.$_GET['x']);
?>

效果展示:(以x传参,x*/phpinfo();//)

0fd54cb0c0d24dce86ae260ae0480594.png

如果版本及目录换成smarty(不是smarty3):

59d03ccf221f4a859ae4e31689fe1d51.png

则:

dcd95af11a154201ad10ed3535f56f82.png

 

思路核心总结:

1.自己写的模板 rce安全问题
2.第三方smarty模板 没有直接安全问题
他也有漏洞:
    1.本身代码漏洞
    2.第三方插件(ueditor)
    3.第三方模板(smarty)
    4.第三方组件(shiro fastjson等)

漏洞共享平台:

CNVD国家信息安全漏洞共享平台
信息收集:黑盒->插件
白盒->源码
模板->显示页面美观
框架->核心代码逻辑
组件->其他功能(类似插件)

框架模板组件分类:

php


1.框架:thinkphp yii laravel
核心开发 代码逻辑核心(代码逻辑)

2.模板:smarty
负责主要显示页面美观的

3.组件:ZendGuardLoader php-imagick
第三方组件(图片处理,数据转换,数据库操作等)


java


框架:struts2 springboot ssm
模板:
组件:shiro fastjson

白盒:
黑盒:

端口扫描 数据库包特征 识别插件工具等

该文章由番薯小羊卷~和李豆豆喵共同完成。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微服务】Docker 容器化

一、初识Docker 1. 为什么需要 Docker 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会遇到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性的问题开发、测试、生产环境有差异 Docker 如何解决依赖的兼容问题 将应用的Libs&#xff08;…

(十四)JavaWeb后端开发——MyBatis

目录 1.MyBatis概述 2.MyBatis简单入门 3.JDBC&#xff08;了解即可&#xff09; 4.数据库连接池​ 5.lombok 6.MyBatis基本操作 7.XML映射文件 8.动态SQL 8.1 if标签 8.2 foreach标签 8.3 sql/include标签​ 1.MyBatis概述 MyBatis是一款优秀的持久层&#xff08…

pytorch实现深度神经网络DNN与卷积神经网络CNN

DNN概述 深度神经网络DNN来自人脑神经元工作的原理&#xff0c;通过在计算机中逻辑抽象出多个节点&#xff0c;接收处理并向后传递信息&#xff0c;实现计算机的自我学习&#xff0c;类比结构见下图&#xff1a; 该方法通过预测输出与实际值的差异不断调整节点参数&#xff0…

私域流量圈层在新消费时代的机遇与挑战:兼论开源 AI 智能名片、2 + 1 链动模式、S2B2C 商城小程序的应用

摘要&#xff1a;本文剖析了私域流量圈层在新消费时代呈现出的独特温度与信任优势&#xff0c;阐述了从传统销售到新消费转型中用户心理的变化。同时&#xff0c;强调了内容对于私域流量的关键作用&#xff0c;并分析开源 AI 智能名片、2 1 链动模式、S2B2C 商城小程序在私域流…

1.4 配置 Android 构建系统

Android 构建系统会编译应用资源和源代码&#xff0c;然后将它们打包成 APK 或 Android App Bundle 文件&#xff0c;供您测试、部署、签名和分发。 创建自定义 build 配置需要您对一个或多个 build 配置文件做出更改。这些纯文本文件使用领域特定语言 (DSL) 通过 Kotlin 脚本&…

containerd配置私有仓库registry

机器ip端口regtisry192.168.0.725000k8s-*-------k8s集群 1、镜像上传 rootadmin:~# docker push 192.168.0.72:5000/nginx:1.26.1-alpine The push refers to repository [192.168.0.72:5000/nginx] 6961f0b8531c: Pushed 3112cd521249: Pushed d3f50ce9b5b5: Pushed 9efaf2eb…

ABAP:SET CURSOR FIELD设置鼠标焦点

SET CURSOR FIELD <字段名>&#xff1a;设置鼠标焦点到该字段 SET CURSOR 设置到鼠标焦点列还是行 SET CURSOR LINE 设置鼠标焦点到行 GET CURSOR field <字段名> &#xff1a;这个相对应的获取鼠标焦点得到的字段

PHP和Python脚本的性能监测方案

目录 1. 说明 2. PHP脚本性能监测方案 2.1 安装xdebug 2.2 配置xdebug.ini 2.3 命令行与VS Code中使用 - 命令行 - VS Code 2.4 QCacheGrind 浏览 3. Python脚本性能监测方案 3.1 命令行 4. 工具 5.参考 1. 说明 获取我们的脚本程序运行时的指标&#xff0c;对分析…

VS code 远程连接到docker容器

1.需要在vscode中下载remote 、docker、dev container插件。 如下图&#xff1a; 有小鲸鱼标志&#xff0c;说明已经成功。 右键可以运行或者停止容器运行

阿里1688 阿里滑块 231滑块 x5sec分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

Spring Validation数据校检

文章目录 Spring Validation1 关于Spring Validation2 使用流程3 快速入门4 运行异常处理4.1 说明4.2 处理异常4.3 明确提示消息 5 常用注解5.1 NotNull注解5.2 NotEmpty 注解5.3 NotBlank 注解5.4 Size 注解5.5 Range 注解 6 非POJO参数校验6.1 使用流程6.2 使用示例 Spring V…

‌STAR法则

一&#xff1a;STAR法则 STAR法则是一种简单而实用的表现技巧&#xff0c;常被用于求职过程中的个人经历描述&#xff0c;富有条理性&#xff0c;可以帮助你在职场中脱颖而出。“STAR”分别对应的是situation-task-action-result&#xff0c;通过情境、目标、行动和结果四个方面…

uniapp—android原生插件开发(1环境准备)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 项目背景&#xff1a; UniApp集成新大陆P…

国标GB28181设备管理软件EasyGBS国标GB28181视频平台:GB/T28181中的流类型

在当今的视频监控领域&#xff0c;GB/T28181协议作为中国国家标准委员会发布的重要技术规范&#xff0c;发挥着举足轻重的作用。这一标准不仅为视频监控系统的设备接入、视频流传输、设备控制等功能提供了明确的技术指导&#xff0c;还极大地促进了不同厂家设备之间的兼容性和互…

使用pip安装项目时,遇到以下错误的解决方案:error: [Errno 13] Permission denied

我是在虚拟环境下出现了这个错误 出现这种情况大概率是conda环境没有下载用户路径下的python解释器&#xff0c;你可以使用下面命令来检查 which python3这里如果出现的路径不是你用户目录下的&#xff0c;就是这个原因&#xff0c;你的conda环境在用户目录下&#xff0c;但是…

无人车之定位技术篇

无人车的定位技术是指确定无人车在世界坐标系&#xff08;一般指二维环境&#xff09;中的位置及其本身的姿态的技术。随着技术的不断发展&#xff0c;无人车的定位技术已经实现了多种方法的融合与创新。 一、主要定位技术 GPS定位 原理&#xff1a;基于全球定位系统&#x…

微观经济学速成笔记

需求的收入弹性 需求的收入弹性表示在一定的时期内消费者对某种商品的需求量的变动对于消费者收入量变动的反应程度,供给的收入弹性公式为: 永非证可eM或w-此公-可 根据商品的需求和收入弹性公式&#xff0c;可以将商品分类: em < 0的商品为劣等品(也称低档品)&#xff0c;因…

泷羽sec学习打卡-Windows基础命令2总结篇

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows的那些事儿-Base2 一、Windows-Base2常见的协议和端口常用的cmd命令渗透写入文件的思路&…

面经—科大讯飞

1extern c 修饰才能使用c在c中 new delete 可以自动判断分配多少空间 形成多态的两个条件&#xff0c;1.继承关系

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…