file_include(江苏工匠杯)

题目攻防世界 (xctf.org.cn)

 

<?php
highlight_file(__FILE__);
    include("./check.php");
    if(isset($_GET['filename'])){
        $filename  = $_GET['filename'];
        include($filename);
    }
?>

文件包含:开发人员一般会把重复使用的函数写到单个文件中,当需要使用这个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。那正常来说包含的文件是固定的、写死的就不会存在文件包含漏洞,但是这样的话又不够便捷,所以开发人员为了使代码调用更加灵活,就会将被包含的文件设置为变量,用来进行动态调用。但正是由于这种灵活性,允许用户从客户端提交一个变量值来作为文件包含的变量值,当这个值是段恶意代码时,并且服务端又没有对用户的输入进行一个很好的过滤,就会造成文件包含漏洞。

 实现文件包含功能的函数:include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readline。

本题利用filename参数带一段恶意代码进去,然后include函数执行恶意代码进而找到flag。不过会遇到很多过滤,要想办绕过去。

源码分析:

没什么好说的

简单补充一下:

  1.  "  .  "  表示当前目录
  2.   "  ..  "  表示当前目录的上一级目录。
  3.   "  ./  "  表示当前目录下的某个文件或文件夹,视后面跟着的名字而定
  4.   "  ../  "   表示当前目录上一级目录的文件或文件夹,视后面跟着的名字而定

 URL 链接中 井号#、问号?、连接符& 分别有什么作用?_url里的问号-CSDN博客

 文件包含一般都想到伪协议

伪协议种类
php://input:用于访问请求的原始POST数据。这在处理非表单编码的数据(如JSON、XML等)时非常有用。
php://output:用于将数据写入输出流,通常用于动态生成文件或发送数据到客户端。
php://filter:用于对读取的数据应用一系列过滤器。例如,你可以使用此伪协议来读取并转换文件的编码或进行压缩/解压缩操作。
file://:用于访问本地文件系统中的文件。通过此伪协议,你可以直接操作本地文件,如读取、写入等。
http:// 和 https://:用于发送HTTP请求并获取远程资源的内容。这可以用于获取远程网页的HTML内容或发送POST请求等。
ftp://:用于访问和操作FTP服务器上的文件。通过此伪协议,你可以实现与FTP服务器的交互,如上传、下载、删除文件等

PHP 伪协议详解-CSDN博客

PHP伪协议总结 - 个人文章 - SegmentFault 思否

五种常见的php伪协议-CSDN博客

尝试一些poc

filename=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=

是一个 data: URL,它用于嵌入小文件内容在URLs中。这里的内容是Base64编码的,并且表示一个文本文件。

  • data: - 表示这是一个data URL。
  • text/plain - 表示文件的内容是纯文本。
  • base64 - 表示接下来的内容是用Base64编码的。

Base64编码的内容 PD9waHAgc3lzdGVtKCJscyIpPz4= 解码后是 <?php system("ls");?>

php://filter,用于读取源码,?filename=php://filter/read=convert.base64/resource=/etc/passwd

URL 参数表示尝试通过 PHP 的 php://filter 流来读取 /etc/passwd 文件的内容,并将内容以 Base64 编码的形式返回。这里,/etc/passwd 是一个常见的 Unix/Linux 系统文件,它包含了系统上所有用户的基本信息。

用 convert.iconv.[]过滤器绕过,[]中支持以下字符编码(* 表示该编码也可以在正则表达式中使用)

UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
...
\\具体支持的编码可见php官方文档
\\https://www.php.net/manual/zh/mbstring.supported-encodings.php

依次遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值