当前位置: 首页 > 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.dtcms.com/a/277908.html

相关文章:

  • SOMEIP协议与测试
  • LeetCode 2401.最长优雅子数组
  • C++数组指针与函数指针
  • 为什么要有延时回调?
  • 2024-2025-2 山东大学《软件工程与实践》期末(回忆版)
  • p4 大小写检查
  • C++高级编程,类模版成员函数类外实现
  • windows10如何安装vue开发环境
  • JAVA-springboot 整合Activemq
  • ECU(电子控制单元)是什么?
  • C++中顶层const与底层const
  • JSX 语法
  • 【前端知识】移动端APP原生应用与H5交互底层逻辑
  • Dubbo跨越分布式事务的最终一致性陷阱
  • 有效感受野(ERF)可视化工具
  • hash表的模拟--开放定址法
  • 如何将本地代码同步到远程Github仓库
  • 【Docker基础】Dockerfile指令速览:环境与元数据指令详解
  • OSPF与BGP的联动特性
  • Utils系列之内存池(MultiSizePool)
  • 【MLLM】多模态理解GLM-4.1V-Thinking模型
  • OpenVela 日志系统:从配置到落地的实操手册
  • Python装饰器(自定义装饰器和3个内置装饰器)
  • Java反射机制深度解析
  • 树莓派5-ollama-linux-arm64.tgz 下载
  • AEC线性处理
  • 在 OCI 生成式 AI 上搭一个「指定地区拉面店 MCP Server」——从 0 到 1 实战记录
  • 《数据库》MySQL事务
  • gcc 源码阅读--C语言预处理
  • (一)SAP Group Reporting (GR) 集团财务合并解决方案套件概述