blue CMS 实战 (1)

  • A+
所属分类:代码审计


前言:

Blue Cms 为很多人入坑php代码审计的开始,是一款小众的CMS,已经很久不更新了,网上的文章也很多,之前也发布过很多漏洞,这里我将之前写的文档进行整理分享出来,对此CMS的大部分漏洞进行了分析,所以分成多部分。


搭建教程:

不知道怎么想的就用docker搭的环境,后面测试打印结构有点累,推荐大家用phpstudy,镜像直接拉下来。

docker pull securitytrain/bluecms_v1.6:sql

使用docker image可以查看拉下来的镜像,如下命令开启一个容器。

docker run-d -p 80:80 securitytrain/bluecms_v1.6:sql

由于在cms安装的时候需要数据库密码因此有俩种办法可以解决。

  1. 本地搭建一个数据库外连。

  2. 进入docker容器,强制修改密码。

docker ps-a查看id后直接docker exec -itd /bin/bash进入容器当中

#修改mysql配置文件实现无密码登录
vi /etc/my.cnf
#在my.cnf中添加
[mysqld]
skip-grant-tables

#重启mysql
service mysqld restart

#直接进入mysql命令行界面
mysql -uroot -p

#修改mysql密码
update user set password=password('root') where user='root';

然后正常安装即可,代码百度很多或者直接将docker里的代码复制出来。


目录结构:

目录名称 用处
admin 后台管理
api api接口
data 网站数据库配置文件和网站缓存文件
images 图片存放
include 常用函数调用
install 安装目录
js js目录
templates 网站模板
uc_client discuz也有一个相同的目录,应该是一个管理后台


开始审计:

一遍在网站点击各个地方随便点点看有啥功能(方便快速理解代码),边按顺序打开主目录下的php文件看看。观察到几乎所有的文件都包含了/include/common.inc.php,于是猜测此文件有网站的防护。

blue CMS 实战 (1)

跟进deep_addslashes,其中对每个接受的get,post,cookies,request先判断是否是数组,如果是的话从数组当中取出来值再判断,addslashes是比较经典的一个预防sql注入的方法,一般看到这种函数都会追踪到网站的数据库配置文件查看网站数据库默认编码,如果是GBK那么就可能存在宽字节注入。

blue CMS 实战 (1)

再看一下安装目录,是否会有安装完成之后的数据库备份可以下载,首先可以看到网站是通过data目录下的install.lock这个文件判断是否安装,暂时没有找到绕过的方法,没有办法导致重装漏洞。

blue CMS 实战 (1)

在看主页文件index.php的同时一般也会打开网页查看效果,在看网页前端代码的时候自己构建在脑海里后端的代码,以后即使做渗透黑盒测试的时候也会有很大的帮助。index.php的参数都不需要用户输入,都是从已经在数据库中存储的数据中取出来,于是这个地方就可能存在存储型xss,如果将xss输出到主页危害很大的。

blue CMS 实战 (1)

看到主页网站有登录的地方,点击登录会跳转到/user.php?act=index_login,进入到user.php当中搜索相关路径。

blue CMS 实战 (1)

一开始以为网站存在漏洞,正巧看到其他师傅文章的时候也是发现了这个地方,同样是UC_API,并且引用了client.php中的函数,看到师傅说的意思大概就是网站会将所有的参数都传入到UC_API_FUNC中,由他来判断输入的内容是否正确,如果正确就返回uid。

blue CMS 实战 (1)

blue CMS 实战 (1)

大概看了一遍之后使用了seay源代码审计工具,Git上也有很多审计工具,这种小众CMS我还是比较喜欢用seay

blue CMS 实战 (1)

打开ad_js.php,其中ad_id是可控的参数,往下看下面这个判断,如果传入的这个参数则为空或变量不存在,输出error然后退出,如果有值即可跳过此条件继续传入到敏感函数位置直接调用getone函数。会将参数ad_id的内容传入到getone函数当中。(图丢了!)


这个函数是接收sql语句然后执行,之前说到网站有自带的防护,这里的sql语句是没有单引号的,所以是一个数字型的注入,网站本来的防护主要是针对字符型的,那么这个地方就可能存在一个数字型的sql注入。

blue CMS 实战 (1)


在实际测试的时候发现不管我输入的payload是一行还是200行都显示语句报错,查看数据库为7行,于是再次查看代码。

blue CMS 实战 (1)

blue CMS 实战 (1)

这个地方加了一个注释,那么我属于的正确的也不会正常输出,于是更换payload,查看源代码发现显示位为7。

blue CMS 实战 (1)

blue CMS 实战 (1)

没有后续的利用链,大概就是注后台密码,写shell读文件。


第一章完!


blue CMS 实战 (1)


本文始发于微信公众号(哈拉少安全小队):blue CMS 实战 (1)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: