0x01 .user.ini分析
原靶场环境更新,在04关后更新了一关,从05关以后,所有的关卡都是往后推了一关。
这一关和04传.htaccess文件相似,过滤了.htaccess没有过滤.user.ini。
从上一关,可以知道.htaccess可以覆盖apache的配置文件,而.user.ini则可以覆盖php.ini的配置。
这里有几点需要注意一下:
.htaccess文件只能用于apahce,不能用于iis和nginx等中间件.user.ini只能用于Server API为FastCGI模式下,而正常情况下apache不是运行在此模块下的。.htaccess和.user.ini都只能用于访问本目录下的文件时进行覆盖。
但是.user.ini也不是能修改任何php.ini的属性的,php.ini的属性设置可分为四大类
PHP_INI_USER 可在用户脚本(例如 ini_set())或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定
PHP_INI_PERDIR 可在 php.ini,.htaccess 或 httpd.conf 中设定
PHP_INI_SYSTEM 可在 php.ini 或 httpd.conf 中设定
PHP_INI_ALL 可在任何地方设定
这些模式决定着一个 PHP 的指令在何时何地,是否能够被设定。手册中的每个指令都有其所属的模式。例如有些指令可以在 PHP 脚本中用 ini_set() 来设定,而有些则只能在php.ini或httpd.conf中。例如 output_buffering指令是属于PHP_INI_PERDIR,因而就不能用ini_set()来设定。但是display_errors指令是属于PHP_INI_ALL因而就可以在任何地方被设定,包括ini_set()。
但是,实际上,只要不是PHP_INI_SYSTEM模式下的属性,均可以在.user.ini中设置,有点坑。
具体可以查看PHP官网。https://www.php.net/manual/zh/ini.list.php

这两个都可以使用,属于php中的自动包含文件功能,append是文件执行后包含,prepend是文件执行前包含。
那么就可以利用这两个设置来实现上传.user.ini来加载文件进行包含
0x02 Pass-05 关卡
首先调整为FastCGI模式,我这里是改成了nginx+php

接着传入.user.ini,内容为auto_prepend_file=1.gif

上传成功后,再上传php文件,将文件名改为1.gif,接着访问上传成功后的1.gif

会现在解析图片错误,是因为只有在访问php文件时,才会自动包含1.gif,所以作者给了提示在上传目录下是有一个readme.php文件的,所以直接访问此文件就可以包含上传的shell了

转载:https://blog.csdn.net/u014029795/article/details/117252533