目录
MVC 架构
CNVD-代码执行1day-lmxcms1.40版本
CNVD-命令执行1day-baijiacms4.1.4版本
知识点:
1、PHP审计-MVC开发-RCE&代码执行
2、PHP审计-MVC开发-RCE&命令执行
3、PHP审计-MVC开发-RCE&文件对比
MVC 架构
MVC流程:
- Controller截获用户发出的请求;
- Controller调用Model完成状态的读写操作;
- Controller把数据传递给View;
- View渲染最终结果并呈献给用户。
MVC各层职能:
- 控制器Controller层–负责响应用户请求、准备数据,及决定如何展示数据。
- 模块Model层–管理业务逻辑和数据库逻辑。提供连接和操作数据库的抽象层。
- 视图View层–负责前端模版渲染数据,通过HTML方式呈现给用户。
MVC对审计主要影响:
- 文件代码定位问题,一个功能分别在三个文件里,负责不同的部分
- 代码过滤分析问题,一般会写道MODEL层
- 前端安全发现问题,模板注入,XSS等
PHP常见漏洞关键字:
SQL注入:
select insert update mysql_query mysqli等
文件上传:
$_FILES,type="file",上传,move_uploaded_file()等
XSS跨站:
print print_r echo sprintf die var_dump var_export等
文件包含:
include include_once require require_once等
代码执行:
eval assert preg_replace call_user_func call_user_func_array等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables() $$ 等
反序列化:
serialize() unserialize() __construct __destruct等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等
#通用关键字:
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等
MVC开发审计入口常见方法:
- 搜索法:常规或部分MVC模型源码可以采用关键字的搜索挖掘思路
- 功能法:框架MVC模型源码一般会采用功能点分析抓包追踪挖掘思路
- 对比法:可以通过前后修复版本文件及代码不同特征进行针对挖掘思路
- 特征法:数据库监控挖SQL注入,文件监控挖上传删除写入等,后续补充
- 工具法:后续讲到
- 调试法:动态调试
一般情况下,有经验的人,看一下目录就大概知道
这个应该就是控制层,接收参数,控制执行逻辑
这个多半就是模块层,可能过滤,以及对数据的处理
这个多半就是视图层,负责数据在前端的显示
访问网站的首页
index.php 目录像是这个样子基本上都是MVC
包含了两个文件,在 run.inc.php 发现,通过URL确定跳转的文件位置
由这里的命名也可以知道哪个是控制层,哪个是模块层
index.php控制了交给谁处理的逻辑,也就是由哪个文件来处理后续
观察到这里是首页,所以应该是先访问控制层的,m=content,在控制层文件中应该有一个与它对应的文件。a=index,是这个文件中处理的方法
这是一个名为index
的公共方法。让我们一起对代码进行解析:
-
第一行创建了一个名为
$temModel
的parse
对象,并传递了$this->smarty
作为参数。 -
第二行调用了
$temModel
对象的contents
方法,并传递了$this->id
、$this->classid
和$this->contentModel
作为参数。 -
第三行使用
echo
语句将$temModel->contents
方法的返回值输出到浏览器。
总结一下,该index
方法实例化了一个名为parse
的对象,并调用了其contents
方法,将$this->id
、$this->classid
和$this->contentModel
作为参数传递给该方法,并将方法的返回值输出到浏览器。
进入 $temModel->contents($this->id,$this->classid,$this->contentModel);
这里不仅完成了数据的查找,并且还把数据渲染到模板里了
调用了Model层的方法查询数据
如何确定视图层?
根据页面特征,全局搜索,搜索公司新闻,搜不到,可能是存储在数据库里
注意到发布时间
确定 news.html 就是对应的 view 层文件
根据 url 可以确定控制层的文件
对应的处理方法
代码里创建了两个对象,都进入看看,随后去确定文件
按照前面的方法确定了 product.html 文件就是view层代码
分析调用逻辑基本上是推测+猜,找特征。
CNVD-代码执行1day-lmxcms1.40版本
搜索法-RCEhttps://www.cnvd.org.cn/flaw/show/CNVD-2019-05679
/admin.php?m=Acquisi&a=showCjData&id=1&lid=1&cid=1
根据 RCE 的特点,在功能上没有强特征,搜索 eval 关键字,先看控制层
观察到参数似乎可控
进入 caijiDtaOne 分析
多半是要执行SQL
查询数据表的数据,inx_cj_data
data被取出来作为 eval 代码执行
如何往data写数据,在采集管理中添加,后台添加
eval() 绕过,通过 ;注释符完成。
功能法-RCE
https://www.cnvd.org.cn/flaw/show/CNVD-2019-05678
TemplateAction.class.php
<{php}> phpinfo();<{/php}>
从功能点发现的,与代码无关,数据会被模板渲染,数据可能是直接写死的,或者从数据库查出来的
后台可以直接修改模板
对比法拿0day-1.41版本
UltraCompare对比
文件对比差异:
1、快速找到脆弱点:通过对比找到脆弱的地方,新版本修复了什么,就可能是旧版本的漏洞
2、帮助你快速测试新版本 有无 0day
CNVD-命令执行1day-baijiacms4.1.4版本
https://www.cnvd.org.cn/flaw/show/CNVD-2021-12800搜索法:system->common.inc.php->file_save->setting.php
条件:
1、$extention=='txt'
2、weixin_verify_file有值
3、$settings['image_compress_openscale']=1
开启image_compress_openscale=1
/index.php?mod=site&act=manager&do=netattach
上传weixin_verify_file
/index.php?mod=site&act=weixin&do=setting
触发weixin_verify_file
weixin_verify_file filename=&whoami&.txt
搜索关键字
分析第二个参数是否可控,来源于函数的第四个参数
这里调用这个函数
看看 $_FILE 参数是否可控
登陆后台
根据参数翻翻项目的目录即可找到URL对应的文件
搜索条件2
搜索关键字,在html文件中发现,访问对应页面
抓包上传