写在前面

因为看了朋友的一篇分析又回头想了想自己去年遇到的这个纠结的问题。

去年写过一篇phpmyadmin后台文件包含的文章,写的非常的草草,并没有分析的过程,只是把自己的问题记了下来。当时纠结于最后一步能通过两次urlencode问号就能再跨出路径了呢,

payload:

db_sql.php%253f/../../../../../../windows/system.ini  

回头来看其实很容易理解,之前也看到了一篇RPO攻击,里面的路径有点相似,也让我回头来,理解了这个payload。

当时虽然我放上来别人的图片作为我的问题的解答

其实当时看错了一个地方,导致最后的分析钻了牛角尖。

关键的代码在于最后第一个urldecode出了问题

$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}  

我们两次编码?后,浏览器解析一次%253f转化成%3f,然后这里又解析一次,转化成?,截断到前面的db_sql.php,使其符合了白名单。但是关键的是最后包含的是target,传入的参数,而不是两次urldecode的参数。

也就是包含的是

db_sql.php%3f/../../../../../../windows/system.ini  

为什么能包含成功呢。

这里的原理就是php将db_sql.php%3f 作为了一个目录,不管他是不是存在的,因为后面有../,会跨越到上级目录。

所以据我的分析,当php遇到这样的包含路径时,不会去检索这个目录是否会存在,只要后面存在../跨越目录,即直接包含后面的路径,直接将这个不存在的路径作为一个目录处理。

形象点比喻就是,执行者不管这个db_sql.php%3f是不是能走的路,他看到了../,他就不会走进这条路,直接按着接下来的路继续走(../../../../etc/passwd)。

再讲的能够理解点就是执行者将db_sql.php%3f/../看作了一个整体,看到了../,他就不管db_sql.php%3f是不是条路了。

这里实验如下,uploads/test.php  上层目录test.txt

其实就是将souce.php%3f作为了目录而已,进入然后跨两层就到了上层,然后读到test.txt

include fuzz

文件夹A中有a.php,b.php,上层目录B中有echoa.php

echoa.php
<?php
$a='php_test_heihei';
?>
a.php
<?php
include "b.php/../../echoa.php";
echo $a;  

测试特殊字符串:!@#$%^&*()-_ []{}<>~`+=,.;:/?|"'\ 

fuzz发现,只有出现?或者*时候,include会包含错误,输出不了$a。

其他的拼接特殊字符均可以完成目录穿越。include到echoa.php

结束

RPO攻击

是暑假时候通过郁离歌强网杯的WP了解到的RPO攻击,忘记写了,这里补上。

这里简单概述下记录下,Freebuf有篇讲的很详细的,放在文章下方链接处l。

什么是RPO?

RPO (Relative Path Overwrite)相对路径覆盖,作为一种相对新型的攻击方式,由 Gareth Heyes在2014年首次提出,利用的是nginx服务器、配置错误的Apache服务器和浏览器之间对URL解析出现的差异,并借助文件中包含的相对路径的css或者js造成跨目录读取css或者js,甚至可以将本身不是css或者js的页面当做css或者js解析,从而触发xss等进一步的攻击手段。

在什么情况下漏洞会触发

触发这个漏洞有两个基本的前提:

①Apache 配置错误导致AllowEncodedSlashes这个选项开启(对Apache来说默认情况下 AllowEncodedSlashes 这个选项是关闭的),或者nginx服务器。

②存在相对路径的js或者css的引用

第一个场景:加载任意目录下静态资源文件

对于第一个场景,服务端对url的解析,将%2f自动解码为/。而浏览器对url的解析,不认得%2f,服务器返回的页面后,在加载相对路径下的js时,浏览器将..%2f..%2fxxx当作一个文件,而不会解析为路径,所以链接到相对路径的js文件时,会跨目录,链接

第二个场景:将返回内容按静态文件解析(需要url-rewrite)

对于第二个场景,比如访问/index.php/view/article/98749/..%2F..%2F..%2F..%2Findex.php,服务器解析url,请求的时index.php,index.php下有一个外部脚本js链接,scr=1.js。客户端解析后,将..%2F..%2F..%2F..%2Findex.php当作一个文件,然后在当前目录链接1.js,即链接/index.php/view/article/98749/1.js(然而这是个98749.html文件,这里我的理解是,直接将这个页面当作1.js解析),并且不需要script标签,直接作为外部引入的js文件处理。因此可以结合xss漏洞利用。

 

参考链接:

https://www.freebuf.com/articles/web/166731.html

再看CVE-2018-12613 phpmyadmin后台文件包含&&RPO攻击的更多相关文章

  1. phpMyAdmin后台文件包含溯源

    先上大佬解释的漏洞原理链接 https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&mid=2247485036&idx=1&sn= ...

  2. cve-2018-12613-PhpMyadmin后台文件包含漏洞

    前言 刚开始复现这个漏洞的时候是在自己的本机上然后跟着大佬的复现步骤可是没有预期的结果最后看了另一篇文章 当时整个人都麻了            首先何为phpMyAdmin 根据官方的说明phpMy ...

  3. phpMyAdmin本地文件包含漏洞

    4 phpMyAdmin本地文件包含漏洞 4.1 摘要 4.1.1 漏洞简介 phpMyAdmin是一个web端通用MySQL管理工具,上述版本在/libraries/gis/pma_gis_fact ...

  4. phpmyadmin任意文件包含漏洞分析(含演示)

    0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...

  5. [CVE-2014-8959] phpmyadmin任意文件包含漏洞分析

    0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...

  6. CVE-2018-12613phpMyAdmin 后台文件包含漏洞分析

    一.    漏洞背景 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成 ...

  7. 浅谈CVE-2018-12613文件包含/buuojHCTF2018签到题Writeup

    文件包含 蒻姬我最开始接触这个 是一道buuoj的web签到题 进入靶机,查看源代码 <!DOCTYPE html> <html lang="en"> &l ...

  8. 再看ftp上传文件

    前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...

  9. [原题复现]HCTF 2018 Warmup(文件包含)

    HCTF 2018 Warmup 原题复现:https://gitee.com/xiaohua1998/hctf_2018_warmup 考察知识点:文件包含漏洞(phpmyadmin 4.8.1任意 ...

随机推荐

  1. 特征选择与稀疏学习(Feature Selection and Sparse Learning)

    本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...

  2. Windows下用Python你会几种copy文件的方法?

    1. [代码]1. os.system ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import os import temp ...

  3. STM32CubeMx——串口使用DMA收发

    用到的是DMA发送数据,接收还是普通的串口接收. 一.代码生成 1.按以前的方法设置好时钟和调试方式,这里就不多说了. 2.设置串口1. 3.在DMA Setting里点击Add添加USART1_TX ...

  4. Python python lamda 表达式

    '''关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 用匿名函数有个好处,因为函数没有名字,不必担心 ...

  5. 关于C#中Partial局部类型关键字的使用

    虽然之前在做Winform开发时候,经常遇到Partial关键字,但是最近在代码中看到使用Partial将同名类文件写在多个源文件中,因此想要记录下Partial的详细使用. Partial type ...

  6. Activiti网关--排他网关

    排他网关 1.什么是排他网关 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策. 当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分 ...

  7. Android | 教你如何用代码一键实现银行卡绑定

    前言   小编前面几期文章分别给大家介绍了用代码实现微笑抓拍.证件照DIY.拍照翻译的功能开发(链接见文章末尾),本次小编给大家带来的是用代码一键实现银行卡识别与绑定功能. 银行卡识别的应用场景    ...

  8. linux神器 strace解析

    除了人格以外,人最大的损失,莫过于失掉自信心了. 前言 strace可以说是神器一般的存在了,对于研究代码调用,内核级调用.系统级调用有非常重要的作用.打算了一周了,只有原文,一直没有梳理,拖延症犯了 ...

  9. Git创建本地仓库&把pycharm项目添加GitHub仓库上

    一.创建本地仓库 1.1.下载Git地址:https://git-scm.com/downloads 下载完,一路next就可以 1.2.打开Git Bash输入: #创建一个learngit目录 $ ...

  10. Light of future-冲刺Day 2

    目录 归属班级 →2019秋福大软件工程实践Z班 作业要求 →团队作业第五次-项目冲刺 团队名称 未来之光 这个作业的目标 第二天的冲刺总结 作业正文 →Light of future-冲刺Day 2 ...