Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2023-25690 — CVE-2023-25690 Apache mod_proxy HTTP 请求走私漏洞的概念验证利用。包含基于 Docker 的实验室环境、BurpSuite 演练,以及绕过代理访问控制以访问内部管理员端点的方法。 | Kitploit
工具/GitHubGitHub/thanhlam-attt/cve-2023-25690
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试学习与教育
GitHubthanhlam-attt/cve-2023-25690

CVE-2023-25690

CVE-2023-25690 Apache mod_proxy HTTP 请求走私漏洞的概念验证利用。包含基于 Docker 的实验室环境、BurpSuite 演练,以及绕过代理访问控制以访问内部管理员端点的方法。

查看仓库
4122年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2023-25690

描述 CVE-2023-25690:

  • Apache HTTP Server 2.4.0 至 2.4.55 版本中的某些 mod_proxy 配置允许 HTTP Request Smuggling(HTTP 请求走私)攻击(一种干扰网站处理从一个或多个用户接收到的 HTTP 请求序列的攻击技术)。
  • 当 mod_proxy 与某些形式的 RewireRule 或 ProxyPassMatch 一起启用时,这些配置会受到影响,远程攻击者可利用此漏洞绕过代理服务器中的访问控制措施,从而将非预期的 URL 授权给源服务器。
  • 此漏洞允许攻击者瞄准并访问由代理隐藏的内部应用程序,可能导致未经授权的访问、数据泄露或对系统的进一步利用。

实验 CVE-2023-25690

  • 使用 Windows 机器作为攻击机
  • backend-server 和 proxy-server 通过 Docker 部署在 Kali Linux 机器上

实验文件结构:

image

实验模型

image

  • Windows 10 机器的 IP 地址:192.168.1.177
  • Kali Linux 机器的 IP 地址:192.168.27.139
  • Backend-Server 的 IP 地址:172.18.0.2
  • Proxy-Server 的 IP 地址:172.18.0.3
  • 当 Windows 10 机器访问托管在 Kali 机器 80 端口上的 Apache HTTP Server 时,流量将被转发到 Proxy-Server 的 80 端口,并通过 8080 端口转发到 Backend-Server。

系统要求

  • 攻击机:
    • Windows 10 操作系统
    • 安装工具:Pycharm、BurpSuite、VScode
    • 使用 FireFox 浏览器并安装 FoxyProxy 扩展来配置代理
  • 受害者机器:
    • 安装工具和服务:Docker、Tcpdum
    • 配置 Docker File(参见附录部分)

利用目标:利用 HTTP Request Smuggling 漏洞绕过代理服务器的限制,访问 admin.php 页面上的隐藏函数

实验部署:

  • 使用 BurpSuite Community 配置为代理,以拦截和修改请求
  • 在浏览器中下载 FoxyProxy 扩展并添加代理信息: image
  • 在工具栏上(浏览器的扩展部分)启用 FoxyProxy,从 Turn Off 切换到 BurpSuite Commu:
    image
  • 在 BurpSuite 中,将 intercept 打开为 on 以拦截数据包:
    image
  • 在 Kali 机器上,使用 cd 命令进入包含 docker-composer.yml 文件的实验目录,并使用以下命令运行 docker composer:docker-composer up --build

验证 CRLF 注入:

  • 首先,我们向系统发送一个包含控制字符(CRLF)的请求,如下所示:HTTP/1.1\r\nFoo: baarr\r\r\n\n,并将其 URL 编码为:%20HTTP/1.1%0d%0aFoo:%20baarr
    image
    => 可以看出,当我们插入 CRLF 字符(%0d%0a)时,服务器处理了我们的请求,没有返回任何错误或限制,这表明我们完全可以插入 CRLF 字符。

验证 HTTP 请求走私:

  • 接下来,我们有一个如下所示的 URI:/categories/1 HTTP/1.1\r\nHost: Localhost\r\n\r\nGET /SMUGGLED,继续对 URL 进行编码后得到:/categories/1%20HTTP/1.1%0d%0aHost:%20localhost%0d%0a%0d%0aGET%20/SMUGGLED/
    image
  • 应用 RewriteRule 后,可以看到 URL 将被解析,我们发送的请求经过代理后会变成如下格式:
    image
  • 可以看出,我们发送了一个请求,但服务器端却接收到了并返回了多达 2 个响应,一个是 GET /categories 的响应,另一个是 GET /SMUGGLED 的响应
    image

利用 HTTP 请求走私:

  • 假设在 httpd.conf 文件中,我们配置 Proxy-Server 阻止访问 /admin/ 页面 image
  • 我们可以利用 HTTP Request Smuggling 绕过 apache-proxy 的检查机制,使用以下请求:
    image
    • 检查日志,我们发现已成功绕过 apache-proxy,成功将请求发送到 /admin,并且后端对 GET /admin 返回了状态码 200
      image
    • 假设在 admin.php 文件中有一个执行系统命令 nslookup 的函数,用于向任意域名发起查询,如下所示,我们的目标是绕过代理机制,访问这个隐藏函数,向任意域名发送 DNS 查询, 到任意域名,这里我们查询的是我们自己的 Kali 机器。
      image
    • 我们有利用代码(文件 CVE-2023-25690.py)- 以及文件 pre.txt(包含我们想要绕过 Proxy-Server 发送到系统的走私请求,这里是 /admin.php)。这段代码将创建一个请求走私,把我们想要的请求放在 pre.txt 文件中,并将其发送到服务器。同时将请求和响应结果分别记录到两个相应的文件 req.txt 和 res.txt 中
      image
    • 同时在 Kali 机器上使用 TCPDUMP 捕获 53 端口上的 DNS 数据包 image
  • 可以看出,我们发送的请求已经通过了代理,代理认为这是一个合法的请求。但在 backend-server 端,请求连同控制字符一起被解析,因此 backend-server 将一个请求解析成了 3 个请求:一个是 GET /categories.php?id=1,第二个是 GET /admin.php?secret=192.168.1.194,最后一个是 GET /abc
    image
  • 这样,我们就成功向 /admin.php 发送了请求,而代理是不允许我们向该地址发送请求的 image
    => 检查 TCPDUMP,我们发现 TCPDUMP 捕获了发送过来的 DNS 数据包 -> 成功执行了 /admin.php 中的隐藏函数

附录

Backend 文件夹中 DockerFile 文件的配置

image

  • 此配置文件指定 Backend-Server 使用 PHP 7.4-apache 镜像,这是一个包含 PHP 7.4 以及 Apache Web Server 的镜像
  • 第 2 条命令将所有内容从 src/ 目录复制到 /var/www/html 目录 - 这是 Apache 用于构建 Web 内容的默认目录,该目录也称为 web root
  • 第 3 条命令使用 sed 将所有字段 80 替换为 8080。这可以更改 Backend-Server 中 Apache 的默认端口,从 80 改为 8080。
  • 第 4 条命令用于更新软件包并安装 dnsutils 软件包 - 可以在此处查看有关该软件包的信息:https://github.com/iagox86/dnsutils/blob/master/README.md
  • 最后一条命令在容器运行时执行,该命令使用 apache 来启动 Apache Web Server

Frontend 文件夹中 DockerFile 文件的配置

image

  • 此文件会将 Frontend 文件夹中的 httpd.conf 文件复制到 /tmp/httd.conf 文件中,最后将该 httpd.conf 文件的内容写入 /usr/local/apache2/conf/httpd.conf 文件中
  • httpd.conf 文件是 Apache HTTP Server 的主要配置文件,该文件定义了服务器中的配置设置或操作 - 在这里是 Proxy-Server
  • httpd.conf 文件通常安装在路径 /usr/local/apache2/conf/httpd.conf,因此我们必须将内容放入路径 /usr/local/apache2/conf/httpd.conf。而在 Frontend 文件夹中创建一个 httpd.conf 文件是为了更灵活地配置 Apache(无需 cd 到上述路径去重写 httpd.conf 文件)

docker-compose.yml 文件的配置:

image

  • 这里定义了运行应用程序所需的各种 service、network 等
  • 这里我们声明了两个主要服务:apache-proxy 和 backend-server:
    • Apache-Proxy:基于 ./frontend/DockerFile 文件构建,网络为 backend-network(bridge);此外还配置了 depends_on: backend-server,用于指定 Apache-Proxy 只能在 Backend-Server 启动完成后才能启动。最后是 ports: "80:80",用于指定端口转发,到达主机 80 端口的流量将被转发到容器的 80 端口
    • Backend-Server:基于 ./backend/DockerFile 文件构建,网络为 backend-network,与 Proxy 使用同一网络以便它们可以相互通信;配置 expose 开放 8080 端口,让 Apache-Proxy 通过该端口将流量转发到 Backend-Server;最后是一些安全特性,例如不允许用户创建新权限(添加、修改、删除文件,添加对进程或网络等的权限)以及过滤程序执行的系统调用

httpd.conf 文件的配置

image

  • 首先是配置日志存储在两个路径:/use/local/apache2/logs/error.log 和 /use/local/apache2/logs/access.log
  • 接下来是加载必要的模块,以便能够应用 Rewrite Rule(重写规则)
  • 接下来指定 DocumentRoot,该参数在 Apache 配置文件中用于确定服务器数据文件存放的位置
  • 接下来是对指向 /categories/ 和 /admin/ 的路径应用重写规则
  • 最后是阻止向 /admin/ 发送请求 -> 目的是让我们做实验,绕过代理并访问此页面
下载工具