上传非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
文件:
利用
<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_SYSTEM
、PHP_INI_PERDIR
、PHP_INI_ALL
、PHP_INI_USER
。 在此可以查看:http://php.net/manual/zh/ini.list.php 这几种模式有什么区别?看看官方的解释:
同时,.user.ini
是一个能被动态加载的ini文件。也就是说我修改了.user.ini
后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl
所设置的时间(默认为300秒),即可被重新加载。
主要能被题目运用的是 auto_append_file
和 auto_prepend_file
两个配置项,前者可以通过指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了 require()
函数。而 auto_append_file
类似,只是在文件后面包含。 使用方法很简单,直接写在 .user.ini
中:
auto_prepend_file=01.gif
利用前提
不过这个方法也有一个前提条件是含有 .user.ini
的文件夹下需要有正常的 php 文件,否则也不能包含了。