Upload-labs Pass-05 .user.ini文件上传

0x01 .user.ini分析

原靶场环境更新,在04关后更新了一关,从05关以后,所有的关卡都是往后推了一关。

这一关和04.htaccess文件相似,过滤了.htaccess没有过滤.user.ini

从上一关,可以知道.htaccess可以覆盖apache的配置文件,而.user.ini则可以覆盖php.ini的配置。

这里有几点需要注意一下:

  • .htaccess文件只能用于apahce,不能用于iisnginx等中间件
  • .user.ini只能用于Server APIFastCGI模式下,而正常情况下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.inihttpd.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
Upload-labs Pass-05 .user.ini文件上传_第1张图片
这两个都可以使用,属于php中的自动包含文件功能,append是文件执行后包含,prepend是文件执行前包含。

那么就可以利用这两个设置来实现上传.user.ini来加载文件进行包含


0x02 Pass-05 关卡

首先调整为FastCGI模式,我这里是改成了nginx+php
Upload-labs Pass-05 .user.ini文件上传_第2张图片
接着传入.user.ini,内容为auto_prepend_file=1.gif
Upload-labs Pass-05 .user.ini文件上传_第3张图片
上传成功后,再上传php文件,将文件名改为1.gif,接着访问上传成功后的1.gif
Upload-labs Pass-05 .user.ini文件上传_第4张图片
会现在解析图片错误,是因为只有在访问php文件时,才会自动包含1.gif,所以作者给了提示在上传目录下是有一个readme.php文件的,所以直接访问此文件就可以包含上传的shell
Upload-labs Pass-05 .user.ini文件上传_第5张图片

你可能感兴趣的:(.user.ini)