当前位置: 首页 > article >正文

PHP代码审计 --MVC模型开发框架rce示例

MVC模型开发框架

在这里插入图片描述

控制器Controller:负责响应用户请求、准备数据,及决定如何展示数据

模块Model:管理业务逻辑和数据库逻辑,提供链接和操作数据库的抽象层

视图View:负责前端模板渲染数据,通过html呈现给用户

MVC模型对代码审计的影响:

1、文件代码定位问题

2、代码过滤分析问题

3、前端安全发现问题

示例cms:http://www.lmxcms.com/file/d/down/xitong/20210628/202106281714266126.zip

入口文件:
在这里插入图片描述
define(‘LMXCMS’,TRUE):定义常量LMXCMS并赋值为TRUE

inc/run.inc.php文件就是路由文件
在这里插入图片描述

可以看见requireClassName函数接收值,转化路径

梦想cmsV1.4.1 RCE 命令执行

源码下载:http://www.lmxcms.com/file/d/down/xitong/20210628/202106281714266126.zip

搜索eval敏感关键词

在这里插入图片描述

可以看见,这个文件内的eval中间有变量

$temdata[‘data’]

t e m d a t a = temdata= temdata=this->model->caijiDataOne($_GET[‘cid’]);

在这里插入图片描述

其中又调用了cj_data_tab()和oneModel()方法

在这里插入图片描述

在这里插入图片描述

其中oneModel又调用了oneDB方法

在这里插入图片描述

先构造url访问改代码处

http://127.0.0.1:8086/admin.php?m=Acquisi&a=showCjData

在这里插入图片描述

加入调试代码寻找问题

class/db.class.php

在这里插入图片描述

c/admin/AcquisiAction.class.php

在这里插入图片描述

构造url:http://127.0.0.1:8086/admin.php?m=Acquisi&a=showCjData&lid=1&id=1&uid=1&cid=1

访问

在这里插入图片描述

发现$temdata变量为空数组,只要使得该变量的data键的值为恶意代码即可

所以直接在数据库添加phpinfo在data字段

insert into lmx_cj_data (lid,data,uid,url,time,is_in) values (‘1’,‘phpinfo()’,‘1’,‘1’,‘1’,‘1’);

在这里插入图片描述

再访问url:http://127.0.0.1:8086/admin.php?m=Acquisi&a=showCjData&lid=1&id=1&uid=1&cid=1

在这里插入图片描述

rce执行成功

百家cms V4.1.4 RCE 代码执行

搜索system(

在这里插入图片描述

发现只有最后一个可能存在代码执行漏洞

在这里插入图片描述

来到首页,登录后进入备份与还原

http://127.0.0.1:8087/index.php?mod=site&act=manager&do=database&beid=1

在这里插入图片描述

直接搜索manager

在这里插入图片描述

查看第一个文件system/manager/web.php 在该文件中找到do_database()方法,database也在url当中

那么猜测它就是对应url代码文件

添加测试代码

在这里插入图片描述

果然,猜测成功

在这里插入图片描述

那么url构造不必担心了

继续看代码执行的地方代码

system('convert'.$quality_command.' '.$file_full_path.' '.$file_full_path);

其中 q u a l i t y c o m m a n d = ′ − q u a l i t y ′ . i n t v a l ( quality_command=' -quality '.intval( qualitycommand=quality.intval(scal); 由于intval的存在,所以这个变量放弃

$file_full_path来自于实参

找到url路径,发现这个文件路径存在于includes文件夹内,无法直接访问

includes/baijiacms/setting.inc.php

寻找包含了这个文件的文件

在这里插入图片描述

发现只有baijiacms.php调用过

includes/baijiacms.php

可是也是include文件夹内的文件,那么寻找调用了baijiacms.php的文件

在这里插入图片描述

寻找调用了file_save的地方

在这里插入图片描述

system/weixin/class/web/setting.php 文件存在调用

构造url

http://127.0.0.1:8087/index.php?mod=site&act=weixin&do=setting

访问看看

在这里插入图片描述

代码添加调试代码,其中WEB_ROOT.“/”.$file[‘name’]是关乎system函数内的可控变量

在这里插入图片描述

成功

在这里插入图片描述

查看想要执行到system的条件

在这里插入图片描述

要使得$settings[‘image_compress_openscale’])存在即可,

$settings=globaSystemSetting();

在这里插入图片描述

echo一下$settings 发现根本没有image_compress_openscale这个键

在这里插入图片描述

搜索image_compress_openscale找到设置settings[‘image_compress_openscale’]的地方

在这里插入图片描述

在system/manager/template/web/netattach.php文件

在这里插入图片描述

构造url访问

http://127.0.0.1:8087/index.php?mod=site&act=manager&do=netattach

在这里插入图片描述

在这里插入图片描述

更改为开启

再发送刚刚的包

在这里插入图片描述

发现终于满足了存在的条件

添加echo调试代码

在这里插入图片描述

再次发包

在这里插入图片描述

将filename参数更改为xxx&dir&.txt或xxx;dir;.txt

&是可以执行多条命令的联合符号(可以使用与linux和windows)

;也是可以执行多条命令的联合符号(只可以使用与linux)

在这里插入图片描述


http://www.kler.cn/a/398357.html

相关文章:

  • 使用win32com将ppt(x)文件转换为pdf文件
  • LLMs 训练经验篇
  • 软件测试 —— 自动化基础
  • mybatis的动态sql用法之排序
  • Chrome和Chromium的区别?浏览器引擎都用的哪些?浏览器引擎的作用?
  • Godot的开发框架应当是什么样子的?
  • [Kotlin标准函数] run、with、apply、also、let、use等
  • 控制器ThinkPHP6
  • 编写一个生成凯撒密码的程序
  • Vue练习案例(上)
  • Gin 中自定义控制器
  • 多线程2:线程的常用方法、线程安全
  • 向量元素的修改和删除
  • 数据结构:图(二)---- 最小生成树算法
  • 小程序23-页面的跳转:navigation 组件详解
  • 嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)
  • 【iOS】iOS的轻量级数据库——FMDB
  • C++11的std::for_each和lambda调用的使用实例
  • 解决Docker环境变量的配置的通用方法
  • 零基础Java第二十期:认识String(二)
  • 论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras
  • 自然语言处理技术之细粒度实体识别
  • Qt/C++ 开源控件 可折叠的标签管理控件
  • 使用 Python 和 Py2Neo 构建 Neo4j 管理脚本
  • #开发环境篇:vscode里面登录已同步设置的提示1怎么取消
  • 无法下载element-admin的依赖无法运行