این باگ زمانی ایجاد میشود که نظارت دقیقی روی فایلهای آپلود شده صورت نگیرد. در چنین مواقعی هکر میتواند فایلهای مخرب خود را uploadکند.
باگ RFU مخفف remote file upload است و به علت کانفیگ ضعیف سرور و عدم نظارت دقیق روی فایلهای آپلود شده هنگام اپلود فایل در سرور رخ میدهد. که باعث می شود که نفوذگر بتواند فایل های آلوده خود را در سرور اپلود کند.
روش مختلفی برای جلوگیری از این آسیب و دورزدن این محدودیتها وجود دارد که در ادامه به آن اشاره میکنیم.
CLIENT-SIDE FILTERS VALIDATION
اعتبارسنجی سمت کلاینت نوعی اعتبارسنجی است که قبل از ارسال ورودی ها به سرور صورت می گیرد. و این ویژگی توسط مرورگر وب و با استفاده از تکنولوژیهایJavaScript یا HTML5 اتفاق می افتد. برنامه نویسان از این نوع اعتبارسنجی برای ارائه تجربه بهتر کاربر با پاسخ سریع در سطح مرورگر استفاده می کنند.
CLIENT-SIDE FILTERS BYPASS
برای بایپس کردن این مشکل به راحتی میتوان با خاموش کردن JavaScript در مرورگر یا دستکاری درخواست های HTTP (با استفاده از ابزارهایی مانند Burp suite) پس از خارج شدن درخواست از مرورگر و قبل از ارسال به سرور، عبور کرد.
جاوا اسکریپت درخواست ما را فقط قبل از ارسال واقعی به سرور پردازش می کند که آیا فایل ما دارای پسوندهای یک فایل تصویر (jpg ، jpeg ، bmp ، gif ، png) است یا خیر. پس از capture کردن درخواست و دستکاری در آن، می توانیم پسوند فایل خود را تغییر دهیم.
ما میتوانیم پسوند فایل مخرب خود را با یکی از روشهای زیر تغییر میدهیم:
shell.php.jpg // shell.php;jpg
سپس با استفاده از ابزار burp suite درخواست خود را capture کرده و اسم فایل را به صورت زیر تغییر میدهیم:
shell.php
FILE NAME VALIDATION
اعتبارسنجی نام فایل زمانی است که سرور فایلی را که بارگذاری می شود با بررسی پسوند آن تأیید کند، این اعتبار سنجی با روش های متفاوتی اتفاق می افتد، اما دو مورد از محبوب ترین روش ها، عبارتند از:
1. Blacklisting File Extensions
2. Whitelisting File Extensions
FILE NAME BYPASS
اعتبارسنجی نام فایل زمانی رخ میدهد که سرور فایلی را که بارگذاری می شود با بررسی برنامه extension آن تأیید کند ، این تأیید بر اساس دو روش Blacklisting File Extensions و Whitelisting File Extensions صورت می گیرد.
روش Blacklisting File Extensions روشی است که سرور یک سری پسوند خاص را رد می کند، در حالی که Whitelisting File Extensions دقیقاً برعکس است، یعنی سرور فقط به چند پسوند خاص اجازه بارگذاری را میدهد، مانند jpg ، jpeg ، gif.
برخی از روشهای اعتبارسنجی نام فایل را می توان با بارگذاری یک پسوند غیر محبوب دیگر ، یا با استفاده از برخی از ترفندها هنگام بارگذاری فایل، برای دور زدن این نوع اعتبار سنجی استفاده کرد.
Blacklisting Bypass:
به عنوان مثال با بارگذاری extension های غیر محبوب php می توان لیست سیاه را دور زد.
مانند: pht ، phpt ، phtml ، php3 ، php4 ، php5 ، php6
Whitelisting Bypass:
با استفاده از برخی ترفندها، می توان لیست سفید را نیز دور زد، مانند افزودن null byte injection مانند (shell.php%00.gif). یا با استفاده از double extensions مانند (shell.jpg.php).
برخی دیگر از بایپس ها را نیز می توان با تغییر حروف بزرگ و کوچک extension ها اعمال کرد مانند: PHp ، Php ، PHP انجام داد.
CONTENT-TYPE VALIDATION
روش content-type validation زمانی است که سرور محتوای فایل را با بررسی نوع MIME فایل، که در درخواست http گنجانده شده است، اعتبار سنجی می کند. به عنوان مثال، فایلهای تصویری را با بررسی اینکه content-type از نوع image است، تأیید می کنند.
CONTENT-TYPE BYPASS
برای بایپس کردن این نوع اعتبار سنجی کافیست پس از ارسال درخواست، درخواست خود را capture کرده و فیلد content-type را به یکی از حالتهای زیر تغییر دهیم:
“image/png”, “image/jpeg”, and “image/gif”
CONTENT-LENGTH VALIDATION
روش Content-Length validation زمانی است که سرور طول محتوای فایل بارگذاری شده را بررسی می کند و برای بارگذاری فایل محدودیت اندازه قرار میدهد، هرچند که این نوع اعتبار سنجی چندان محبوب نیست.
CONTENT-LENGTH BYPASS
این نوع اعتبارسنجی با بارگذاری یک کد مخرب بسیار کوتاه در فایل بارگذاری شده، بسته به حداکثر محدودیت اندازه در وب سرور، قابل بایپس شدن است.