PHP-CGI安全漏洞CVE-2012-1823复现详解
目录
前言
首先,在复现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://input,auto_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文件
更多推荐
所有评论(0)