Beecms代码审计

0x00 前言

Beecms框架:PHP+MYSQL,多语言系统,内容模块易扩展,模板风格多样化,模板制作简单功能强大,专业SEO优化,后台操作方便,完全可以满足企业网站、外贸网站、事业单位、教育机构、个人网站使用。

beecms官网下载源码即可

文章大概记录了审计cms的流程,算是本人代码审计的一个入门总结吧。

0x01入口文件

\bee\index.php
程序开头引入了三个文件

require_once('includes/init.php');
require_once('includes/fun.php');
require_once('includes/lib.php');

主要关注一下\bee\includes\init.php
对GPC等超全局数组进行转义处理,并用fl_value进行变量消毒

if (!get_magic_quotes_gpc())
{
    if (isset($_REQUEST))
    {
        $_REQUEST  = addsl($_REQUEST);
    }
    $_COOKIE   = addsl($_COOKIE);
    $_POST = addsl($_POST);
    $_GET = addsl($_GET);
}
if (isset($_REQUEST)){$_REQUEST  = fl_value($_REQUEST);}
    $_COOKIE   = fl_value($_COOKIE);
    $_GET = fl_value($_GET);

@extract($_POST);
@extract($_GET);
@extract($_COOKIE);

上面对POST数组并没有进行消毒处理,但是后面调用POST数组变量时,基本都有再次用fl_value进行过滤操作,所以无伤大雅。fun.php和lib.php包含了一些需要调用的方法,可以后面需要的时候再跟进查看

0x02 SQL注入

全局查找了“sql”、“query(”、“fetch_asc(”等查询函数出现的位置,耐心寻找可控的变量

注入1

\mx_form\order_save.php
定位query()函数,其中SQL语句拼接$ip变量,经过fl_valueo()与fl_html()函数过滤
在这里插入图片描述
fl_value()过滤sql关键字
在这里插入图片描述
fl_html()对语句进行html实体编码,防御XSS

在这里插入图片描述
这里欲寻找输出bee_formlist信息的位置进行回显注入,定位后查询发现只在后台存在,且因为防御了XSS,无法导致XSS存储型漏洞,这里可以进行延时注入,每次注入都需要提交验证码,十分鸡肋

注入2

既然get_ip()处没有对单引号进行转义,可以寻找其他利用点
全局搜索get_ip()函数

在这里插入图片描述
跟进member/member.php
当$action=’save_login’时,会获取IP的值并存储在session中
在这里插入图片描述

全文搜索$_SESSION['m_ip'],发现当$action=out时,该值将拼接进sql语句进行update操作

在这里插入图片描述

这里更新的IP字段,会在你重新登陆时打印在登陆主页面,如果能将敏感信息update到ip字段,那么就能通过回显获取敏感信息
在这里插入图片描述

这里的利用比较麻烦,因为ip进行了fl_value()函数的消毒,过滤了等号和*号,没有办法进行直接回显,好在这里关键字可以大写绕过,然后利用ascii()配合斜杠,利用除法获取敏感数据

在这里插入图片描述
进入会员中心进行登陆
在这里插入图片描述
抓包修改XFF
X-forwarded-for:100'/ascii(substr(( (SELECT member_password FROM (SELECT member_password FROM bees_member limit 1)a)),1,1))#
在这里插入图片描述

登陆成功
在这里插入图片描述

然后注销登陆,让ip进行更新操作,执行sqL语句,再一次登陆,可看到ip成果获取数据,100/101 = 0.9900990099009901,说明密码MD5的第一位为'e',如此循环,最终能获取任意用户密码(你有时间的话)

在这里插入图片描述

0x03后台文件上传

这种洞结合具体功能点审计效果会比较好
在后台找到一处上传文件的位置
在这里插入图片描述
选择上传本地图片,这里后端之验证了content-type,可以直接image/jpeg绕过
在这里插入图片描述
F12审查元素
在这里插入图片描述
找到图片位置,成功RCE
在这里插入图片描述

0x04 XSS

全局搜索echo,逐个排查
在D:\phpstudy\PHPTutorial\WWW\bee\admin\upload.php
中打印了$get变量

$get变量取自GET型参数,这里没有对html字符进行转义,导致XSS
在这里插入图片描述
可直接过获取管理员cookie
在这里插入图片描述

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据