Bluecms代码审计

Bluecms安装

首先我们访问bluecms.com/install/index.php,按照提示一直点击下一步即可,其中我们需要设置管理员账户密码。

Seay代码审计

sql注入漏洞

我们网站安装完毕之后,接着就进行代码审计,首先我们就使用seay进行代码审计工作。我们在seay中新建项目,选定我们网站的目录,接着点击自动审计-开始即可

1658197980996

我们双加击审计出的第一个漏洞,这里我们可以看到是一条sql语句,这里使用了变量ad_id1658198043175

我们右键点击这个变量,进行全文追踪,可以看到ad_id这个变量是直接从GET获取的值,没有进行过滤。

1658198146965

接着我们对getone函数进行分析,我们右击getone,接着点击函数定位,找到函数所在的位置,这里我们可以得知,函数在拿到sql语句之后直接进行了查询没有经过过滤,所以经过我们的分析这里是存在sql注入漏洞

1658198259442

发现sql注入漏洞之后,我们就访问网站进行测试,我们直接访问http://bluecms16.com/ad_js.php,可以看到页面是空白的,接着我们传入get类型参数,可以发现已经报错了

1658199488209

这里我们继续order by确定了有7列,接着查询当前数据库,这里正常页面返回的是空白页,但是在查看源码的时候,可以以注释的方式看到回显,这里我们确定了回显的位置是7,接着我们就查询一下当前的数据库,已经确定存在sql注入漏洞了

1658199643410

IP伪造导致INSERT注入

首先我们在seay中发现一个ip伪造的漏洞,代码位置在common.fun.php下

1658209404026

接着我们在phpstorm下找到对应的代码

1658209619743

接着找到哪些位置调用了getip这个函数,我们同时按下ctrl+shift+f接着输入getip查找引用,这里我们可以看到,找到了三个位置

1658209724925

我们首先进入第一个查看,发现这一串代码将getip()返回的值直接拼接到sql语句里,没有任何过滤

1658209801244

接下来我们就对这部分的代码进行调试,我们将sql语句输出,查看语句内容

1658210753990

接着我们在随便新建一个新闻,在其下面进行评论,可以看到返回如下内容

1658210726785

这里我们对comment这个参数进行了测试,我们输入test',输出的结果是test\',如果在magic_quotes_gpc开启的状态下,为 GPC (Get/Post/Cookie) 操作设置 magic_quotes 状态。 当 magic_quotes_gpc 为 on,所有的 ‘ (单引号)、” (双引号)、(反斜杠)和 NULL 被一个反斜杠自动转义。本特性已自 PHP 5.3.0 起废弃(Off)并将自 PHP 5.4.0 起移除。我们当前php的版本是 5.5.38,我们可以看到接受comment没有进行任何操作,但是还是进行了转义,经过测试是因为magic_quotes_gpc被开起了

1658212936764

这里我们先测试伪造ip的漏洞,我们在burp提交数据的时候,添加如下http头,可以看到ip地址已经是我们自定义的ip

CLIENT-IP:1.1.1.1

1658213080998

这里我们分析一下sql语句

INSERT INTO blue_comment (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) VALUES ('', '1', '2', '1', '6', 'test', '1658213284', '1.1.1.1', '1')

使用如下语句我们可以查询出管理员的账号和密码

select concat(admin_name,":",pwd) from blue_admin;

1658213577012

那么我们可以构造语句,让其再添加一条数据,其中的comment修改为sql语句,我们将CLIENT_IP的值修改为如下内容

1.1.1.1','1'),('', '1', '2', '1', '6',(select concat(admin_name,":",pwd) from blue_admin),'1658213284', '1.1.1.1

1658213837008

接着我们修改代码,将之前为了调试添加的代码删除,接着再次发送请求包,可以看到评论中出现了账号密码

1658214170040

文件包含漏洞

我们在seay中找到了一个文件包含的漏洞,其所在的位置时user.php的742行,我们在phpstorm中定位到代码位置,我们对这段代码进行简单的分析,发现这里进行了文件包含而且其中的文件路径时从前台传递过去的可以进行控制,并且没有过滤

1658215477007

这里代码所对应的功能点是址符功能,具体功能点如下

1658215594959

1658215575826

接下来我们就对该功能点进行测试,首先使用burp进行抓包,经过我们之前的分析,我们就使用POST方式传递一个pay参数

这里我们需要说明一下,在php 5.3.4中php修复了0字符,但是在之前的版本中00在php中危害较大。还可以根据系统进行截断,比如使用超长文件名,在5.4版本之前是可以使用的

系统文件路径长度限制:
Windows 259个字节
Linux 4096个字节

不过这里测试一直失败

1658218745336

XSS漏洞

注册用户xss

这次的XSS漏洞是发生在注册的功能点上,所以首先需要在注册的时候进行抓包,其中act就是其要执行的动作

1658219695117

接着我们在user.php中找到对应的代码进行分析,这我们可以使用"do_reg"关键字来进行定位,以下代码就是定位到的代码

1658219793484

xss一般是通过获取管理员用户的cookie来进入后台,所以我们这里来确定用户的哪些信息可以在后台展示,我们在后台这里可以看到用户的邮箱是展示在后台的

1658220812593

接下来我们就针对代码中的邮箱分析是否存在xss漏洞,经过分析,代码中接受到email之后仅仅删除了多余的空格没有做其他的过滤措施,所以是存在xss漏洞的,这里我们在注册的时候就使用xss代码进行测试

1658222429781

接着我们使用admin权限在后台查看用户,触发xss

1658222489181

个人资料xss

在个人资料的修改界面,我们首先点击确认修改,抓包查看其提交的数据,这我们可以看到其动作为edit_user_info,我们就使用这个关键字在代码中进行定位

1658222700679

我们通过在user.php中进行搜索定位到了编辑资料的代码端

1658222799701

经过我们的分析,这里的数据都没有进行过滤,都是直接拿到后插入到数据库中,所以我们这里就分析这些数据在数据库中的类型

1658229902899

我们可以看到,birthday是无法利用的,其数据类型是date,email、qq、msn、address都是可以利用的,但是对长度是有限制的,不过想要拿到后台的cookie还是需要使用email来进行插入。

最后修改:2022 年 11 月 11 日
如果觉得我的文章对你有用,请随意赞赏