在文件上传靶场upload-labs 第四关 第五关 用到了配置文件 .htaccess和.user.ini
在一些ctf 文件上传题目中也经常会用到这两个配置文件,那么这两个配置文件有什么作用呢
.htaccess
.htaccess文件是Apache服务中的一个配置文件,它负责相关目录下的网页配置
通过htaccess文件,可以实现:网页301重定向,自定义404错误页面,改变文件扩展名,允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能
一般在文件上传的题目中 .htaccess 配置文件作用是用来解析执行非php文件中的php代码
文件上传题目中.htaccess配置文件内容一般如下
<FilesMatch "muma.jpg"> //上传的文件名
SetHandler application/x-httpd-php
</FilesMatch>
SetHandler application/x-http-php的意思是,对于名为 muma.jpg
的文件,Apache 将其作为一个 PHP 脚本来处理,当做PHP代码执行
当一些情况下代码对上传文件的后缀进行限制,而又没有禁止htaccess,就可以把一句话木马文件后缀修改为jpg png gif 等图片文件的后缀再上传,然后上传.htaccess文件(这里上传的顺序是无所谓的),即可不上传php后缀文件又能执行php代码
所以配合.htaccess文件就可以绕过题目过滤的一些后缀名
.user.ini
上面说的.htaccess是apache配置文件
而.user.ini不仅限于 Apache 服务器,同样适用于 Nginx 和 IIS 服务器,适用范围更广,只要服务器启用了 fastcgi 模式(在phpstudy中切换为 nts 模式即可让.user.ini配置文件生效)
php.ini是php默认的配置文件,其中包括了很多php的配置信息选项,而.user.ini实际上就是一个可以由用户自定义的php.ini
.user.ini 文件内容在文件上传题目中大部分是如下的格式:
auto_prepend_file = 文件名 //包含在文件头
或者
auto_append_file = 文件名 //包含在文件尾
作用相当于在可执行的php文件 最开始或者最末尾 调用require()函数包含写入的文件
当访问可执行文件时,就会包含写入的文件,解析执行其中的php代码
限制条件
虽然.user.ini 配置文件适用范围更广,但是在文件上传题目中也有更多的限制
在.user.ini中使用上面的配置信息目的是
在同目录下的其他可解析php代码的.php文件中包含配置信息中所指定的文件,也就是说需要在.user.ini所属的目录下存在后缀为.php的可执行文件才能让命令生效
在文件上传题目中也就是文件上传后保存的路径中需要存在可执行的php文件才能利用.user.ini
例如upload-labs 第5关,在上传的路径uploads目录下存在readme.php文件
存在php文件并且可以执行,这样上传.user.ini文件保存到这个目录之后就可以让.user.ini中的auto_prepend_file 或者 auto_append_file 命令生效完成文件包含然后解析其中的php代码
参考