Day107:代码审计-PHP模型开发篇&MVC层&RCE执行&文件对比法&1day分析&0day验证

知识点:

1、PHP审计-MVC开发-RCE&代码执行

2、PHP审计-MVC开发-RCE&命令执行

3、PHP审计-MVC开发-RCE&文件对比

MVC 架构

MVC流程:

  1. Controller截获用户发出的请求;
  2. Controller调用Model完成状态的读写操作;
  3. Controller把数据传递给View;
  4. 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);

这里不仅完成了数据的查找,并且还把数据渲染到模板里了

如何确定视图层?

根据页面特征,全局搜索,搜索公司新闻,搜不到,可能是存储在数据库里

注意到发布时间

代码里创建了两个对象,都进入看看,随后去确定文件

按照前面的方法确定了 product.html 文件就是view层代码

分析调用逻辑基本上是推测+猜,找特征。

CNVD-代码执行1day-lmxcms1.40版本

搜索法-RCE

https://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对应的文件

/index.php?mod=site&act=manager&do=user&beid=1

搜索条件2weixin_verify_file

搜索关键字,在html文件中发现,访问对应页面

相关推荐
懒惰的bit2 小时前
基础网络安全知识
学习·web安全·1024程序员节
SRY122404192 小时前
javaSE面试题
java·开发语言·面试
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程3 小时前
Java基础Day-Sixteen
java·开发语言·windows
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
冰水°3 小时前
2.5_XXE(XML外部实体注入)
xml·安全·网络安全·xml外部实体注入·外部实体注入·xml漏洞
是谁谁谁4 小时前
【cft.show-web3解题思路】-php://input伪协议
web安全·网络安全·系统安全
hbh112233abc4 小时前
实现 think/queue 日志分离
php·thinkphp·queue
一丝晨光4 小时前
编译器、IDE对C/C++新标准的支持
c语言·开发语言·c++·ide·msvc·visual studio·gcc
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端