“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文件
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues