Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2023-45503 — CVE-2023-45503 参考 | Kitploit
工具/GitHubGitHub/ally-petitt/cve-2023-45503
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育数据库安全
GitHubally-petitt/cve-2023-45503

CVE-2023-45503

CVE-2023-45503 参考

查看仓库
32年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2023-45503 漏洞详情

概述

在 Macrob7 Macs 框架内容管理系统(CMS)1.1.4f 及更早版本中,对用户输入的不安全处理导致了 16 个 SQL 注入漏洞。能够执行任意 SQL 查询可能导致私有数据泄露,包括用户密码哈希,以及修改其他用户凭据和权限级别的能力。影响包括权限提升和潜在的远程代码执行(RCE)。

一份列出每个受影响端点、易受攻击参数以及易受攻击函数的电子表格可在此链接找到。

CWE 分类: CWE-89:SQL 命令中特殊元素的不当中和('SQL 注入')

报告者: Ally Petitt

受影响产品: Macrob7 Macs CMS

受影响版本: 1.1.4f 及更早版本

技术细节

在我发现的 16 个实例中,用户输入在未进行适当清理或参数化的情况下被接收。例如,在此 CMS 的 "忘记密码" 功能中,会请求一个电子邮件地址。

Application/plugins/CMS/controllers/CMS.php:224

root@kitploit:~
    public function forgotPasswordProcess()
    {
      $this->loadModels();
      $emailAddress = Post::getByKey('emailAddress');

      $user = $this->usersModel->getUserByEmailAddress($emailAddress);

然后,电子邮件地址被传入方法 getUserByEmailAddress(),该方法将电子邮件传递给 selectSingle(),而 selectSingle() 是一个未能适当防范注入 SQL 查询的方法。

Application/plugins/CMS/models/Users_Model.php:41

root@kitploit:~
    public function getUserByEmailAddress($emailAddress)
    {
       return $this->selectSingle( $this->getCMSTableNameUsers(), array('EmailAddress'=>$emailAddress));
    }

接着,selectSingle() 使用传入的用户输入调用 select()。

Application/core/DB.php:200

root@kitploit:~
    public function selectSingle($tableName, array $where = array(), array $fields = array('*'))
    {
      $return = $this->select($tableName, $where, $fields);

      $single = NULL;

      if( count($return) > 0 )
        $single = $return[0];

      return $single;
    }

有漏洞的 select() 函数将传入的参数拼接成一个 SQL 查询,随后执行该查询。

Application/core/DB.php:186

root@kitploit:~
    public function select($tableName, array $where = array(), array $fields = array('*'))
    {      
      $fieldsString = $this->generatePair($fields, ',');
      $whereString = $this->generateKeyValuePair($where, '=', 'AND');

      $sql = 'SELECT '.$fieldsString.' FROM '.$tableName;

      if($whereString !='')
        $whereString = ' WHERE '.$whereString;

      $sql = $sql.' '.$whereString.';';     
      return $this->execute($sql)->fetchAll($this->returnType, $this->className);
    }

由于缺乏输入清理、验证和参数化,此函数仍然容易受到 SQL 注入攻击。

缓解措施

不幸的是,此 CMS 缺乏维护意味着无法获得修补后的更新。个别用户可能会修改代码以包含参数化的 SQL 查询,而不是依赖拼接将用户输入传递给数据库。预编译语句(Prepared Statements)是实现这一缓解措施的示例。

下载工具