目录

前言

PHP CGI

原理

CGI模式命令行参数

复现


前言

        首先,在复现CVE-2012-1823之前我们要普及一个知识点,已经会了的兄弟萌直接可以跳过到复现步骤了。

PHP CGI

        PHP CGI是PHP提供的能实现CGI(通用网关接口)协议的程序,用来解释和执行PHP脚本。CGI是一种标准协议,一般用于WEB服务器跟外部应用程序之间的数据交换。服务器可以通过CGI把客户端的请求传递给PHP CGI程序进行处理,并将结果返回给客户端。

原理

        当服务器收到动态请求(比如.php文件)的时候,会启动PHP CGI程序来解析请求。PHP CGI会读取配置文件,初始化执行环境,处理请求,并把结果以CGI的格式返回给服务器。

CGI模式命令行参数

-c 指定php.ini文件的位置

-n 不要加载php.ini文件

-d 指定配置项

-b 启动fastcgi进程

-s 显示文件源码

-T 执行指定次该文件

-h/-? 显示帮助

复现

        首先打开我们的靶场,发现就只有一句Hello, Your name is Vulhub。

我们尝试去看一眼源码,传一个-s进去,成功实现源码泄露。

        我们来审一下源码,isset()会检测变量是否为空,在这一段的作用是用来检测name是否为空,如果为空那么则用默认值“Vulhub”,否则就用传来的“name”。这么一审发现源码里没有什么有用的信息,那么我们就去尝试用PHP CGI来把allow_url_include打开,并让auto_prepend_file=php://inputauto_prepend_file的作用是让服务器在执行目标脚本之前先自动解析执行某个文件。组合起来的payload就是-d allow_url_include=on -d auto_prepend_file=php://input,它首先会打开include,允许我们用URL/流作为include源,然后会优先执行php://input伪协议,这样我们就可以在POST的数据流里写PHP代码并执行了,下面演示一遍。

构建URL并拦包

把payloadURL编码后放上去,然后开始在流里面构建我们的PHP语句

可以看到成功拿到passwd文件

更多推荐