本篇博客主要介绍了BUUCTF上web题中文件上传部分的writeup,持续更新中!

[SUCTF 2019]CheckIn

writeup

本题主要考察了对.user.ini的使用

问题来了,什么是.user.ini

这得从php.ini说起了。php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEMPHP_INI_PERDIRPHP_INI_ALLPHP_INI_USER

在模式为PHP_INI_USER的配置项提到了.user.ini,那么这是个什么配置文件?

php配置项中有两个比较有意思的项(下图第一、四个):

auto_append_fileauto_prepend_file这两个配置是什么意思呢?

auto_prepend_file的意思是指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:

auto_prepend_file=01.gif

这样的活在访问同目录下的.php后缀的文件时就会把01.gif包含进去

所以,.user.ini的利用条件如下:

  1. 服务器脚本语言为PHP
  2. 服务器使用CGI/FastCGI模式
  3. 上传目录下要有可执行的php文件

废话少说,开始解题!

首先先上传一个.user.ini文件

再上传一个图片马,为了测试先写个phpinfo()

访问目录下的index.php,成功返回

上传一句话,蚁剑连,发现根目录/flag,成功解题

BUUCTF上有源码,分析一波

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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)) { //黑名单,对ph和htacess忽略大小写过滤
die("illegal suffix!");
}
if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) { //读取文件,过滤<?,用<script language='php'><script/>绕过
die("&lt;? in contents!");
}
$image_type = exif_imagetype($tmp_name); //文件头检测,加GIF89a绕过
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));
}

[ACTF2020 新生赛]Upload

查看源码发现可以上传,将鼠标移到中间就可以上传了

前端有js检验,直接上传图片马改后缀名,上传php可以大小写,但不能成功解析,php3,php5也不能解析

最后发现phtml可以解析,getshell后在上传上层目录发现.htaccess

1
2
3
<FilesMatch \.phtml$>
SetHandler application/x-httpd-php
</FilesMatch>

评论