باگ RFU به زبان ساده

باگ RFU ( remote file upload ) چیست؟یه مورد باگ آسیب پذیر هست که هنگام آپلود فایل بوجود میاد که علتش خطای برنامه نویس یا استفاده از افزونه های غیرضروری هست و نفوذ گر با استفاده از این باگ میتونه فایل مورد نظر خودشو در اون سایت آپلود کنه و دسترسی های لازمو بگیره.نکته: قرار نیست همه آپلودرهای سایت ها این باگو داشته باشن! برنامه نویس ها هم اعمال لازم رو انجام میدن و الگوریتم های مخصوص برای امنیت آپلودر سایت خودشون دارن.الگوریتم های آپلودر هاچندین الگوریتم برای محدود کردن و ایمنی آپلودرها وجود داره :اولین الگوریتم معروف به extension هست که مربوط به نوع و پسوند فایل هاست. به این صورت که آپلودر فایلی که قراره آپلود شه رو از نظر پسوند چک میکنه که آیا مجاز به آپلود هست یا نه که این روش دو نوع داره به نام های white listو black list . در روش اول (لیست سفید ) لیستی از پسوند ها رو به عنوان پسوندهای مجاز تعیین میکنن که هر فایل با پسوندی خارج از لیست سفید بهش اجازه آپلود داده نمیشه. برای مثال پسوند های (jpg , jpeg, png و ...) در لیست سفید قرار می گیرن.در روش دوم ( لیست سیاه) تمامی پسوند های غیر مجاز در لیست سیاه قرار میگیرن و به این صورت هر فایلی که در لیست سیاه هست مجاز نیست و فایل های با پسوند خارج از لیست سیاه ( غیر مجاز ها) اجازه آپلود شدن دارن. برای مثال پسوند های ( php , asp, aspx, exe و ...) در لیست سیاه قرار می گیرن.نکته:اکثرا سایت ها از روش اول ( لیست سفید) استفاده می کنن.الگوریتم بعدی معروف به mime type : هر فایل شناسه و میم تایپ مخصوص به خودشو داره که در هدر ارسالی در بخش content-type نشون داده میشه . این قسمت در هنگام آپلود بررسی میشه که آیا فایلی که در حال آپلود شدن هست با میم تایپ مجاز تطابق داره یا نه. برای مثال میم تایپ یک فایل تصویری jpeg به این صورت هست : image/jpegالگوریتم بعدی الگوریتم sizeهست که حجم فایل رو بررسی میکنه. به این صورت که اگر حجم فایل بیشتر از مقدار مورد نظر (مثلا بیشتر از 100 کیلوبایت( بود اجازه آپلود نداشته باشه.آخرین الگوریتم که جزو نادرترین هاست معروف به file process هست که با استفاده از یکسری روش ها و توابع فایل آپلود شده بایت به بایت مورد بررسی و پردازش (process) مختلف قرار میگیره که آیا یک فایله مجاز هست یا یک فایل مخرب (مثلا شل) که به شکل تصویر (با پسوند مجاز) پردازش شده و تغییر کرده.نکته: آپلودر ها همیشه فقط از یه الگوریتم استفاده نمیکنن و ممکنه مثلا در کنار الگوریتم سایز محدودیت میم تایپ یا پسوند هم داشته باشن.روش های بایپس کردن آپلود فایلبا توجه به نوع الگوریتمی که آپلودر استفاده میکنه روش های بایپس متناسب با اون الگوریتم وجود داره.برای مثال : الگوریتم extension که مربوط به پسوند فایل میشه روش های بایپس مختلفی داره. برای نمونه میشه برای فایل مورد نظرمون دو نوع پسوند (Double Extension) قرار بدیم. به این شکل که اگه فایل ما shell.phpباشه یک فرمت مجاز به انتهاش اضافه میکنیم که میشه shell.php.jpegیا تغییرات دیگه ای توی نام و پسوند فایل . چند نمونه از این تغییرات:Shell.php;.jpegShell.php/Shell.PhPshell.php.jpg%00و خیلی تغییرات دیگهیا میشه از پسوند های محدود نشده استفاده کرد. به این شکل shell.php5نکته:فایل های php با چندین نوع پسوند قابل اجرا هستن از جمله : phtml،php3 ، php4 ، php5، phpsاز روش های دیگه بایپس مخلوط کردن شل مورد نظر با فایل عکس هست که با استفاده از برنامه edjpgcom میشه اینکارو انجام داد.همچنین با استفاده از برنامه burp suite و افزونه هایی مانند live http headers و Tamper Data میشه این انواع دیگه الگوریتم هارو بایپس کرد و فایل مورد نظر رو آپلود کرد.روش های جلوگیری از باگ RFU1- جدا کردن محل اپلود از دایرکتوری اصلی2- محدود کردن پوشه فایل های اپلود شده3- استفاده از فایروال های مختلف برای جلوگیری از آپلود فایل مخرب4- اعمال محدودیت از طریق کد نویسی5- استفاده از سرور جدا گانه برای فایل های دانلود6- و ... پایان.