齐博CMSv7
太菜了。。目前暂时只找到了一些后台的洞。。既然后台不是getshell,个人感觉都较鸡肋,希望师傅们轻喷。
初步了解
数据库类
$db
为数据库操作类
类的一些方法在inc/mysql_class.php
的MYSQL_DB
类
中定义
函数
核心系统要调用的一些函数与类的文件存放在inc目录下
过滤函数
1 | function filtrate($msg){ |
后台任意文件删除
从函数入手
在inc目录下全局搜索unlink
将目标锁定在
1 | 文件:inc/function.inc.php |
1 | function del_file($path){ |
简单的对$path
参数进行了判断,未经过任何过滤,就进行了@unlink($path)
于是现在寻找调用该函数的位置
在前台和会员中心并未发现调用该函数的地方
在后台有多处调用该函数
将目光定位在
1 | 文件:admin/mysql.php |
关键代码
1 | /** |
首先需要选择备份文件,然后直接调用del_file
函数对该备份文件进行删除
仅仅是拼接在了ROOT_PATH."cache/mysql_bak
后。跳出该目录即可进行任意文件删除
漏洞验证
备份文件在\cache\mysql_bak
下
先备份文件,接着删除该备份文件
修改baktime
为../hack
即可删除该目录
后台鸡肋SQL注入
既然是后台注入。那么暂且归为鸡肋
漏洞分析
本来在找任意文件写入,结果歪打正着找到了一个注入
1 | 文件:admin/html.php |
第296行处
1 | ... |
$idDB
变量和$fiddb
都是从get传入,两个参数都能造成注入,这里用$idDB
变量。
传入$idDB
变量后,由于用到了implode
函数这里idDB
需要是数组,之后将该变量直接拼到了id IN ($string)
中给了$SQL
变量,然后又直接将$SQL
变量拼接进了数据库查询语句,这中间没有任何过滤,于是可造成SQL注入攻击query = $db->query("SELECT id,fid FROM {$pre}special WHERE $SQL LIMIT 3000");
漏洞验证
后台大多数功能通过lfj参数进行访问,参数为文件名
需要传入参数action=make_SPhtml
才能进入判断
于是我们访问的链接127.0.0.1:12345/7bocms/admin/index.php?lfj=html&action=make_SPhtml&idDB=1
直接就报错了,因为这里需要$idDB
是数组
所以我们重新传参(由于跳转,放到BP里验证)
在构造payload过程中发现
会把) 后面的给 “吃掉”
于是尝试用加号绕过
再将#编码%23
成功注入
1 | poc=/admin/index.php?lfj=html&action=make_SPhtml&idDB[]=1)+and+(updatexml(1,concat(0x7e,(select+user()),0x7e),1))%23 |