你是否只知道htaccess但是不知道.user.ini
回到家,iPad开机,打开大佬的文章,开卷。每当触碰到我的知识盲区,我就想研究一番
相信很多人都知道.htaccess,简单理解就是它能影响当前目录以及子目录的配置,它存放着Apache服务器配置相关的一些指令,我们经常利用它令Apache将图片格式的webshell当做脚本文件解析,达到绕过文件上传限制的目的。 微信公众号:小惜渗透,欢迎大佬一起交流进步
1. .user.ini简介
接下来我们来了解一下.user.ini,.user.ini是php的一种配置文件,众所周知php.ini是php的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置
去官方看一下简介[color=var(--a-color)]https://www.php.net/manual/zh/configuration.file.per-user.php
从官方的简介中提取以下内容:
还有一句话是在.user.ini风格的INI文件中只有具有PHP_INI_PERDIR和PHP_INI_USER模式的INI设置可被识别。
什么是PHP_INI_PERDIR和PHP_INI_USER呢?
具体它们能修改什么配置看官方的这个表一目了然 [color=var(--a-color)]https://www.php.net/manual/zh/ini.list.php
遍历相关配置,发现有两个我们可以利用,并且还符合模式条件,auto_prepend_file和auto_append_file
它们的功能就是说白了就是文件包含,不过一个插入到文件最前,一个是插入到最后,这样的话如果我们准备一png格式的webshell,利用这种方式就可以将文件包含到一个php脚本文件里,目的就达到了。
2. 利用演示
这里用一到ctf举例[SUCTF 2019]CheckIn1
上来一个文件上传,尝试传文件
后缀名不行,先改成jpg试试
不让包含<?,这个没关系可以用<script language='php'></scirpt>来绕过
成功绕过,但是出现exif_imagetype,看来后端用了这exif_imagetype,这个我们可以加上图片内容头绕过
可以看到文件里面存在一个index.php,摆明了让我们利用文件包含呢,紧接着我们上传.user.ini文件, 用auto_prepend_file指明包含文件shell.jpg,由于exif_imagetype函数的限制,所以再上传.user.ini的时候也得加上图片内容头
上传成功后访问/uploads/c47b21fcf8f0bc8b3920541abd8024fd路径下的index.php,就获取到了flag
总结一下,这个在实战中遇到的也少,但是还是有几率碰到的,所以当扩充知识面了。 |