首页 > 编程语言 >PHP-CGI远程代码执行漏洞(CVE-2012-1823)

PHP-CGI远程代码执行漏洞(CVE-2012-1823)

时间:2024-04-06 15:23:12浏览次数:24  
标签:CGI cgi php sapi 执行 PHP 代码执行 CVE fastcgi

影响版本: php < 5.3.12 or php < 5.4.2

cgi、fastcgi、fpm

下载PHP源码,可以看到其中有个目录叫sapi。sapi在PHP中的作用,类似于一个消息的“传递者”

最常见的sapi应该是用于Apache的mod_php,这个sapi用于php和apache之间的数据交换

php-cgi也是一个sapi。在远古的时候,web应用的运行方式很简单,web容器接收到http数据包后,拿到用户请求的文件(cgi脚本),并fork出一个子进程(解释器)去执行这个文件,然后拿到执行结果,直接返回给用户,同时这个解释器子进程也就结束了。基于bash、perl等语言的web应用多半都是以这种方式来执行,这种执行方式一般就被称为cgi,在安装Apache的时候默认有一个cgi-bin目录,最早就是放置这些cgi脚本用的。

但cgi模式有个致命的缺点,众所周知,进程的创建和调度都是有一定消耗的,而且进程的数量也不是无限的。所以,基于cgi模式运行的网站通常不能同时接受大量请求,否则每个请求生成一个子进程,就有可能把服务器挤爆。于是后来就有了fastcgi,fastcgi进程可以将自己一直运行在后台,并通过fastcgi协议接受数据包,执行后返回结果,但自身并不退出。

php有一个叫php-cgi的sapi,php-cgi有两个功能,一是提供cgi方式的交互,二是提供fastcgi方式的交互。也就说,我们可以像perl一样,让web容器直接fork一个php-cgi进程执行某脚本;也可以在后台运行php-cgi -b 127.0.0.1:9000(php-cgi作为fastcgi的管理器),并让web容器用fastcgi协议和9000交互。

为什么php有两个fastcgi管理器?php确实有两个fastcgi管理器,php-cgi可以以fastcgi模式运行,fpm也是以fastcgi模式运行。但fpm是php在5.3版本以后引入的,是一个更高效的fastcgi管理器

简单理解PHP拥有两个sapicgifastcgi,其中fpm就是fastcgi下的一种运行方式,是一个更高效的fastcgi运行管理方式

漏洞原理

CVE-2012-1823就是php-cgi这个sapi出现的漏洞,上面介绍了php-cgi提供的两种运行方式:cgi和fastcgi,本漏洞只出现在以cgi模式运行的php中。

这个漏洞简单来说,就是用户请求的querystring被作为了php-cgi的参数,最终导致了一系列结果

漏洞利用

发现cgi模式下有如下一些参数可用:

  • -c 指定php.ini文件的位置
  • -n 不要加载php.ini文件
  • -d 指定配置项
  • -b 启动fastcgi进程
  • -s 显示文件源码
  • -T 执行指定次该文件
  • -h和-? 显示帮助
  1. 这里我们先启动vulhub的靶机环境
cd /vulhub/php/CVE-2012-1823
sudo docker-compose up -d


  1. 最简单的利用方式,当然就是-s,可以直接显示源码:

  2. 一个更好的利用方法:通过使用-d指定auto_prepend_file来制造任意文件包含漏洞,执行任意代码:

-d allow_url_include=on -d auto_prepend_file=php://input

使用-d参数可以配合php.ini中的配置文件

  • allow_url_include: 允许包含远程机器的文件
  • auto_prepend_file: 页面顶部加载的内容
  • auto_append_file: 页面底部加载的内容
  • php://input: 通过POST方式提交数据,这里运用的很巧妙,使用post方式提交需要包含的PHP代码


成功利用
其他的操作,例如命令执行

这里也可以直接执行PHP代码,后续可以很多操作,例如如下思路

  • 通过shell_execsystem()或者其他命令执行函数命令执行
  • 通过命令执行执行wget下载本机的reverse.php
  • 使用PHP代码生成一句话木马

通过/proc/self/environ本地文件包含

修改User-Agent为PHP代码,查看HTTP_USER_AGENT

标签:CGI,cgi,php,sapi,执行,PHP,代码执行,CVE,fastcgi
From: https://www.cnblogs.com/Junglezt/p/18117426

相关文章

  • vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2019-0193)
    ApacheSolr是一个开源的搜索服务器。Solr使用Java语言开发,主要基于HTTP和ApacheLucene实现。此次漏洞出现在ApacheSolr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的DIH配置都可以通过外部请求的dataC......
  • 一文搞懂 CGI, FastCGI, WSGI, uWSGI, uwsgi
    CGI:CommonGatewayInterfaceWSGI:WebServerGatewayInterface 图解注意: django项目是跑在uWSGIweb服务器上的 问题:有uWGSI了,Django为什么还需要Nginx?一个普通的个人网站,访问量不大的话,当然可以由uWSGI和Django构成。但是一旦访问量过大,客户端请求连......
  • 【讲解下如何安装ArcGIS 10.8】
    ......
  • node.js 代码执行时间的实现
    基础实现//记录开始时间varstartTime=performance.now();//要执行的代码for(leti=0;i<1000;i++){console.log("第"+(i+1)+"次循环");}//记录结束时间varendTime=performance.now();//计算执行时间varexecutionTime=endTime-startTi......
  • Imagemagick 命令注入漏洞(CVE-2016-3714)
    Imagemagick命令注入漏洞(CVE-2016-3714)漏洞介绍漏洞名称:Imagemagick命令注入漏洞(CVE-2016-3714)漏洞定级:高危漏洞描述:ImageMagick在处理恶意构造的图片文件时,对于文件中的URL未经严格过滤,可导致命令注入漏洞。通过命令注入漏洞,黑客可以在服务器上执行任意系统命令,获取服务......
  • 春秋云镜 CVE-2023-26469
    靶标介绍:Jorani是一款开源的员工考勤和休假管理系统,适用于中小型企业和全球化组织,它简化了员工工时记录、休假请求和审批流程,并提供了多语言支持以满足不同地区的需求。在Jorani1.0.0中,攻击者可以利用路径遍历来访问文件并在服务器上执行代码。访问靶场链接查询CVE-2......
  • 春秋云镜 CVE-2023-27179
    靶标介绍:GDideesCMSv3.9.1及更低版本被发现存在本地文件泄露漏洞,漏洞通过位于/_admin/imgdownload.php的filename参数进行利用。访问实验地址通过靶场介绍得知,漏洞通过位于/_admin/imgdownload.php的filename参数进行利用。构造访问目录。http://eci-2zeh4jwpx8......
  • Arcgis按位置选择工具解决区域内要素的选择问题
    一、方法一按位置选择1.菜单中Selection-》Selectbylocation2.点击Apply即可选中多边形内的要素。二、方法二Intersect相交操作Toolbox-》AnalysisTools-》Overlay-》Interscet 点击OK。根据FID_small选择对应的多边形可以统计其数目。  ......
  • 使用Django和FastCGI管理长时间运行的过程
    问题背景:有一个Django+FastCGI的应用程序,需要修改以执行长时间的计算(可能长达半小时或更久)。需要在后台运行计算,并返回“您的作业已启动”类型的响应。在进程运行期间,进一步访问该URL应返回“您的作业仍在运行”,直到作业完成,此时应返回作业结果。以后任何对该URL的访问都......
  • 关于RCE(远程代码执行漏洞)的学习1
            原理:因为应用系统给了用户提供指定的远程命令的操作,常见的比如:路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户通过从这些界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。因此,如果设计者......