一次代码审计练习

这次练习主要针对的是rce方向的两个漏洞,复现的是两个cms上的漏洞。一个是zzzphp,另一个是baijiacms

直接先在本地搭建。

针对zzzphp,我们要复现的是代码执行漏洞。这里有个小tips。针对仅使用mvc架构并且没有对基本方法二次封装的源码,我们可以针对功能点和查找特定函数去测试。但是如果是特殊框架开发的源码,我们就要针对不同框架的特性去进行审计。

这里我们要审计的是代码执行漏洞,我们直接查找相关函数eval

这里可以看到只有最后一个是真正可以执行代码的

我们具体看这个方法的类

这个执行关键在于$ifstr这个字符串,而他取决于

preg_match_all( $pattern, $zcontent, $matches )

我们可以查一查这个函数的用法

就是按照pattern的模式匹配将zcontent分割按顺序放在后面的数组参数里,所以最后ifstr取决于 $zcontent。这里就很清晰了,我们现在的目的就是去找谁调用了这个parseriflabel类。

我们发现parsercommon方法就调用了它,我们再看谁又实例化了ParserTemplate类

我们看到这里有四处调用。我们进入这个类具体分析

这四处的$zcontent值分别为

$user_tpl
load_file($tplfile,$location)
load_file($tplfile,$location)
load_file($tplfile,$location)

第一个我们是不可控制的。这里如果对四个if都分析一遍难度太高。因为我们是复现,所以是确定这里有漏洞的,所以这里的if判断就不那么重要。

关于load_file($tplfile,$location)的值,我们可以不用跟下去分析,我们直接echo出来

发现这就是模板代码

这里我们就基本清晰了这个业务逻辑,实际上它就是在执行模板。而模板代码可以通过登录后台更改

这样就造成了任意代码执行。这里只要我们添加的代码绕过下面两次过滤就可以了

第二个练习是针对baijiacms的命令执行漏洞挖掘

同样,我们从寻找关键词开始

这里我们只能控制$file_full_path,$file_full_path实际来自file_save方法的参数。我们从方法名能猜出它是一个文件操作方法。我们看哪里调用了它

下面是执行代码的要求

这个应该是文件上传的参数

根据路由,我们反推出功能点地址

发现有文件上传功能

文件名做一个小小的绕过就行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值