آپلود فایل یکی از بخشهایی است که در ظاهر ساده به نظر میرسد، اما در صورت طراحی ناامن میتواند به نقطه ورود مهاجم برای اجرای کد، افشای اطلاعات، دور زدن کنترلهای دسترسی یا از کار انداختن سرویس تبدیل شود.
در این آموزش، از مبانی شروع میکنیم و به سراغ تحلیل درخواستهای HTTP، دور زدن کنترلهای ناقص در آزمایشگاه، بررسی مسیر ذخیرهسازی، تشخیص ریسکهای اجرای فایل و طراحی آزمونهای پیشرفته میرویم. هدف این است که پس از مطالعه و تمرین، بتوانید آسیبپذیری را شناسایی، با شواهد معتبر اثبات، شدت آن را ارزیابی و راهکار اصلاحی ارائه کنید.
قانون آزمایشگاه: تمام تستهای عملی این مقاله را فقط روی برنامهای که خودتان راهاندازی کردهاید یا مجوز کتبی آزمون آن را دارید اجرا کنید. برای تمرین، از فایلهای بیخطر و نشانههای آزمایشی استفاده میکنیم؛ نیازی به آپلود شِل مخرب یا اجرای کد روی سرور واقعی نیست.
۱. آپلود فایل چگونه کار میکند؟
در یک برنامه وب، کاربر فایلی را انتخاب میکند و مرورگر معمولاً آن را در قالب درخواست multipart/form-data به سرور میفرستد.
۱. انتخاب فایل توسط کاربر
مثلاً یک تصویر PNG یا سند PDF
۲. ارسال درخواست HTTP
نام فایل، محتوای فایل، Content-Type و فیلدهای فرم
۳. اعتبارسنجی سمت سرور
بررسی نوع واقعی، اندازه، مجوز کاربر و محتوای فایل
۴. ذخیرهسازی و ارائه فایل
نام تصادفی، محل ذخیره امن و دسترسی کنترلشده
هرکدام از این مراحل ممکن است نقص امنیتی داشته باشد. برای مثال، ممکن است فرم فقط پسوند فایل را بررسی کند، ولی سرور محتوای واقعی را اعتبارسنجی نکند؛ یا فایل بهدرستی بررسی شود اما در مسیری ذخیره شود که وبسرور اجازه اجرای آن را میدهد.
اصطلاحات کلیدی
| اصطلاح | مفهوم |
|---|---|
| Extension | پسوند نام فایل، مانند .png |
| MIME Type | نوع رسانهای اعلامشده برای فایل |
| Magic Bytes | بایتهای ابتدایی که به شناسایی قالب فایل کمک میکنند |
| Multipart | قالب رایج ارسال فایل در HTTP |
| Web Root | مسیری که فایلهای قابلدسترسی از وب در آن قرار دارند |
| Content Sniffing | تلاش مرورگر برای تشخیص نوع محتوا از روی دادهها |
| Storage Isolation | جداسازی محل ذخیره فایل از محیط اجرای برنامه |
نکته مهم: هیچکدام از پسوند، MIME Type یا Magic Bytes بهتنهایی تضمین امنیت نیستند. اعتبارسنجی باید چندلایه باشد.
۲. انواع آسیبپذیریهای آپلود فایل
۲.۱. اعتبارسنجی ناقص پسوند
سامانه تنها نام فایل را بررسی میکند و درباره محتوای واقعی یا رفتار فایل تصمیم درستی نمیگیرد. تفاوت میان بررسی سمت مرورگر و اعتبارسنجی سمت سرور در این دسته اهمیت زیادی دارد.
۲.۲. اعتماد بیش از حد به MIME Type
مقدار Content-Type در درخواست میتواند توسط کاربر تغییر کند. این مقدار صرفاً یک ادعاست و نباید تنها معیار پذیرش فایل باشد.
۲.۳. ذخیره فایل در مسیر اجرایی
فایلهای پذیرفتهشده ممکن است در مسیری ذخیره شوند که وبسرور یا مفسر برنامه بتواند آنها را اجرا کند. پیامد احتمالی به تنظیمات سرور، قالب فایل و دسترسیهای موجود بستگی دارد.
۲.۴. نام فایل و مسیر ذخیرهسازی ناامن
استفاده مستقیم از نام ارسالی کاربر میتواند باعث برخورد نامها، افشای مسیرهای داخلی یا در شرایط خاص دستکاری مسیر شود.
۲.۵. فایلهای چندقالبی و پردازش ناامن
فایل ممکن است ساختاری داشته باشد که چند ابزار آن را به شکل متفاوت تفسیر کنند. همچنین پردازشگر تصویر، سند یا آرشیو خود میتواند سطح حمله ایجاد کند.
۲.۶. دسترسی غیرمجاز به فایل آپلودشده
حتی اگر آپلود امن باشد، شناسه قابلحدس، لینک عمومی یا کنترل دسترسی ناقص ممکن است اطلاعات کاربران دیگر را افشا کند.
۳. آمادهسازی آزمایشگاه تست نفوذ
برای این آموزش دو مسیر تمرین پیشنهاد میشود.
مسیر اول: آزمایشگاه آنلاین آموزشی
مناسب برای شروع و تمرین سناریوهای واقعی شبیهسازیشده
از آزمایشگاه File Upload در PortSwigger Web Security Academy استفاده کنید. درسها و لابهای این مجموعه از اعتبارسنجی ناقص تا بررسی نحوه ارائه فایل را پوشش میدهند.
مسیر دوم: آزمایشگاه محلی
مناسب برای تحلیل درخواستها و بررسی تنظیمات سرور
به Kali Linux یا یک سیستم معمولی، مرورگر، Burp Suite Community و یک برنامه آزمایشی آسیبپذیر نیاز دارید. ماشین مجازی را از شبکههای حساس جدا کنید و سرویس آزمایشی را فقط روی سیستم محلی در دسترس قرار دهید.
ابزارهای موردنیاز
| ابزار | کاربرد |
|---|---|
| Burp Suite Community | رهگیری و تکرار درخواستهای HTTP |
| Firefox یا Chromium | بررسی فرم آپلود و پاسخ سرور |
curl |
ارسال درخواست و بررسی پاسخها |
file |
تشخیص اولیه قالب فایل از روی محتوا |
xxd |
مشاهده بایتهای ابتدایی فایل |
| Docker یا ماشین مجازی | جداسازی محیط تمرین |
نصب ابزارهای پایه در Kali Linux:
sudo apt update
sudo apt install -y curl file xxd
برای نصب Burp Suite از وبسایت رسمی PortSwigger استفاده کنید.
۴. شناسایی نقطه آپلود و ساخت خط مبنا
پیش از هر آزمایش، باید رفتار عادی برنامه را بشناسید.
فرض کنید برنامه آزمایشگاهی شما در نشانی http://127.0.0.1:8080 اجرا شده و صفحهای برای آپلود تصویر دارد.
مرحله اول: بررسی درخواست عادی
یک تصویر معمولی با پسوند .png آپلود کنید و موارد زیر را ثبت کنید:
-
آدرس و متد درخواست، مانند
POST. -
نام پارامتر فایل، مثلاً
avatar. -
مقدار
Content-Typeدرخواست و بخش فایل. -
کد وضعیت HTTP، مانند
200،302یا400. -
پیام موفقیت یا خطای برنامه.
-
نام و مسیر عمومی فایل ذخیرهشده، اگر قابل مشاهده باشد.
-
اینکه آیا کاربر دیگری میتواند فایل را دریافت کند یا خیر.
کدهای وضعیت بهتنهایی اثباتکننده آسیبپذیری نیستند؛ باید نتیجه را با رفتار واقعی برنامه مقایسه کنید.
مرحله دوم: ایجاد فایلهای بیخطر
در سیستم آزمایشگاهی، یک فایل متنی و یک تصویر معتبر بسازید:
mkdir -p ~/file-upload-lab
cd ~/file-upload-lab
printf 'ZeroOne Cyber Lab - harmless test\n' > note.txt
file note.txt
xxd -l 32 note.txt
برای تصویر، از یک فایل PNG واقعی استفاده کنید؛ تغییر نام یک فایل متنی به .png تصویر معتبر ایجاد نمیکند.
حالا یک درخواست پایه با curl ارسال کنید. نام avatar و مسیر /upload نمونه هستند و باید با فرم واقعی آزمایشگاه خودتان تطبیق داده شوند:
curl -i \
-F "avatar=@note.txt;type=text/plain" \
http://127.0.0.1:8080/upload
این درخواست صرفاً رفتار برنامه در برابر یک فایل متنی را بررسی میکند. ممکن است برنامه آن را رد کند؛ همین پاسخ، اگر با سیاست مورد انتظار برنامه سازگار باشد، نتیجهای معتبر برای ثبت است.
مرحله سوم: تحلیل ترافیک با Burp Suite
۱. رهگیری
پراکسی مرورگر را روی Burp تنظیم کنید و یک فایل عادی آپلود کنید.
۲. بررسی درخواست
در بخش Proxy، بدنه multipart/form-data و فیلدهای مربوط به فایل را بررسی کنید.
۳. ارسال به Repeater
درخواست را به Repeater بفرستید تا بتوانید تغییرات کنترلشده را جداگانه آزمایش کنید.
۴. ثبت شواهد
پاسخ اصلی و پاسخ آزمایش را مقایسه کنید؛ کد وضعیت، پیام برنامه و محل ذخیرهسازی را ثبت کنید.
نمونه ساختار یک درخواست آپلود:
POST /upload HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data; boundary=LabBoundary
--LabBoundary
Content-Disposition: form-data; name="avatar"; filename="note.txt"
Content-Type: text/plain
ZeroOne Cyber Lab - harmless test
--LabBoundary--
این نمونه برای شناخت ساختار درخواست است. در درخواست واقعی، مرورگر یا ابزار تست باید مرزها و طول بدنه را بهدرستی تنظیم کند.
۵. آزمونهای پیشرفته آپلود فایل
در این مرحله، بهجای اینکه صرفاً تلاش کنید فایلی را آپلود کنید، هر کنترل امنیتی را جداگانه ارزیابی میکنید. برای هر آزمون، یک فرضیه مشخص داشته باشید و نتیجه را با سیاست امنیتی برنامه بسنجید.
آزمون ۱: بررسی اعتبارسنجی پسوند
هدف این است که مشخص شود برنامه چگونه پسوند فایل را تفسیر میکند.
در آزمایشگاه، فایلهای بیخطر زیر را بررسی کنید:
| نام آزمایشی | هدف بررسی |
|---|---|
photo.png |
پسوند مجاز |
photo.PNG |
حساسیت به بزرگی و کوچکی حروف |
photo.txt |
پسوند غیرمجاز |
photo.backup.txt |
نحوه تشخیص پسوند نهایی |
photo.png.txt |
رفتار در برابر چند پسوند |
برای هر فایل ثبت کنید:
-
آیا درخواست به سرور رسید؟
-
آیا سرور فایل را پذیرفت یا رد کرد؟
-
آیا نام فایل در پاسخ تغییر کرد؟
-
آیا فایل واقعاً ذخیره شد؟
-
آیا نتیجه با سیاست اعلامشده برنامه مطابقت داشت؟
نکته تخصصی: پذیرفتهشدن یک نام غیرمنتظره لزوماً به معنی آسیبپذیری بحرانی نیست. باید مشخص کنید چه نوع محتوایی پذیرفته شده و چه پیامدی در سیستم دارد.
آزمون ۲: اعتبارسنجی MIME Type
درخواست آپلود معمولاً یک هدر Content-Type برای بخش فایل دارد. این هدر ممکن است با قالب واقعی فایل سازگار نباشد.
در Burp Repeater، فقط روی فایلهای آزمایشی خودتان، نوع اعلامشده را تغییر دهید و رفتار سرور را مقایسه کنید.
مثلاً:
Content-Disposition: form-data; name="avatar"; filename="note.txt"
Content-Type: image/png
محتوای فایل همچنان متن ساده است؛ صرفاً هدر آن را به PNG تبدیل کردهایم.
نتیجه مورد انتظار از یک پیادهسازی امن: برنامه نباید تنها بر اساس این هدر تصمیم بگیرد که فایل واقعاً یک تصویر معتبر است. نوع محتوا باید در سمت سرور و متناسب با کاربرد فایل بررسی شود.
آزمون ۳: مقایسه پسوند با محتوای واقعی
این آزمایش را با سه فایل انجام دهید:
-
یک PNG معتبر.
-
یک فایل متنی با پسوند
.txt. -
همان فایل متنی که فقط نام آن به
.pngتغییر کرده است.
برای مشاهده نوع فایل در لینوکس:
file valid-image.png
file note.txt
file renamed-image.png
نام renamed-image.png در مثال آخر باید به فایل متنی تغییرنامیافته اشاره کند.
اگر برنامه صرفاً به نام فایل توجه کند و فایل متنی را بهعنوان تصویر معتبر بپذیرد، یک نقص اعتبارسنجی احتمالی دارید. شدت آن به نحوه پردازش و ارائه فایل وابسته است.
آزمون ۴: بررسی نام فایل و مسیر ذخیرهسازی
در این مرحله بررسی کنید آیا نامی که کاربر ارسال میکند مستقیماً در فایلسیستم استفاده میشود یا خیر.
موارد قابل بررسی:
-
نامهای بسیار طولانی.
-
نامهای دارای فاصله و کاراکترهای Unicode.
-
نامهای دارای کاراکترهای کنترلی یا جداکنندههای مسیر.
-
نام تکراری برای دو آپلود متوالی.
-
نامهای دارای چند پسوند.
-
تفاوت رفتار سیستم در نامگذاری و ذخیرهسازی.
برای آزمایش، از نامهای بیخطر استفاده کنید و رفتار رد یا پاکسازی نامها را ثبت کنید. هدف این نیست که روی فایلهای واقعی سیستم چیزی بازنویسی شود؛ هدف بررسی کنترلهای ورودی و اثبات ایمن نقص است.
نشانه مهم: اگر دو آپلود با نام یکسان باعث جایگزینی فایل قبلی شوند، باید بررسی کنید آیا فایل قبلی متعلق به همان کاربر بوده و آیا این رفتار میتواند به دستکاری داده یا نقض دسترسی منجر شود.
آزمون ۵: بررسی اجرای فایل در سرور
این آزمون از مهمترین بخشهای ارزیابی است.
صرف ذخیرهشدن یک فایل با پسوند خاص، اجرای کد را اثبات نمیکند. باید معماری وبسرور و محل ذخیرهسازی را بشناسید.
بررسی کنید:
-
فایل در مسیر عمومی وب ذخیره میشود یا خارج از آن؟
-
آیا مسیر ذخیرهسازی تحت کنترل مفسر PHP، ASP.NET یا فناوری مشابه قرار دارد؟
-
پاسخ سرور فایل را دانلود میکند یا آن را بهصورت محتوا نمایش میدهد؟
-
آیا فایل آپلودشده از مبدأی جداگانه ارائه میشود؟
-
آیا تنظیمات وبسرور اجرای کد را در مسیر آپلود غیرفعال کردهاند؟
در آزمایشگاه امن، این موضوع را از طریق تنظیمات سرور و یک فایل نشانگر بیخطر بررسی کنید؛ برای اثبات نقص نیازی به ساخت web shell یا اجرای دستور سیستمعامل نیست.
آزمون ۶: کنترل دسترسی به فایلها
این آزمون حتی در برنامههایی که اعتبارسنجی فایل مناسبی دارند نیز ضروری است.
با دو حساب آزمایشی، A و B، بررسی کنید:
-
حساب A یک فایل خصوصی آپلود کند.
-
حساب A فایل را از طریق قابلیت مجاز برنامه دریافت کند.
-
حساب B همان شناسه یا URL را امتحان کند.
-
نتیجه را با سیاست دسترسی برنامه مقایسه کنید.
اگر فایل خصوصی بدون مجوز برای حساب B قابل دریافت باشد، احتمال وجود نقص کنترل دسترسی وجود دارد.
در این آزمون فقط از فایلهای ساختگی خودتان استفاده کنید. شناسه فایل یا URL را از محیط آزمایشگاه بگیرید و آن را روی کاربران یا فایلهای واقعی امتحان نکنید.
آزمون ۷: محدودیت اندازه و مصرف منابع
محدودیت آپلود فقط برای تجربه کاربری نیست؛ یک کنترل امنیتی نیز محسوب میشود.
موارد بررسی:
-
حداکثر اندازه فایل در برنامه.
-
محدودیت درخواست در وبسرور و پراکسی.
-
محدودیت تعداد آپلود برای هر کاربر.
-
فضای ذخیرهسازی مصرفشده.
-
اندازه فایل پس از استخراج یا پردازش.
-
امکان ارسال همزمان چند درخواست آپلود.
در محیط محلی، با فایلهای کوچک و اندازههای افزایشی آزمایش کنید. برای بررسی آرشیوها یا فایلهای فشرده، بهجای اجرای آزمونهای حجیم و مخرب، محدودیت اندازه پس از استخراج و تعداد فایلهای مجاز را از روی پیکربندی و تستهای کنترلشده بررسی کنید.
آزمون ۸: پردازش تصویر و سند
گاهی خود قابلیت پردازش فایل سطح حمله ایجاد میکند؛ برای مثال، تولید تصویر بندانگشتی، تبدیل PDF یا استخراج آرشیو.
در این مرحله مشخص کنید:
-
کدام کتابخانه فایل را پردازش میکند؟
-
آیا نسخه کتابخانه بهروز و پشتیبانیشده است؟
-
آیا پردازش در محیط محدودشده انجام میشود؟
-
آیا فایل اصلی بدون بررسی مجدد منتشر میشود؟
-
آیا فایلهای خروجی نیز اعتبارسنجی میشوند؟
-
آیا زمان و حافظه مصرفی پردازش محدود است؟
از فایلهای آزمایشی معتبر استفاده کنید و آسیبپذیری کتابخانهها را ابتدا با بررسی نسخه، تنظیمات و آزمونهای رسمی آنها ارزیابی کنید. اجرای فایلهای بهرهبرداریشده روی سامانههای عملیاتی ضروری نیست.
۶. ماتریس ارزیابی تست نفوذ
برای اینکه آزمایشها قابل تکرار باشند، از جدول زیر بهعنوان چکلیست استفاده کنید.
چکلیست عملی
وضعیت هر آزمون را پس از اجرای واقعی در آزمایشگاه انتخاب کنید. این وضعیتها خودکار نتیجه امنیتی را تعیین نمیکنند.
U-01 — پسوند مجاز
پذیرش فایل موردنیاز
U-02 — پسوند غیرمجاز
رد فایل خارج از سیاست
U-03 — تغییر MIME Type
عدم اعتماد صرف به هدر
U-04 — پسوند و محتوای ناسازگار
اعتبارسنجی واقعی محتوا
U-05 — نام طولانی و Unicode
پاکسازی و محدودیت نام
U-06 — نام تکراری
جلوگیری از بازنویسی ناخواسته
U-07 — دسترسی حساب دیگر
اعمال مجوز دانلود
U-08 — اندازه فایل
محدودیت منابع
U-09 — اجرای فایل
غیرفعال بودن اجرای کد
U-10 — پردازش فایل
ایمنی پردازشگر و خروجی
کپی گزارش آزمونها
۷. سناریوی نهایی: آیا آپلود فایل میتواند به اجرای کد منجر شود؟
این سناریو مهمترین بخش تحلیل ریسک است؛ چون باید زنجیره کامل را بررسی کنید، نه فقط یک پاسخ HTTP را.
زنجیره تحلیل آسیبپذیری
-
ورود فایل: آیا کنترل آپلود اجازه ورود فایلی خارج از سیاست را میدهد؟
-
ذخیرهسازی: فایل دقیقاً کجا ذخیره میشود و چه نامی میگیرد؟
-
دسترسی: آیا فایل از طریق HTTP قابل دریافت است؟ چه کسانی به آن دسترسی دارند؟
-
تفسیر محتوا: آیا وبسرور فایل را بهعنوان داده ثابت ارائه میکند یا آن را به یک مفسر میسپارد؟
-
اثر نهایی: آیا شواهد واقعی از اجرای کد، افشای داده یا نقض کنترل دسترسی وجود دارد؟
برای اثبات آسیبپذیری، هر مرحله را جداگانه مستند کنید. اگر فایل پذیرفته شود اما خارج از مسیر اجرایی ذخیره شود و فقط به شکل دانلود ارائه شود، نمیتوان بدون شواهد بیشتر ادعا کرد که اجرای کد از راه دور ممکن است.
در مقابل، اگر ثابت شود فایل تحت کنترل مهاجم در یک محیط اجرایی قرار میگیرد و سرور آن را اجرا میکند، موضوع میتواند به یک آسیبپذیری بسیار جدی تبدیل شود.
۸. چگونه آسیبپذیری آپلود فایل را رفع کنیم؟
یک پیادهسازی امن باید چند لایه دفاع داشته باشد؛ نه اینکه فقط چند پسوند را مسدود کند.
۱. فهرست مجاز پسوندها
فقط قالبهایی را بپذیرید که واقعاً برای قابلیت برنامه لازم هستند. از فهرست مجاز استفاده کنید و نام فایل را پیش از بررسی، بهشکل درست رمزگشایی و نرمالسازی کنید.
۲. اعتبارسنجی محتوای واقعی
نوع فایل را با روشهای مناسب همان قالب بررسی کنید. برای تصاویر، در صورت امکان آنها را با کتابخانه معتبر بازخوانی و مجدداً تولید کنید.
۳. ذخیرهسازی خارج از Web Root
فایل را خارج از مسیر اجرایی وبسرور نگه دارید و برای ارائه آن از یک کنترلکننده امن استفاده کنید.
۴. نامگذاری تصادفی
برای فایلها شناسه تصادفی سمت سرور ایجاد کنید، محدودیت طول نام بگذارید و از بازنویسی فایلهای قبلی جلوگیری کنید.
۵. مجوز و جداسازی اجرا
دسترسی آپلود را به کاربران مجاز محدود کنید، اجرای کد را در محل ذخیره فایل غیرفعال کنید و برای پردازش فایلها از محیط محدودشده استفاده کنید.
۶. محدودیت منابع و پایش
اندازه، تعداد و نرخ آپلود را محدود کنید؛ پردازشهای زمانبر را کنترل کنید و رویدادهای مشکوک را ثبت کنید.
این توصیهها با راهنمای رسمی OWASP در زمینه امنیت آپلود فایل همراستا هستند. برای مطالعه جزئیات پیادهسازی به راهنمای امنیت آپلود فایل OWASP مراجعه کنید.
نمونه پیکربندی دفاعی در PHP
نمونه زیر یک الگوی ساده برای اعتبارسنجی اولیه تصویر است. این کد بهتنهایی یک سامانه آپلود کامل یا تضمین امنیت نیست؛ کنترل دسترسی، محدودیت درخواست، ذخیرهسازی خارج از Web Root و مدیریت خطا نیز باید پیادهسازی شوند.
<?php
// Example: validate an uploaded PNG or JPEG.
if (!isset($_FILES['avatar'])) {
http_response_code(400);
exit('No file received');
}
$file = $_FILES['avatar'];
if ($file['error'] !== UPLOAD_ERR_OK) {
http_response_code(400);
exit('Upload failed');
}
$maxBytes = 2 * 1024 * 1024;
if ($file['size'] <= 0 || $file['size'] > $maxBytes) {
http_response_code(400);
exit('Invalid file size');
}
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($file['tmp_name']);
$allowed = [
'image/png' => 'png',
'image/jpeg' => 'jpg',
];
if (!isset($allowed[$mime])) {
http_response_code(415);
exit('Unsupported file type');
}
if (@getimagesize($file['tmp_name']) === false) {
http_response_code(415);
exit('Invalid image');
}
// Generate a server-side filename.
// Store outside the web root with restricted permissions.
$filename = bin2hex(random_bytes(16)) . '.' . $allowed[$mime];
echo 'Initial validation passed';
در این نمونه، فایل هنوز ذخیره نشده است؛ این کار عمدی است. مسیر نهایی ذخیرهسازی باید از قبل تعیین شده، خارج از Web Root باشد و با کنترل دسترسی مناسب مدیریت شود. همچنین در سامانه واقعی بهتر است تصویر با یک کتابخانه معتبر بازخوانی و به خروجی جدید تبدیل شود و فایل موقت پس از پایان پردازش بهدرستی مدیریت شود.
۹. تعیین شدت آسیبپذیری و نوشتن گزارش
برای گزارش تست نفوذ، از شدت بر اساس شواهد استفاده کنید، نه صرفاً نام آسیبپذیری.
| وضعیت مشاهدهشده | ارزیابی اولیه |
|---|---|
| فایل غیرمجاز پذیرفته میشود اما اثر امنیتی مشخصی ندارد | نیازمند بررسی بیشتر |
| فایل خصوصی بدون مجوز قابل دریافت است | نقص کنترل دسترسی؛ شدت وابسته به داده |
| محتوای فعال به کاربران دیگر ارائه میشود | احتمال حمله سمت کاربر؛ وابسته به شرایط اجرا |
| آپلود باعث مصرف نامحدود منابع میشود | احتمال اختلال در دسترسپذیری |
| اجرای کد سمت سرور با شواهد معتبر اثبات میشود | بالقوه بحرانی |
شدت نهایی را با توجه به امکان بهرهبرداری، سطح دسترسی لازم، محرمانگی و یکپارچگی دادهها و اثر بر دسترسپذیری تعیین کنید.
قالب گزارش برای کاربران صفر و یک سایبر
گزارش تست نفوذ: آسیبپذیری آپلود فایل
نام پروژه: آزمایشگاه آموزشی صفر و یک سایبر
شناسه آزمون: U-___
تاریخ آزمون: …
نشانی هدف: …
شدت: اطلاعاتی / پایین / متوسط / بالا / بحرانی
۱. شرح آسیبپذیری
توضیح دهید کدام کنترل امنیتی درست عمل نکرده است.
۲. پیشنیازها
سطح دسترسی لازم، حساب آزمایشی و شرایط بازتولید.
۳. مراحل بازتولید
۱. ورود به قابلیت آپلود
۲. ارسال فایل آزمایشی
۳. ثبت پاسخ سرور
۴. بررسی محل ذخیرهسازی و نحوه دسترسی
۵. ثبت نتیجه قابل تکرار
۴. شواهد
درخواست و پاسخ HTTP، تصویر محیط آزمایشگاه، نام فایل آزمایشی و گزارش تنظیمات مرتبط.
۵. اثر امنیتی
توضیح دهید آیا محرمانگی، یکپارچگی یا دسترسپذیری تحت تأثیر قرار میگیرد و شواهد این نتیجه چیست.
۶. راهکار اصلاحی
اعتبارسنجی سمت سرور، فهرست مجاز قالبها، نامگذاری تصادفی، ذخیرهسازی خارج از Web Root، کنترل دسترسی و غیرفعالکردن اجرای فایل.
۷. آزمون مجدد
پس از اصلاح، همان آزمون را تکرار و نتیجه را ثبت کنید.
وضعیت نهایی: اصلاحشده / نیازمند اصلاح / تأییدنشده
۱۰. برنامه تمرین هفتروزه
روز ۱
شناخت HTTP و Multipart
یک آپلود عادی انجام دهید و ساختار درخواست را در Burp تحلیل کنید.
روز ۲
پسوند و MIME Type
آزمونهای U-01 تا U-04 را با فایلهای بیخطر اجرا کنید.
روز ۳
نام فایل و مسیر
رفتار نامهای طولانی، Unicode و فایلهای تکراری را بررسی کنید.
روز ۴
ذخیرهسازی و اجرای فایل
مسیر فایل، تنظیمات وبسرور و نحوه ارائه محتوا را تحلیل کنید.
روز ۵
کنترل دسترسی و منابع
آزمون حساب A و B و محدودیت اندازه فایل را انجام دهید.
روز ۶
تحلیل و اصلاح
یک نقص را در برنامه آزمایشی پیدا کنید، علت ریشهای آن را مشخص و کنترل دفاعی مناسب را اجرا کنید.
روز ۷
گزارش حرفهای
گزارش یافته، شواهد، شدت، راهکار و نتیجه آزمون مجدد را تکمیل کنید.
۱۱. منابع تکمیلی برای سطح حرفهای
مرجع کنترلهای دفاعی، اعتبارسنجی، ذخیرهسازی و پردازش امن فایل.
PortSwigger Web Security Academy
برای ادامه تمرین، درسهای File Upload و لابهای تعاملی آن را به ترتیب سطح دشواری انجام دهید.
برای یادگیری روششناسی تست، مستندسازی و ارزیابی سیستماتیک امنیت برنامه وب.
آزمون پایانی دوره
قبل از اینکه خودتان را برای تست نفوذ آپلود فایل آماده بدانید، باید بتوانید به این پنج پرسش پاسخ دهید:
-
چرا تغییر
Content-Typeدر درخواست HTTP نباید برای عبور از اعتبارسنجی کافی باشد؟ -
تفاوت میان آپلود موفق فایل و اجرای موفق کد روی سرور چیست؟
-
چرا ذخیره فایل خارج از Web Root یک کنترل دفاعی مهم است؟
-
چگونه ثابت میکنید فایل خصوصی کاربر A برای کاربر B قابل دسترسی نیست؟
-
برای اینکه یک یافته از «رفتار غیرمنتظره» به «آسیبپذیری اثباتشده» تبدیل شود، چه شواهدی لازم است؟
اگر بتوانید این موارد را در آزمایشگاه اجرا، مستند و تحلیل کنید، پایه مناسبی برای ورود به تست نفوذ پیشرفته آپلود فایل دارید. مرحله بعد، بررسی پیادهسازی همین کنترلها در برنامههای PHP و وردپرس و سپس مقایسه آنها با نتایج آزمون مجدد است.

دیدگاه شما