目录

上传非php后缀文件走php解析

文件上传的题目很多都会对上传文件的后缀有限制,然后就不走 php 的解析了,这种情况下可以通过在项目文件夹下面创建配置文件的形式绕过。

.htaccess

.htaccess(hypertext access) 文件在站点的根目录下,不是在 apache 目录下,但是它属于 apache 的配置文件,可以帮助我们实现:网页 301 重定向、自定义 404 错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能。

其中 .htaccess 文件中可以设置 SetHandler application/x-http-php,使得当前目录所有文件都使用php解析,那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。不符合规则则报错

利用前提

在 apache 的配置文件 http.conf 中,需要设置 AllowOverride All 才能使用 .htaccess 文件:

https://pics.kdxcxs.com:4433/images/2022/08/24/20220824214606.png

利用

<FilesMatch "\.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>

.user.ini

.htaccess 有所不同,.user.ini 文件不再被局限于 apache 服务器,不管是 nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。

php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEMPHP_INI_PERDIRPHP_INI_ALLPHP_INI_USER。 在此可以查看:http://php.net/manual/zh/ini.list.php 这几种模式有什么区别?看看官方的解释:

https://pics.kdxcxs.com:4433/images/2022/08/24/20220824215231.png

同时,.user.ini 是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

主要能被题目运用的是 auto_append_fileauto_prepend_file 两个配置项,前者可以通过指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了 require() 函数。而 auto_append_file 类似,只是在文件后面包含。 使用方法很简单,直接写在 .user.ini 中:

auto_prepend_file=01.gif

利用前提

不过这个方法也有一个前提条件是含有 .user.ini 的文件夹下需要有正常的 php 文件,否则也不能包含了。

利用

https://pics.kdxcxs.com:4433/images/2022/08/24/20220824215809.png

reference