RFU =>Remote File Upload

یک باگ بسیار مخرب در سطح وب اپلیکیشن هاست که به وجود آمدن آن در یک آپلودر نا امن است....در ادامه بیشتر با این باگ آشنا می شویم:وقتی پرونده ای به سمت سرور آپلود میشوند اگر آلوده باشد باید هکر راهی برای اجرای آنها پیدا کند و معمولا این نوع پرونده ها یک شل است...عواقب بارگذاری این پرونده ها که محدودییتی روی آن نیست می تواند متفاوت باشد. از جمله تصرف کامل سیستم ، سیستم پرونده یا پایگاه داده بیش از حد مجاز ، حملات حمل و نقل به سیستم های back-end ، حملات سمت مشتری یا آسیب رساندن ساده این بستگی به این دارد که شل چگونه عمل کند و در کجا آپلود شود!!!انواع بایپس های این نوع باگ1. Blacklisting Bypass:با تغییر حروف فایل می توان لیست سیاه را دور زد. مثلا php را با حروف کوچک و بزرگ بنویسیم مثل PHp یا برای مثلا از این نوع بایپس ها استفاده کنیم: pht ، phpt ، phtml ، php3 ، php4 ، php5 ، php62. Whitelisting Bypass:بایپس های لیست سفید را دور بزنیم مثلا سرور از ما image.jpeg را قبول می کند و ما با استفاده از بایپس ها آن را دور بزنیم مثلا شل ما alfa.php هست و سرور آن را از ما قبول نمی کند و ما با استفاده از ترفند هایی باید آن را دور بزنیم: 1.به جای alfa.php بگذاریم alfa.php.jpeg (اینجا سور از ما jpeg را می خواند ولی سرور php را اجرا می کند) 2.می توانیم از بایپس دیگری استفاده کنیم و بیاییم alfa.php%2500.jpeg را قرار دهیم تا فایل ما آپلود شود(برای سایت هایی که نوع اول را فیلتر کردند میتواند جواب گو باشد)نکته:در سایت هایی که با iis نوشته شده اند در نسخه های قدیمی میتوانستیم با (;) بایپس کنیم مثل:alfa.php;jpeg البته در ورژن های قدیمی جواب گو هست3. Content-type Validation:سرور های یک mime type دارند که به این صورت است: Content-Type: application/octet-stream و ما می توانیم آن را با ایمیل جایگزین کنیم و به این صورت بنویسیم: content-type: image/jpeg در این حالت سرور را مجبور می کنیم که از ما قبول کند4. Content length Validation:می توان سرور را با استفاده از یک پیلود گول بزنیم مثل: ( <?=`$_GET[x]`?> ) دور بزنیم5.sizeاگر به اندازه فایل ایراد گرفت می توان سایز را تغییر دهید و به جای 10000b که قابل آپلود است بگذاریم 100000b بایپس های کوچکی که باید به آنها دقت بیشتری داشته باشیم:1.برای سایت های آپاچی می تواند پسوند php را با حروف کوچک و بزرگ مثل PhP دور زد2.برای سایت های iis میتوان پسوند asp را به asa و cer تغییر دهیم و فیلترینگ را دور بزنیم3.از نال استفاده کنیم مانند alfa.php%00.gif یا alfa.php%001.gif 4...روش های جلوگیری این باگاستفاده از یک htaccess:می توان برای سایت های php این قطعه کد را به عنوان یک اچ دی عکسس در پوشه ای که آپلود ها انجام می شوند قرار دهیم تا فایل های php وقتی آپلود شدند قابل اجرا نباشند php_flag engine off2.تایید نوع فایل:به این ترتیب که فایلهایی که کاربران می توانند اپلود کنند محدود باشد ولی هکرها میتوانند فایل خود را تغیر نام دهند به همین دلیل باید قبل از اپلود فایل درسایت پسوند های بعد از (.) را بررسی کند3.جلوگیری از آپلود فایل مخرب:سایت ها باید قبل از اپلود هر فایلی انرا توسط چند انتی ویروس ابزارهایو ضد بدافزار بررسی کند تا هکرنتواند فایل مخربی اپلود کند4.پاک کردن فایل های جایگزین شده:هکر ها میتوانند فایلهای خودرا جاسازی و یا تعبیه کنند به فرض مثال می توانند فایل مخرب خودرا با یه عکس ترکیب کنند و سایت باید برای جاوگیری از ان هر نوع فایلی که ترکیب و تعبیه شده را پاک کند ونذارد اپلود شود5.شناسایی کاربران:محدود کردن کسایی که میتوانند فایلی را در سایت اپلود کنند وقرار دادن دسترسی خاص 6.ذخیره فایل در محل جداگونه:به این صورت که اگر کاربر فایلی را اپلود کرد ان در سرور سایت و حتی در ادرس سایت هم ذخیره نشود واگر هکر فایل مخربی اپلود کرد ان فایل به سرور سایت دسترسی نداشته باشدویا جلوگیری ازدسترسی به فایلهای مهم (htaaccess , web.config.)که اینکار هم به صورت دستی وهم ازطریق سیستم خودکار اعمال میشود7.استفاده نکردن از متد put:استفاده نکردن یا حداقل استفاده از متد put وبه جای ان استفاده از متد post که ایمن تر استنتیجه کلی از این نوع باگ آسیب پذیر:هرگز بدون نداشتن فیلتر در لیست سفید ، نام پرونده و پسوند آن را مستقیماً نپذیرید.برای جلوگیری از این نوع حملات ، اندازه پرونده را به حداکثر مقدار محدود کنیددایرکتوری بارگذاری شده نباید اجازه "اجرا" داشته باشدبه افراد خاص و محدودی باید اجازه آپلود داده شود