了解cgi/fast-cgi/php-cgi/php-fpm

栏目: PHP · 发布时间: 6年前

内容简介:即Common Gateway Interface 公共网关接口,是协议!!!运行在服务器上的程序,fork-and-execute 模式,因为web服务器只能处理静态html/css,需要动态的就要交给cgi,有标准输入,输出和环境变量的语言都可以编写,如C,PHP,python,shell,perl等。

0x00 什么是cgi

即Common Gateway Interface 公共网关接口,是协议!!!

运行在服务器上的程序,fork-and-execute 模式,因为web服务器只能处理静态html/css,需要动态的就要交给cgi

,有标准输入,输出和环境变量的语言都可以编写,如C,PHP,python,shell,perl等。

//网上找的两张图,比较直观描述了cgi.

了解cgi/fast-cgi/php-cgi/php-fpm

了解cgi/fast-cgi/php-cgi/php-fpm

cgi通过环境变量获得传递的参数,相关环境变量如下:

环境变量          意义
SERVER_NAME CGI脚本运行时的主机名和IP地址.
SERVER_SOFTWARE 你的服务器的类型如: CERN/3.0 或 NCSA/1.3.
GATEWAY_INTERFACE 运行的CGI版本. 对于UNIX服务器, 这是CGI/1.1.
SERVER_PROTOCOL 服务器运行的HTTP协议. 这里当是HTTP/1.0.
SERVER_PORT 服务器运行的TCP口,通常Web服务器是80.
REQUEST_METHOD POST 或 GET, 取决于你的表单是怎样递交的.
HTTP_ACCEPT 浏览器能直接接收的Content-types, 可以有HTTP Accept header定义.
HTTP_USER_AGENT 递交表单的浏览器的名称、版本 和其他平台性的附加信息。
HTTP_REFERER 递交表单的文本的 URL,不是所有的浏览器都发出这个信息,不要依赖它
PATH_INFO 附加的路径信息, 由浏览器通过GET方法发出.
PATH_TRANSLATED 在PATH_INFO中系统规定的路径信息.
SCRIPT_NAME 指向这个CGI脚本的路径, 是在URL中显示的(如, /cgi-bin/thescript).
QUERY_STRING 脚本参数或者表单输入项(如果是用GET递交). QUERY_STRING 包含URL中问号后面的参数.
REMOTE_HOST 递交脚本的主机名,这个值不能被设置.
REMOTE_ADDR 递交脚本的主机IP地址.
REMOTE_USER 递交脚本的用户名. 如果服务器的authentication被激活,这个值可以设置。
REMOTE_IDENT 如果Web服务器是在ident (一种确认用户连接你的协议)运行, 递交表单的系统也在运行ident, 这个变量就含有ident返回值.
CONTENT_TYPE 如果表单是用POST递交, 这个值将是 application/x-www-form-urlencoded. 在上载文件的表单中, content-type 是个 multipart/form-data.
CONTENT_LENGTH 对于用POST递交的表单, 标准输入口的字节数.

0x01 什么是fast-cgi

cgi进程管理器,cgi升级版,也是一个协议。将cgi保存在内存中以提高性能(不用像cgi一样每次请求都解析php.ini)。可独立于服务器。

工作原理:

1. Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

2. FastCGI进程管理器自身(master)初始化,解析配置文件,初始化执行环境,启动多个CGI解释器进程(可见多个php-cgi/worker)并等待来自Web Server的连接。

3. 当客户端请求到达Web Server时,FastCGI进程管理器(master)选择并连接到一个CGI解释器(worker)。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了)

当worker不够用时,master可以根据配置预先启动几个worker等着,同时如果发现空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源

而对应的是,只要是遵循了这个协议标准实现的程序,就可以称之为FastCGI程序

这就是fastcgi的对进程的管理。

0x02 什么是php-cgi

cgi解释器进程,解释 PHP 脚本。

0x03 什么是php-fpm

PHP fast-cgi,对fast-cgi的PHP实现,可调度php-cgi进程。可以平滑重载配置。

0x04 cgi安全问题

1. shellsock

参考 重温经典:shellshock漏洞重现及分析

2. 解析漏洞

环境:vulhub

以nginx为例进行重现:

判断漏洞,在任意图片后加/xxx.php

了解cgi/fast-cgi/php-cgi/php-fpm

了解cgi/fast-cgi/php-cgi/php-fpm

图片被解析

在上传图片马即可(尝试phpinfo):

了解cgi/fast-cgi/php-cgi/php-fpm

更多解析漏洞参考:

解析漏洞总结

0x05 结语

时不时还能看到cgi-bin,整理下相关概念,不至于太混乱。

0x06 参考资料

https://www.jdon.com/idea/cgi.htm

https://www.zhihu.com/question/19998865

www.nowamagic.net/librarys/veda/detail/1319

www.cnblogs.com/wanghetao/p/3934350.html

https://segmentfault.com/q/1010000000256516

www.cnblogs.com/LittleHann/p/4561462.html

https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java语言程序设计

Java语言程序设计

(美) Y. Daniel Liang / 李娜 / 机械工业出版社 / 2011-6 / 75.00元

本书是Java语言的经典教材,多年来畅销不衰。本书全面整合了Java 6的特性,采用“基础优先,问题驱动”的教学方式,循序渐进地介绍了程序设计基础、解决问题的方法、面向对象程序设计、图形用户界面设计、异常处理、I/O和递归等内容。此外,本书还全面且深入地覆盖了一些高级主题,包括算法和数据结构、多线程、网络、国际化、高级GUI等内容。 本书中文版由《Java语言程序设计:基础篇》和《Java语......一起来看看 《Java语言程序设计》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具