代码审计-MetInfo 6.0.0 sql注入漏洞
首先漏洞存在于app\system\message\web\message.class.php文件中,变量{$_M[form][id]} 直接拼接在SQL语句中,且验证码检测函数是在SQL语句查询之后,这也就造成了我们可以无视验证码检测函数,进行SQL注入。具体问题函数代码如下:

$met_fd_ok=DB::get_one("select * from {$_M[table][config]} where lang ='{$_M[form][lang]}' and name= 'met_fd_ok' and columnid = {$_M[form][id]}");
这行中$_M[form][id]}没有被单引号保护拼接在sql语句中,存在安全隐患。我们跟跟踪这个变量看是否有过滤操作。
首先这个类的基类是web类

跟进web类,没有对用户传入的数据进行过滤等操作,却初始化了common类

我们继续看看common类

在common类初始化时调用了表单过滤的函数load_form()
此函数中又调用了过滤SQL注入的函数sqlinsert


那我们来看看这个sqlinsert函数过滤了什么

可以看到sqlinsert函数对sleep关键字进行了处理,但是我们还是可以使用MYSQL中的benchmark函数轻松绕过。当然我们本文绕过的姿势不是用函数绕过这个函数,而是让代码不执行这个过滤的函数来达到绕过。
我们回到daddslashes函数里:

daddslashes()定义在app/system/include/function/common.func.php第51行,对传递的参数进行addslashes()操作。这里注意,在else语句中,如果之前定义了IN_ADMIN常量,进行trim(addslashes(sqlinsert($string)))操作,反之则进行trim(addslashes($string))。
之前所述的安全隐患点为int型,所以addslashes()函数没有作用,所以这里主要是要绕过sqlinsert(),需要寻找到定义过IN_ADMIN常量的入口。

这里通过搜索找到了admin/index.php,文件第5行定义了IN_ADMIN常量。接着看从admin/index.php入口文件如何调用add()函数的,index.php定义了4个常量,并且包含了app/system/entrance.php。

进入app/system/entrance.php,38-44行,入口文件没有定义M_TYPE,这里会设置M_TYPE常量为system;54-59行,由于定义了M_TYPE为system,进行设置PATH_OWN_FILE常量为PATH_APP.M_TYPE.'/'. M_NAME.'/'.M_MODULE.'/',其中M_NAME、M_MODULE均可控。88-99行包含app/system/include/class/load.class.php,并调用了module()方法。


由于调用module()方法时缺省了参数,因此$path、$modulename、$action均有之前定义的常量赋值,然后再调用_load_class()方法。_load_class()方法可以引用并实例化一个类,


当action为空的时候,只引用文件。当action为new时候,会实例化这个类。当action为do开头时候,会实例化类,并执行这个方法。
那么到这里我们理一下条件:
要想包含app/system/message/web/message.class.php文件,需要满足
M_NAME = $_GET['n'] = message; M_MODULE = $_GET['m'] = web; M_CLASS = $_GET['c'] = message;
要想调用add(),必须实例化类并执行方法,但这里限定只能实例化并执行do开头的方法。这里找到了message.class.php中的domessage(),它调用了add()方法。

在调用add()方法前,需要满足$this->check_field();,这里发现只要抓取正常的留言参数填充就可以了,验证码的判断是在add()方法中执行完漏洞语句之后。

为了实现布尔注入而不是时间盲注,需要正常时$met_fd_ok的值不为空,从而绕过46行判断,弹出"验证码错误",而异常时$met_fd_ok值为空,弹出"反馈已关闭"。
在数据库中执行一下存在漏洞的SQL语句,看看符合条件的id参数有哪些,满足的columnid有42和44。
mysql> select * from met_config where name = 'met_fd_ok' and lang='cn'; +-----+-----------+-------+--------------+----------+---------+------+ | id | name | value | mobile_value | columnid | flashid | lang | +-----+-----------+-------+--------------+----------+---------+------+ | 470 | met_fd_ok | 1 | | 44 | 0 | cn | | 490 | met_fd_ok | 1 | | 42 | 0 | cn | +-----+-----------+-------+--------------+----------+---------+------+
最终可以构造如下GET请求注入,注入点为id:
admin/index.php?m=web&n=message&c=message&a=domessage&action=add&lang=cn¶137=1¶186=1@qq.com¶138=1¶139=1¶140=1&id=42 and 1=1
sqlmap.py -u "192.168.5.172/admin/index.php?m =web&n=message&c=message&a=domessage&action=add&lang=cn¶137=1¶186=1@qq.com¶138=1¶139=1¶140=1&id=42"

最后附上一个思维导图,更好理解逻辑

代码审计-MetInfo 6.0.0 sql注入漏洞的更多相关文章
- 代码审计(1):sql注入漏洞
挖掘经验:sql注入经常出现在登录界面.获取HTTP请求头.订单处理等地方.而登录界面的注入现在来说大多是发生在HTTP头里面的client-ip和x-forward-for,一般用来记录登录的ip地 ...
- [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入
0x00 前言 本来呢,这套CMS都不想审的了.下载下来打开一看,各种debug注释,排版烂的不行. 贴几个页面看看 感觉像是新手练手的,没有审下去的欲望了. 但想了想,我tm就是新手啊,然后就继续看 ...
- DT6.0关于SQL注入漏洞修复问题
阿里云安全平台提示:Destoon SQL注入,关于: Destoon的/mobile/guestbook.php中$do->add($post);这行代码对参数$post未进行正确转义,导致黑 ...
- Joomla!3.7.0 Core SQL注入漏洞动态调试草稿
参考joolma的mvc框架讲解:http://www.360doc.com/content/11/1219/18/1372409_173441270.shtml 从这个页面开始下断点:Joomla_ ...
- joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞
影响版本: 3.7.0 poc http://192.168.49.2:8080/index.php?option=com_fields&view=fields&layout=moda ...
- 网站sql注入漏洞修复方案之metinfo 6.1.0系列
近日,我们SINE安全对metinfo进行网站安全检测发现,metinfo米拓建站系统存在高危的sql注入漏洞,攻击者可以利用该漏洞对网站的代码进行sql注入攻击,伪造恶意的sql非法语句,对网站的数 ...
- 【代码审计】五指CMS_v4.1.0 copyfrom.php 页面存在SQL注入漏洞分析
0x00 环境准备 五指CMS官网:https://www.wuzhicms.com/ 网站源码版本:五指CMS v4.1.0 UTF-8 开源版 程序源码下载:https://www.wuzhi ...
- 【代码审计】五指CMS_v4.1.0 后台存在SQL注入漏洞分析
0x00 环境准备 五指CMS官网:https://www.wuzhicms.com/ 网站源码版本:五指CMS v4.1.0 UTF-8 开源版 程序源码下载:https://www.wuzhi ...
- 【代码审计】iCMS_v7.0.7 admincp.app.php页面存在SQL注入漏洞分析
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
- 【代码审计】iCMS_v7.0.7 apps.admincp.php页面存在SQL注入漏洞分析
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
随机推荐
- Unity3D_10_文件夹目录架构
一:几个特殊文件夹介绍 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论 ...
- Unity3D_01_各种寻找GameObject方法
1.GameObject.Find(): 寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mon ...
- windows下docker与.net core 的简单示例
一 windows 下安装docker 二 .net core 项目 新建一个空的ASP.NET Core Web 应用程序 在该项目的目录下执行dotnet publish,可以看到在bin\Deb ...
- centos php7 安装mysqli扩展心得
在新配服务器时发现,php无法连接到mysql.通过phpinfo发现.根本没有显示mysqli的相关配置.经过一系列研究.总结了下.: 第一步: 在phpinfo里没有mysqli配置,原因是安装p ...
- Driect3D初始化演示
初始化Direct3D演示 初始化Driect3D类: #include "Common\d3dApp.h" #include <DirectXColors.h> us ...
- 操作DOM会影响WEB应用的性能
平时在工作中,要优化自己开发的WEB应用的性能,一般是遵循以下几个原则: 1.减少网络请求. 2.压缩.合并静态资源文件,以此来减轻网络传输的带宽压力和资源消耗. 3.代码逻辑层面上的性能优化.比如减 ...
- Dungeon Master POJ-2251 三维BFS
题目链接:http://poj.org/problem?id=2251 题目大意 你被困在了一个三维的迷宫,找出能通往出口的最短时间.如果走不到出口,输出被困. 思路 由于要找最短路径,其实就是BFS ...
- Gradle 梳理:安装、入门使用方法
Gradle 教程:第一部分,安装[翻译] 原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-1-installation-se ...
- SpringBoot 定时任务实现方式
定时任务实现的几种方式: Timer:是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但 ...
- springboot 项目打包部署后设置上传文件访问的绝对路径
1.设置绝对路径 application.properties的配置 #静态资源对外暴露的访问路径 file.staticAccessPath=/upload/** #文件上传目录(注意Linux和W ...