Bluecms代码审计学习

Bluecms代码审计

重装漏洞

安装网站成功访问如下

 

再次访问insatll目录还是会访问成功,这里就可以直接重装网站了

 

去bluecms_v1.6_sp1/uploads/install/index.php

安装过cms之后会判断是否可写,在

E:/phpstudy/WWW/CodeAudit/bluecms_v1.6_sp1/uploads/data/install.lock生成一个install.lock文件,可是我在文件夹下并没有看到lock文件,而且还能访问安装目录

 

如果存在lock文件,则会跳转到主页面

 

经过本地测试错误回显是这样的

Fatal error: Cannot redeclare class test in E:\phpstudy\WWW\1.php on line 3

无法在第3行的E:\ phpstudy \ WWW \ 1.php中重新声明类测试

 

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

 

例子:

简单来说就是

1.php下有如下类方法

<?php

class test{

   public function index(){

          echo '123';

   }

}

——————————————————分割

2.php下如下写法

<?php

require '1.php';

——————————————————分割

3.php如下

<?php

//起始

require_once './test.php';

 

//最后

include './test.php';

 

sql注入漏洞

ad_js.php文件

通过seay源代码审计出的sql注入描述,查看第一条

 

这里的sql语句把get获取的传参直接拼接到了where条件里

 

通过查看install/common.inc.php文件,得知这里开启了全局gpc模式,绕过gpc模式只能通过数字型注入或者cookie,xff等注入方法。

 

继续跟踪getone方法,调用这个方法直接去数据库查询,并返回结果

 

table(‘ad’)只是表的名字,这里不用看它,回到网页,访问”uploads/ad_js.php”文件传参”?ad_id=1” 后面拼接sql语句 “-1 union select 1,2,3,4,5,6,database() #”

 

在查看器里面可以看到输出的数据库名称

 

任意文件包含

在支付这里存在任意文件包含漏洞

这里的pay参数被直接拼接到include这里,没有过滤参数,可以直接利用

 

 

使用../../到达uploads目录下,直接访问到了index.php

 

文件包含漏洞可以通过00截断(php<5.3),垃圾字符(垃圾字符填充windows下需要259次)和?来进行伪阶段(该方法不受GPC和php版本的影响,需要开启远程文件包含)。此处使用垃圾字符填充绕过后缀

price=1&id=2&name=2&pay=../../1.php........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

 

任意文件删除漏洞

这里首先获取get传参的file_name参数,拼接到路径下,并没有做过滤

 

首先来看一下,该功能的位置。是用来删除数据库备份的一个功能

 

这里就是当前的一个路径情况,这个是我自己输出来看的

 

由于没有对file_name没有做过滤,可以直接使用../返回到上级目录进行任意文件删除

我根目录下是有一个test.php文件的

 

利用任意文件删除漏洞,删除这个test.php文件。如图所示删除文件成功

 

 

文件写入webshell

跟踪到tpl_manage.php文件,如果act=do_edit,就会获取两个post传参tpl_name和tpl_content首先判断文件名是否为空,然后拼接到路径,使用fopen打开文件,再使用fwrite函数写入内容。

 

我们可以看到此处的前台模板列表都是html文件,但是fopen函数,打开一个文件时,如果文件不存在他会自动创建一个文件。配合使用fwrite文件写入webshell

 

构造tpl_name的传参,为1.php,写入一句话即可。

路径如下

http://localhost/CodeAudit/bluecms_v1.6_sp1/uploads/templates/default/1.php

 

写入的文件是可以直接访问的

任意文件读取

漏洞位置在

uploads/admin/tpl_manage.php?act=edit&tpl_name=

追踪到代码位置

如果act=edit传参,就会跳转到编辑页面,而获取的tpl_name参数没有做过滤条件,导致了可以目录穿越,可以造成任意文件读取漏洞

 

通过../../index.php传参进入,可以看到编辑栏里面的php代码,如果修改里面的内容,会直接覆盖掉原本的代码

 

注册用户处xss

前台注册用户处的存储型xss

这里首先获取了用户所要填写的内容,然后判断用户名密码,加条件,但是email邮箱这里没有做条件限制,过滤参数,直接插入数据库中,所以这里可以输入xss命令

 

在登录处,输入账号密码,输入邮箱的正确格式,在末尾添加xss语句,登录成功后会弹窗

 

 

头注入

在前台评论处

在前台评论处,获取了用户的传参信息,带入了数据库中,其中有一个getip方法

 

Getip方法是获取当前ip的方法,GPC模式保护的是get,post,cookie但是这里使用xff即可绕过,进行注入

 

直接放入sqlmap即可

 

posted @ 2021-03-04 10:09  娜娜米  阅读(274)  评论(0)    收藏  举报