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

目录

[MVC 架构](#MVC 架构)

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

CNVD-命令执行1day-baijiacms4.1.4版本


知识点:
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各层职能:

  1. 控制器Controller层--负责响应用户请求、准备数据,及决定如何展示数据。
  2. 模块Model层--管理业务逻辑和数据库逻辑。提供连接和操作数据库的抽象层。
  3. 视图View层--负责前端模版渲染数据,通过HTML方式呈现给用户。

MVC对审计主要影响:

  1. 文件代码定位问题,一个功能分别在三个文件里,负责不同的部分
  2. 代码过滤分析问题,一般会写道MODEL层
  3. 前端安全发现问题,模板注入,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开发审计入口常见方法:

  1. 搜索法:常规或部分MVC模型源码可以采用关键字的搜索挖掘思路
  2. 功能法:框架MVC模型源码一般会采用功能点分析抓包追踪挖掘思路
  3. 对比法:可以通过前后修复版本文件及代码不同特征进行针对挖掘思路
  4. 特征法:数据库监控挖SQL注入,文件监控挖上传删除写入等,后续补充
  5. 工具法:后续讲到
  6. 调试法:动态调试

一般情况下,有经验的人,看一下目录就大概知道

这个应该就是控制层,接收参数,控制执行逻辑

这个多半就是模块层,可能过滤,以及对数据的处理

这个多半就是视图层,负责数据在前端的显示

访问网站的首页

index.php 目录像是这个样子基本上都是MVC

包含了两个文件,在 run.inc.php 发现,通过URL确定跳转的文件位置

由这里的命名也可以知道哪个是控制层,哪个是模块层

index.php控制了交给谁处理的逻辑,也就是由哪个文件来处理后续

观察到这里是首页,所以应该是先访问控制层的,m=content,在控制层文件中应该有一个与它对应的文件。a=index,是这个文件中处理的方法

这是一个名为index的公共方法。让我们一起对代码进行解析:

  • 第一行创建了一个名为$temModelparse对象,并传递了$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版本

搜索法-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对应的文件

搜索条件2

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

抓包上传

相关推荐
low神6 小时前
前端在网络安全攻击问题上能做什么?
前端·安全·web安全
mingzhi618 小时前
应届生必看 | 毕业第一份工作干销售好不好?
网络·web安全·面试
白帽黑客cst8 小时前
网络安全(黑客技术) 最新三个月学习计划
网络·数据结构·windows·学习·安全·web安全·网络安全
德迅云安全杨德俊9 小时前
什么是HTTP DDOS,如何防护
web安全·http·https·ddos
anddddoooo11 小时前
vulnhub(11):derpnstink(hydra爆破用户名和密码、验证的文件上传)
linux·运维·服务器·安全·web安全·网络安全
web_learning_32111 小时前
网络安全证书考取相关知识
安全·web安全·网络安全
xuan哈哈哈1 天前
web基础—dvwa靶场(九)Weak Session IDs
web安全·网络安全
无敌的俊哥1 天前
dedecms——四种webshell姿势
web安全