文件上传-配置文件 (.htaccess和.user.ini)

在文件上传靶场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代码

参考

[文件上传]浅析.[文件上传]浅析.

### .user.ini 文件的作用 `.user.ini` 是 PHP 提供的一种用户级配置文件,允许开发者针对特定目录设置一些 PHP 配置选项。它类似于全局 `php.ini` 文件的功能,但其作用范围仅限于当前目录及其子目录。 #### 主要特点 - `.user.ini` 文件只适用于 CGI/FastCGI SAPI 环境[^5]。 - 它不会影响以模块形式运行在 Apache 中的 PHP 设置;在这种情况下,通常使用 `.htaccess` 来实现类似的配置功能。 - 只有部分可变项可以在 `.user.ini` 文件中更改,具体取决于 `PHP_INI_PERDIR` 或 `PHP_INI_USER` 类型的指令列表[^3]。 --- ### 配置方法 为了使 `.user.ini` 文件生效,需满足以下几个条件: 1. **启用相关配置** - 确保 `php.ini` 中启用了 `user_ini.filename` `user_ini.cache_ttl` 参数。 ```ini user_ini.filename = ".user.ini" user_ini.cache_ttl = 300 ``` 这里的 `user_ini.filename` 指定了用户自定义 ini 文件的名字,默认为 `.user.ini`,而 `user_ini.cache_ttl` 则表示缓存时间(单位秒),在此期间内不重新加载该文件的内容。 2. **创建并编辑 .user.ini 文件** 将目标配置写入到 Web 应用程序根目录下的 `.user.ini` 文件中。例如: ```ini auto_prepend_file = "/path/to/prepend.php" display_errors = On error_reporting = E_ALL & ~E_NOTICE upload_max_filesize = 8M post_max_size = 16M ``` 3. **注意事项** - 不同于 `php.ini`,`.user.ini` 文件中的每一行只能包含一条单一配置语句,并且不允许存在分号 (`;`) 开头的注释[^4]。 - 如果需要动态调整某些行为,比如强制所有页面顶部引入某个脚本,可以借助 `auto_prepend_file` 实现。 --- ### 示例代码 假设希望让所有访问网站的请求先通过一段安全检测逻辑,则可在项目根目录放置如下内容的 `.user.ini` 文件: ```ini auto_prepend_file = "security_check.php" ``` 接着编写名为 `security_check.php` 的文件用于实际的安全验证操作: ```php <?php if (!isset($_SERVER['HTTP_X_AUTH'])) { http_response_code(403); echo 'Access Denied'; exit; } ?> ``` 上述例子展示了如何利用 `.user.ini` 自动附加额外处理流程至每一个 PHP 脚本执行之前。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值