Bosscms代码审计

文章详细描述了一系列Web应用安全问题,包括任意文件上传漏洞的利用过程,通过Burp抓包分析了上传函数的执行流程。此外,还提到了任意文件删除的漏洞,只需构造特定数据包即可实现。目录遍历漏洞允许攻击者读取任意目录,而任意文件下载则可能导致敏感信息泄露。最后,指出权限校验的逻辑缺陷使得未登录用户也能执行后台功能。
摘要由CSDN通过智能技术生成

任意文件上传漏洞

进入后台后发现可以设置允许上传的类型,于是我们添加php
image.png
那我们任意找一个上传点进行上传,发现上传失败
image.png
使用burp抓包看一下上传时调用了哪个文件,发现调用了system/extend/ueditor/php/controller.php
image.png
controller.php包含了enter.php继续跟进
image.png
enter.php调用了into::load()继续跟进
image.png
跟进self::load_class
image.png
通过注释明白这个函数是加载class类文件,并且看了一圈并没有其他的功能,所以require_once $file;一定就是加载的上传功能的脚本
image.png
通过debug发现$file文件位于system/extend/ueditor/php/ueditor.class.php
image.png
进入ueditor.class.php调用了__construct()魔术方法,into::load_json("config.json")加载了config.json赋值给config
image.png
Debug跟进into::load_json,发现加载了同级目录下的config.json
image.png
读取完json中的内容后回到into.class使用call_user_func方法调用了ueditor.class中的init方法
image.png
init方法根据传入的参数switch选择要使用的方法,这里的config[xxx]就是加载的json文件中的内容
image.png
根据前面抓包传递的参数action=uploadimage,因此调用了是$this->uploadimage()方法
image.png
跟进uploadimage()发现这一段就是上传成功的代码,尤其以upload::files为核心,我们跟进他
image.png
跟进后发现只要满足in_array($ext,$extension) && (!$type || ($type && !$in))就会成功
image.png
抓包后发现第一个条件满足,但是第二个条件不满足
image.png
image.png
image.png
因此我们把!$type || ($type && !$in)单独拿出来,也就是只要$type或者$in任意一个为空就可以为true,我们往上看有一个令$type = null,所以要想办法让if(in_array($k, $tarr))为真才可以
image.png
$ext是我们上传文件的后缀,$vcode中的参数,code中有php类型,$kcode
$tarr$type传来的参数
image.png
全局搜索,发现$k是一个json文件,因此无法修改,因此我们只能让$tarrcode,也就是传入的$type参数中有code
image.png
按住ctrl点击files,发现有个地方传入了code
image.png
发现文件名叫uploadfile
image.png
去json文件搜搜,也就是上传附件会调用这个函数
image.png
最终发现在内容管理中可以上传附件,成功上传php文件
image.png

任意文件删除漏洞

在文件上传的地方发现还可以对文件进行删除,我们可以尝试一下是否有任意文件删除漏洞
image.png
抓个包发现调用了delete方法
image.png
image.png
进入函数,通过抓包发现$path路径其实就是我们要删除的路径,然后通过preg_match正则表达式判断是否是upload开头,如果通过则调用dir::delete删除文件
image.png
进入dir::delete发现并没有对路径进行过滤,self::replace只是对路径进行了优化
image.png
image.png
构造如下数据包即可任意文件删除
image.png

目录遍历漏洞

找到了一个listfile的函数,函数本身没有什么功能点,于是去lists看看
image.png
有一个read方法,进去看看
image.png
功能是打开这个文件夹,用readdir方法读取内容并返回
image.png
那我们如何控制要读取的路径呢,注意arrExist方法
image.png
global $G这个全局变量就是存储传入的任何参数,可以自己debug看看,这里就是将get传参的folder传入$folder
image.png
构造payload

/system/extend/ueditor/php/controller.php?action=listfile&folder=../../../

image.png
查看一下谁调用了lists方法,只要调用了lists方法的函数都可以任意目录读取
image.png
例如这个listimage也可以
image.png

任意文件下载

安全设置 =》 数据备份 =》 备份列表 =》 下载存在任意文件下载
通过路由分析定位到位于system/admin/safe/backup.class.phpdownload方法
通过debug发现似乎对id参数没有做任何的过滤
image.png
测试下载1.txt
image.png
image.png

权限校验处存在逻辑缺陷导致未登录即可调用后台功能

ueditor中包含了admin
image.png
如果$func没有设置,那么就把他设置为init
image.png
之后load_Class调用了admin.classinit方法
image.png
初始化时获取session,如果没获取到那么就跳转,但是没有加die或者exit导致代码还在继续执行
image.png
因此我们只要保存一次后台的数据包,就算没有登录,发送数据包也照样能执行操作,这里抓一个能添加上传类型的数据包,把cookie删除模拟未登录状态
image.png
照样添加成功,可以配合上传webshell
image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值