“BlueCMS——第一款免费开源的专业地方门户系统,专注于地方门户的CMS!” 广告是这么打的

BlueCMS v1.6 sp1,一个很老的CMS了,2010年的,上面的漏洞也很多,作为一个代码审计萌新的我,开始来拿这个练练手还是不错的

GetShell

在后台有一个模板管理的功能,可以编辑前端htm文件

点击编辑抓包

可以看到包含了文件,于是我们尝试修改编辑的文件,改为../../ann.php,放包后如下,可以修改

随后直接写马连接即可,源码如下:

SQL注入

X-Forwarded-For头注入

首先看到留言系统后台代码

网站习惯性的把用户留言时的ip保存下来,在看看getip()这个函数怎么写的

getenv()函数获取环境变量的值

  • 第一个HTTP_CLIENT_IP这个环境变量没有成标准,很多服务器完全没法获取
  • 第二个X-Forwarded-For 这个东西可以通过HTTP请求头来修改。

X-Forwarded-For明显可以伪造

抓包手工延时注入:

然后写脚本跑就可以了

sqlmap跑数据库:python sqlmap.py -r 1.txt --dbs --batch --headers="X-Forwarded-For:1*"

可以把数据全跑出来

首页登录界面SQL注入

先随便注册一个用户名为root的账号,然后在抓包使用万能密码即可登录任意用户

再来看看源码中是怎么写的

只限制了管理员组的不能从前台登录,参数没经过任何的过滤。。。

注册界面SQL注入

既然是注册界面就看肯定有插入数据到数据库中的操作,直接看源码

简单的进行了用户和密码的检测,但并起不到实际的作用,于是在email处尝试进行报错注入,单引号闭合的时候能够成功插入到数据库中并没有报错,于是推测使用了魔术方法对用户的输入进行了转义,而sql语句编码方法使用的gbk编码,于是在单引号前面加上%df构成宽字节注入

成功报错但并没有显示出错误信息,查看源代码

似乎只会报sql语法错误,而我们报错注入使用的是XPATH上的语法错误,所以并不会显示出来,于是尝试盲注试试,尝试后视乎并没有执行成功,而是报了错误,原因不明,后面再研究

另外此处还有一个sql注入漏洞,可以插入多行用户数据,并且在email出嵌入sql语句,用户名单引号用十六进制代替

可见成功执行注入,在数据库中成功执行了语句

管理登录界面SQL注入

如下图,万能密码直接进了

源码,无过滤

ad_idSQL注入

直接看源码

应该存在联合查询注入,随后在第七个字段找到注入点,成功获取数据库名,随后再接着查表列就行了

XSS

个人资料存储型xss

随后在个人界面和管理员用户界面完美弹窗,再看看数据库中的资料

email和msn都嵌入了script代码,为啥其它的没用?因为表字段的长度只有那么长

再看看代码

同样未经过过滤,这里还存在sql注入漏洞,就不写了。

注册界面存储型xss

注册界面的验证有部分是放在前端进行验证的,也就是用js进行验证,可我们都知道,前端验证并不可靠,真正的验证应该做在后端才行,就比如这里的邮箱验证就放在前端

于是我们直接抓包绕过,并在email中注入恶意代码

随后只要前端能够看得到该用户的邮箱,就会执行该恶意代码,就比如管理员的用户列表界面

发布新闻页面存储型XSS

先看下源码:

content参数使用的是filter_data函数进行处理,而这个函数并没有过滤img标签,于是可以利用进行xss攻击

随后在新闻页面成功弹窗

敏感信息泄露

备份信息泄露

管理员界面可以进行数据库备份,备份完后的数据放在这个目录下,并且命名规则为使用当日日期,可以尝试爆破地址

访问即可下载sql文件,其中有用户的个人信息,密码经过了md5加密,弱密码的话直接就可以加密开了

文件包含

既然有文件包含漏洞自然少不了那四个文件包含的操作,所以在找文件包含漏洞的时候就需要对这几个操作格外留意

支付表单文件包含

先在user.php中找到有include操作的代码,如下:

可以看到这里我们可以post一个pay参数,且pay参数我们可控,既然有文件包含了,自然就要找到文件上传的地方来包含这个文件来达到getshell的目的,在我们修改个人资料的界面就有上传头像的操作,于是我们上传图片马

得到路径,而这个文件包含操作在后面还加上了一个/index.php,这里就要根据为Windows下的文件最大路径来截取了,前提条件是php版本要小于5.2.8,Windows下目录最大长度为256字节,超出的部分会被丢弃,于是在提交act=pay的表单处提交一个pay=../../data/upload/face_pic/15869440930.jpg......(超出256个字节),即可达到效果,由于我这没配php5.2.8的版本就不演示了

SSRF

修改用户头像处SSRF

源码:

这段代码是用来防止http://https://链接的,但是使用的是弱比价,如果strpos返回的值为0,那么0!=false返回的是false即可绕过判断访问内网资源

其它

install无限安装

install目录是用来安装这个CMS的,但是在经过一次安装后再进入install系统并不会提示已经安装过或者要身份验证,于是就会造成无需任何提交就可以重新安装这个网站的风险,尽管管理员页面有提示(开发人员也有意识到),但如果使用者并没有在意就会造成极大的危害

爆破用户名

在输入用户名之后系统会自动发一个包到数据库去验证,如图所示

而这个查询并没有次数限制,于是就可以利用这个数据包传入的user_name值来爆破用户名,造成身份信息泄露

任意文件删除

在修改会员的个人资料页面存在此漏洞,源码:

face_pic3可控,当face_pic1为空时即可删除face_pic3文件,如下

可删除网站根目录下的1.txt文件

参考