IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 一次代码审计的笔记(CVE-2018-12613 phpmyadmin文件包含漏洞) -> 正文阅读

[PHP知识库]一次代码审计的笔记(CVE-2018-12613 phpmyadmin文件包含漏洞)


前言

看了一下上次写博客都是20天前的事了,最近要打工去了,学习的少了很多,前两天玩了一下vulhub靶场的phpmyadmin文件包含漏洞(CVE-2018-12613)但是有些不理解,通过抽出时间的百度和理解,写一下笔记,别到时候忘记了


漏洞描述

攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞。该漏洞来自一部分代码,其中页面在phpMyAdmin中被重定向和加载,

以及对白名单页面进行不正确的测试。 攻击者必须经过身份验证,但在这些情况下除外:

$ cfg [‘AllowArbitraryServer’] =
true:攻击者可以指定他/她已经控制的任何主机,并在phpMyAdmin上执行任意代码; $ cfg [‘ServerDefault’]
= 0:这会绕过登录并在没有任何身份验证的情况下运行易受攻击的代码。

漏洞影响范围?

phpMyAdmin 4.8.0和4.8.1

漏洞分析

查看index.php的50行到63行内容

target_blacklist = array (
    'import.php', 'export.php'
);  #定义了一个黑名单

// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])   #要求target不为空
    && is_string($_REQUEST['target'])   #要求target为字符串
    && ! preg_match('/^index/', $_REQUEST['target'])  #要求target不已index开头
    && ! in_array($_REQUEST['target'], $target_blacklist)  #要求target不存在黑名单中
    && Core::checkPageValidity($_REQUEST['target'])   #checkPageValidity要为真
) {
    include $_REQUEST['target'];				#以上五个条件达成即可包含文件
    exit;
}

前四个条件是很容易达成的,就是第五个条件麻烦了点

查看Coer.php的443行到476行

public static function checkPageValidity(&$page, array $whitelist = [])
    {
        if (empty($whitelist)) {
            $whitelist = self::$goto_whitelist;  #初始化白名单
        }
        if (! isset($page) || !is_string($page)) {
            return false;       #判断出入的参数为空或者不为字符串则返回false
        }

        if (in_array($page, $whitelist)) {
            return true;   #判断传入的参数存在白名单内,则返回true
        }
		#如果这里返回false就执行以下代码
        $_page = mb_substr(
            $page,
            0,
            mb_strpos($page . '?', '?')   #截取传入参数开始到?中间的字符串
        );
        if (in_array($_page, $whitelist)) {
            return true;  #再次进行判断存在白名单内就返回true
        }
		#如果这里还返回了false就执行以下代码
        $_page = urldecode($page); #这个漏洞主要的触发就在这里,这里进行了一次url解码
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . '?', '?')  #截取传入参数开始到?中间的字符串
        );
        if (in_array($_page, $whitelist)) {
            return true;   #判断传入的参数存在白名单内,则返回true
        }
		#如果这里返回false就直接返回false
        return false;
    }

白名单在core.php的31行到79行

public static $goto_whitelist = array(
        'db_datadict.php',
        'db_sql.php',
        'db_events.php',
        'db_export.php',
        'db_importdocsql.php',
        'db_multi_table_query.php',
        'db_structure.php',
        'db_import.php',
        'db_operations.php',
        'db_search.php',
        'db_routines.php',
        'export.php',
        'import.php',
        'index.php',
        'pdf_pages.php',
        'pdf_schema.php',
        'server_binlog.php',
        'server_collations.php',
        'server_databases.php',
        'server_engines.php',
        'server_export.php',
        'server_import.php',
        'server_privileges.php',
        'server_sql.php',
        'server_status.php',
        'server_status_advisor.php',
        'server_status_monitor.php',
        'server_status_queries.php',
        'server_status_variables.php',
        'server_variables.php',
        'sql.php',
        'tbl_addfield.php',
        'tbl_change.php',
        'tbl_create.php',
        'tbl_import.php',
        'tbl_indexes.php',
        'tbl_sql.php',
        'tbl_export.php',
        'tbl_operations.php',
        'tbl_structure.php',
        'tbl_relation.php',
        'tbl_replace.php',
        'tbl_row_action.php',
        'tbl_select.php',
        'tbl_zoom_select.php',
        'transformation_overview.php',
        'transformation_wrapper.php',
        'user_password.php',

playload:index.php?target=sql.php%253f/…/…/…/…/…/…/…/…/etc/passwd

解释:target=sql.php%253f 在服务器收到url时进行一次解码,变成?target=sql.php%3f ;再通过urldecode时,在进行一次url解码,变成?target=sql.php?,符合?之前的在白名单中。所以就绕过了checkPageValidity()方法。


总结

这里虽然说进行了过滤判断,但是他对我们最先传入的值一直没有改变,所以造成任意文件包含的漏洞的发生。
以上就是我对这个漏洞的理解,如有不对之处,也请大家指出
说一下自己的问题,虽然是写出了笔记,但是在代码审计过程中,还是有很多函数是不懂的,接下来得来学习php和java以便日后做代码审计,这也是我第一个代码审计的文章,没写清楚和不对之处就请大家之处了!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:24:47  更:2022-08-06 10:24:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年3日历 -2024/3/29 15:43:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码