本环境采用phpstudy一键搭建,将下载的压缩包直接解压到phpstudy的www目录下,移动文件时会出现问题,建议php版本为5.6,更多详情请见下载的安装教程.txt。访问/lmxcms1.4/install开始安装
源码地址:http://www.lmxcms.com/down/xitong/
新建一个数据库后,对应数据库信息填写,管理员账号密码自行设置(如果使用seay代码审计系统的mysql监控插件的话,最好mysql里面只有一个数据库,可以下载一个新的mysql使用)
删除掉index目录后成功登录后台
通过cnvd知道漏洞来自以下文件
此cms和前面见到的cms存在差异,是因为采用了MVC框架处理,导致访问的url和实际的文件存在差异。一般源代码为了实现功能,会让php去写数据库通讯,html去展示数据,代码大致如下
<?php 数据库操作?;>
<html代码><?php 数据?;>
造成代码臃肿,MVC框架提出各分其职,c做功能,v做前端页面显示,m把功能封装好。
以下为例子,访问一个url,找到其对应文件是admin.php
但是在该文件中并没有找到任何可用信息
打开c文件夹,有一个admin和index目录,index是前端,admin为后端,当前已经登录到后端我们进入admin目录,找到了一个php文件对应url的参数m,搜索参数a找到函数,id是对应参数,被assignUpdatedata函数调用,且注释和页面显示的一致。此差异就是框架处理的结果
找到对应的漏洞文件bookaction.class.php,但是并没有找到sql语句,可能是在某个函数里面。思路是寻找明确的变量,虽然一个文件里面有很多变量,但是不能明确给出是函数自带的还是怎么接收,能知道来历的此文件只有id,优先看他。
函数getReply里调用了id,找到声明
这是一个PHP函数,名为getReply,它接受一个数组参数$id。函数的作用是将数组中的ID连接成一个字符串,然后将其作为查询条件,调用父类的selectModel方法来获取回复。然后找selectModel函数
这是一个PHP类的方法,名为selectModel。它接受一个可选的参数$param,默认为空数组。如果$param中存在field键,则将其值赋给类的field属性。最后,调用父类的selectDB方法并返回结果。追踪selectDB
这是一个PHP类的方法,名为selectDB。它接受三个参数:$tab(表名),$field(字段数组)和$param(可选参数,默认为空数组)。方法的主要功能是从数据库中查询指定表的指定字段,并根据提供的参数进行筛选。
输入id=1测试,此回复留言界面对应的就是reply函数,说明访问对了
为了确认sql语句是什么,我们在selectDB中输出
然后就出来了
闭合括号sql注入爆出user
此类后台漏洞利用能力不大,还需要后台账号登录,现在看看前台的
targsaction.class.php中定义了data变量,对data进行了p操作,跟踪一下
可以理解为对data进行分发决定他去干什么事,这里他已经固定了211,那就是get请求,转义,sql验证filter_sql(里面是sql过滤语句),不会调用mysql_retain。意思是我们如果调用这个_construct,会get请求获取数据,该数据进行了sql过滤,想要注入必须绕过,绕过过后,还会有一次转义等着我们。然后出现了一个delHtml方法,获取了data中的name字段,看到html和前端有关这里不用跟着。如果name为空就返回404,还对url进行了解码,正因为出现了此操作,造成可以绕过的结果。我们可以将url两次编码,浏览器默认会解码一次,然后就绕过了上面的p操作,接着又被它解码一次变成sql注入语句。
追踪getNameData函数
在oneDB中添加输出sql语句并访问,m调用TagsAction.class.php,name启用__construct,给data赋值1
Comments NOTHING