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构造不必担心了

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

php 复制代码
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)

相关推荐
BingoGo16 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack16 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
刀法如飞3 天前
一款Go语言Gin框架MVC脚手架,满足大部分场景
go·mvc·gin
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php