bluecms_v_1.6sp1代码审计

bluecms_v_1.6sp1代码审计

cms概况

bluecms v1.6 sp1是一个比较古老的cms,目录结构也比较简单。网站主要防护在/include/common.inc.php文件中,对$_GET、$_POST、$_COOKIES、$_REQUEST使用deep_addslashes()函数过滤一遍,漏了$_SERVER,deep_addslashes函数是使用addslashes函数对输入值中的预定义字符做转义

代码审计

将代码放入seay源代码审计系统中自动审计,先对扫描出来疑似存在漏洞的地方审计一遍,然后在对重点功能或文件进行审计。

1、重装漏洞

在搭建实验环境的时候,但安装进行到最后一步时却网页空白显示,但实际上又确实是安装好了网站也可以正常 访问(搭建环境时记得修改php.ini文件调低其报错敏感程度,不然会报一些无关重要的错误)。

这时重新访问安转文件,依旧可以进入安转步骤

搭建完成 ,能够正常使用

在这里插入图片描述

访问安转文件,可以进入安转界面进行重装
在这里插入图片描述

一般cms安装完成后,都会生成一个类似install.lock的文件,用以检测cms已经安转好了。

这里安转完成是会在data目录生成一个 install.lock文件,但进入安装程序后检测是否有这个文件判断是否安装过了
在这里插入图片描述
在这里插入图片描述

这里安转好后却没有生成install.lock文件

测试发现原因是由于index.php文件开头和结尾都包含了/include/common.inc.php文件,而inc文件调用了smarty类文件,这里造成了重复调用,require错误,不会继续执行代码。也就不会生成install.lock文件,解决办法是将require 改成require_once,如果已经被包含,则不会再次包含。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、SQL注入 漏洞

  • ad_js.phpSQL注入

    使用seay源代码审计系统自动审计,手动检查发现ad_js.php中$ad_id参数没有过滤就直接拼接到SQL语句中

在这里插入图片描述

跟进getone函数

在这里插入图片描述

除了common.inc.php中deep_addslashes函数会转义预定义字符外再无任何过滤,直接执行并返回结果。而且这里由于没有因引号包裹,deep_addslashes函数不起作用,可以直接利用。

注意这里注入结果不会显示在页面上,通过查看网页源代码可以看到

在这里插入图片描述

查所有表名
在这里插入图片描述

  • user.php宽字节注入

数据库在连接时采用gbk编码格式,而且deep_addslashes会转义输入的参数值,因此可以使用宽字节注入

在这里插入图片描述

这里一共有两处可以注入,一处是网站用户登录,另一处是网站用户注册处。

在这里插入图片描述
在这里插入图片描述

网站用户登录页面用户名引号前输入%df与转义后的\合称gbk字符。直接在登录框输入%df’是不行的,因为%df本来就是特殊字符,直接这样写其中的%号会经过一次url编码

输出注入语句看一下
在这里插入图片描述

在这里插入图片描述

  • admin/login.php宽字节注入

同样网站管理员登录处也存在同样的问题

在这里插入图片描述

跟进check_admin函数

在这里插入图片描述

使用宽字节注入达到万能密码登录的目的
在这里插入图片描述
在这里插入图片描述

  • xf注入

因为deep_addslashes函数没有对$_SERVER进行过滤,可以可以找到有X-Forwarded-ForCLIENT-IP的地方,伪造ip进行SQL注入

找到与ip有关的SQL语句

guest_book.php留言处发现ip会写入数据库

在这里插入图片描述

跟进$online_ip

在这里插入图片描述

跟进getip()函数

在这里插入图片描述

可以伪造X-Forwarded-ForCLIENT-IP实现注入

在这里插入图片描述

结果显示在留言处

在这里插入图片描述

还有一处注入是在网站新闻留言处,与上面类似

但要注意,这里的xf构造

X-Forwarded-For: 127.0.0.1','1'),('', '1', '1', '1', '6', (select concat(admin_name,0x3e,pwd) from blue_admin), '1656396250', '127.0.0.1', '1')#

在这里插入图片描述
在这里插入图片描述

这样构造就相当于一次性插入了两条留言,绕过了对留言内容的检测

在这里插入图片描述

**注意:**插入的数据要与前面一条一致(用户id之类的)不然会报错,或者显示不了

在这里插入图片描述

  • 后台多处sql注入

后台对数据库的操作要比前台多,大多数是由于数据库设置gbk编码造成的宽字节注入以及一些未过滤无引号保护直接拼接造成的。这里不一一列举了

3、XSS漏洞

  • guest_book.php存储型XSS

上面这里可以构造sql注入,原理是在写入数据库中的语句中插入注入语句,其实是替代了留言内容写入数据库,并把结果显示在页面留言处。如果把注入语句换成XSS语句,就可以造成存储型XSS,也就绕过了程序对留言的html实体编码防御XSS的措施。

在这里插入图片描述

伪造XF信息,插入XSS语句

在这里插入图片描述

成功弹窗

在这里插入图片描述

  • 网站新闻留言处存储型XSS

和上面一样这儿还是利用的XF中ip伪造

在这里插入图片描述

成功弹窗

在这里插入图片描述

  • user.php存储型XSS

1、用户注册邮箱过滤不全导致存储型XSS

在这里插入图片描述

同样这里user_name参数也是可以利用的,但是有长度限制,email则没有长度限制。这里个参数仅仅是经过转义预定义字符和trim函数去除首尾的空白和预定义字符。

这两个参数可以注入也可以写入XSS,但要注意浏览器提交会自动编码,所以最好抓包后修改

在这里插入图片描述

登录aaaa用户即可弹框

在这里插入图片描述

2、发布新闻处存储型XSS

新闻内容,采用filter_data过滤

在这里插入图片描述

跟进filter_data函数

在这里插入图片描述

这里漏掉了img标签,可以使用img标签。也可以大小写混写直接绕过

在这里插入图片描述
在这里插入图片描述

还有一处是编辑新闻中的文章概要处,这里只是限制了长度,没有过滤

在这里插入图片描述
在这里插入图片描述

直接在网站首页弹框

在这里插入图片描述

4、文件包含

user.php中用户选择支付方式是选择对应的文件夹进行包含

在这里插入图片描述

这里需要截断路径

$_POST['pay']前后加了文件,可以使用../进行目录遍历,后面的/index.php如果php版本低于5.3.4magic_quotes_gpc=off则可以使用%00截断,导致任意文件包含。还可以使用.号路径长度截断,Windows下目录最大长度为256字节,Linux下目录最大长度为4096字节

实测点号.截断phpstudy中 php5.2可以成功

在这里插入图片描述

成功包含

在这里插入图片描述

5、ssrf漏洞

看到有人分析bluecms时提到了uesr.php有一处SSRF漏洞,这儿来分析一下

在网站用户修改资料这里,可以自定义上传图片的路径

在这里插入图片描述

这里的代码逻辑是不允许包含http://或者https://应该用!==,但是他用了!=,根据php弱类型strpos()返回值为0是和false相等的,故能够绕过造成SSRF漏洞

== 比较两边的值是否相等,会自动转换类型; === 则会严格比较类型是否相同,如果类型不相同,直接返回false。 例如:'123' === 123 // => false

!===相对,!=====相对。同理:

0 != false // => false
0 !== false // => true

但是这里只支持本站相对路径其实cms源代码就是只支持本站相对路径,没有类似file_get_contents的函数处理

6、任意文件删除漏洞

  • user.php 网站用户更新个人资料处

在这里插入图片描述

参数face_pic3外部可控,可删除任意文件,需使得face_pic1为空。

cms文件夹中新建aaa.php文件

在这里插入图片描述

成功删除
在这里插入图片描述
在这里插入图片描述

  • 提交编辑后的分类信息处任意文件删除

在这里插入图片描述

参数lit_pic可控,可以删除任意文件

7、总结

这是一个比较古老的cms,可以说是满目疮痍,更靶场一样。上述漏洞主要是前台的。后台同样存在类似或者没有写到的漏洞。由于自己技术有限,就到这。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值