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