user

发布时间 2023-05-24 16:43:43作者: vaneshadow

.htaccess

httpd-conf 是 Apache 的系统配置文件,一个全局的配置文件,对整个 web 服务起作用;而.htaccess 也是 Apache 的配置文件,不过相当于一个局部配置文件,只对该文件所在目录下的文件起作用。

实例

在绕过文件上传的限制中,通常在 Apache 全局配置文件 httpd.conf 中有这样一条配置:

AddType application/x-httpd-php .php .phtml

这条配置的意思就是将.php、.phtml 文件后缀的文件当做 php 文件执行,如果开启了这条配置,就可以上传.phtml 文件在执行 php 代码,这也就是为什么在文件上传时可以尝试上传.phtml,不过在高版本中这条配置默认是关闭的,也就是只能解析.php 文件后缀。

或者这条配置:

SetHandler application/x-httpd-php

将所有文件都解析为 php 文件。

通常全局文件我们都是不可更改的,而 Apache 还有一个局部配置文件.htaccess,这个配置文件只对该目录所在的 web 目录起作用,例如:我们在 www 目录下有一个.htaccess 配置文件,配置内容为 AddType application/x-httpd-php .jpg ,将 jpg 文件当做 PHP 文件解析。这样就可以直接解析 jpg 后缀的 webshell。

// .htaccess
AddType application/x-httpd-php .jpg


// 1.jpg
<?php phpinfo();?>

访问 1.jpg,当做 PHP 解析。

局限

.htaccess 配置文件只在 Apache 服务器中起作用。

.user.ini

php.ini 是 php 的一个全局配置文件,对整个 web 服务起作用;而.user.ini 和.htaccess 一样是目录的配置文件,.user.ini 就是用户自定义的一个 php.ini,通常用这个文件来构造后门和隐藏后门。

实例

php 配置项中有两个配置可以起到一些作用

auto_prepend_file = <filename>         //包含在文件头auto_append_file = <filename>          //包含在文件尾

这两个配置项的作用相当于一个文件包含,比如

// .user.iniauto_prepend_file = 1.jpg// 1.jpg<?php phpinfo();?>// 11.php

也就是在一个目录下有.user.ini 这个配置文件,配置内容为上,有 1.jpg,同时该目录下还需要有.php 后缀的文件,auto_prepend_file = 1.jpg 这个配置的意思就是在当前目录下的.php 文件包含 1.jpg 这个图片,在此处相当于在 11.php 文件头插入了 require('1.jpg') 这条语句,也就是说相当于文件包含。
另一条配置包含在文件尾,如果遇到了 exit 语句的话就会失效。

.user.ini 使用范围很广,不仅限于 Apache 服务器,同样适用于 Nginx 服务器,只要服务器启用了 fastcgi 模式 (通常非线程安全模式使用的就是 fastcgi 模式)。

局限

在.user.ini 中使用这条配置的使用也说了是在同目录下的其他.php 文件中包含配置中所指定的文件,也就是说需要该目录下存在.php 文件,通常在文件上传中,一般是专门有一个目录用来存在图片,可能小概率会存在.php 文件。

但是有时可以使用 ../ 来将文件上传到其他目录,达到一个利用的效果。