( Remote | Arbitrary | Unrestricted ) File Upload

سلام خدمت همه ی دوستان عزیزم، خب با مقاله ی آموزشی از این حفره ی امنیتی در خدمت شما هستیم و امیدوارم بتونم با اطلاعاتی که در اختیارتون قرار میدم سطح علمی شما رو بالا تر ببرم.توضیحات:در واقع وقتی ما تحت وب در حال ساخت یا پردازش یک وب اپلیکیشن هستیم ممکنه که گاهی اوقات نیاز به اپلود یه سری فایل داشته باشیم که این قابلیت آپلود فایل در مواقعی میتونه برای وب اپلیکیشن ما خطرناک واقع بشه.اما چطوری؟ در اثر محدود نکردن پنل آپلود به پنل مدیریت و رها کردن آن بدون امنیت کافی یا توجه نکردن به اهمیت فرمت های آپلودی غیرمجاز مثل php asp aspx php5 shtml ,.... میتونیم باعث به وجود اومدن چنین حفره ی امنیتی بشیم که عواقبش میتونه موارد زیر باشه:1.تصرف کامل سیستم2.تصرف کامل دیتابیس3.حملات سمت سرور یا سمت کلاینتدر واقع این حملات بستگی داره به اینکه فایل مخرب آپلود شده چه قابلیت ها و توانایی هایی داشته باشه. عوامل خطر آفرین:این آسیب پذیری همون طور که گفته شد میتونه خطرهایی سمت سرور و کلاینت به وجود بیاره و از سمتی احتمال شناسایی این باگ توسط هکر بسیار بالاست در نتیجه این آسیب پذیری به شدت خطرناک است.نکته بسیار مهم: باید چک بشه که دسترسی برای آپلود محدود شده باشه و فرمت های کمی قابل آپلود و حتی اجرا باشه!حمله ی سمت سرور:وب سرور میتونه توسط یه فایل مخرب(شلر) که قابلیت خواندن و نوشتن روی فایل های سرور و گشتن بین فایلها و حمله به سرور رو داشته باشه در معرض خطر جدی قرار بگیره.حمله ی سمت کلاینت: در این حمله اگر فایل آپلودی ما خطرناک باشد میتوان به کل پنل مدیریت و فایل ها دسترسی داشت یا باگ های دیگه از قبیل : XSS و Crosss-Site-Content-Hijacking و Buffer-Over-Flow رو تولید کرد.مثال هایی برای اجرای این حمله:1. آپلود کد فایل jsp که به عنوان اعمال یوزر آپلود میشه.2. آپلود فایل gif با استفاده از حفره ی امنیتی در کتابخونه ی تصاویر.3. آپلود یک فایل بسیار بزرگ که برای از دسترس خارج کردن سرویس به کار میاد.4. آپلود فایلی با نام خطرناک یا در آدرسی خطرناک.5. آپلود فایل با پسوند rar چونآنتی ویروس بررسی میکنه و اگه اون آنتی ویروس مشکل امنیتی داشته باشه قابلیت اجرای دستور داده میشه.6. آپلود فایل ویروسی exe در مخزن دانلود که این امر باعث میشه مشتری های بسیار زیادی آلوده بشن.7. آپلود یه فایل html که دارای اسکریپت مخرب باشه.8. آپلود یه فایل jpg مخرب که باعث میشه بتونیم به عنوان Cross-Site-Content-Hijacking ازش بهره ببریم. خب گاهی اوقات هست که سرور یا وب اپلیکیشن ما قوی تر از حد انتظار ماست (آنتی شلر داره فرمت فایلها رو محدود کرده پنل آپلود در دسترس نیست و...) اما در این حالت چه باید کرد؟مقوله ی محافظت نه چندان قوی و بایپس:تصور کنید ما سایتی داریم و الان در پنل ادمین هستیم یا لااقل جایی برای آپلود فایل های مخرب خودمون پیدا کردیم اما سایت اجازه ی آپلود مستقیم به ما نمیده باید چه کرد؟اینجا در قدم اول باید توجه کنیم و ببینیم که چه فرمت هایی از فایل اجازه ی آپلود دارند (در واقع پیدا کردن فرمت هایی که به صورت یه اشتباه فراموش شده و از آپلود اونها جلوگیری نشده!)مثل فرمت های: “php5” “pht" “phtml” “shtml” “asa” “cer” “asax” “swf” “xap”در قدم دوم میتونیم توجه کنیم شاید وب سرورمون به تبدیل فرمت های دوتایی آسیب پذیر باشه و اینطوری بشه کارهایی کرد مثل:تصور کنید یه عکس اپلود میکنید برای تست کردن آپلودر و میبینید که آدرس فایل به این شکل هست:site.com/file.jpg/index.phpدر اینجا خیلی راحت میتونیم محتویات فایل عکس رو php قرار بدیم تا حالت اجرایی به خودش بگیره!نکته ی بعدی مربوط به وب سرور آپاچی هست که در مواقعی که به طور مثال پسوند jpg آزاد هست اونوقت ما به راحتی میتونیم از باگ آپاچی یعنی آپلود فایل دو پسونده استفاده کنیم، file.php.jpg و اینطوری به راحتی فایل مخرب رو اجرا میکنیم( البته در بعضی مواقع چون از حالت پیش فرض خودش وب سرور رو درآوردن پس مجبور میشیم از افزونه های کمکی یا ابزار ها استفاده کنیم برای آپلود که در زمان ارسال درخواست برای اپلود فرمت فایل که jpg بوده رو به php تبدیل کنیم و یه جورایی اینم نوعی بایپسه!).بعد از اونها میرسیم به نسخه های IIS 6 و نسخه های قبل تر از اون که فایل آپلودی ما میتونست به شکل زیر باشه:file.asp;.jpg و به این ترتیب وقتی آپلود میشد file.asp اجرا میشد.نکته ی بعدی مربوط به عملیات CaseChanging هست که با این عملیات در متد بایپس waf در SQLi آشنا شدیم اما اینجا به چه شکله؟مثال: file.Asp - file.pHtmLو به راحتی میبینید که آپلود میشه!یا در ویندوز 8.3 میتونیم به راحتی با تغییر نام های web.config به web~1.con یا .htaccess به HTACCE~1 اونها رو آپلود و اجرا کنیم.بایپس بعدی میتونه در مورد این باشه که مثلا در وب سرور IIS میومدیم و فایل php آپلود میکردیم که اونها رو به > یا < تبدیل میکرد که میتونیم بسیار ساده در مرحله ی اول اون رو به برای مثال برای web.config بیایم web>> بنویسیم تا آپلود بشه یا از سینگل کوتیشن استفاده کنیم، به این شکل: 'web"config و خیلی ساده فایل اپلود و اجرا میشه!برای بایپس بعدی میتونیم به این شکل عمل کنیم:file.asp ----> upload failed. file.asp. ---> uploaded successfully. file.asp ... ... . . .. ... ---> uploaded successfully.بایپس بعدی یافتن اشکالی در تکنیک های تشخیص فرمت فایل هست که که میتونیم با استفاده از پسوند های 3 تایی یا بیشتر آپلود رو تکمیل کنیم: file.txt.jpg.php - file.txt.jpeg.php5 - file.jpg.png.shtmlبایپس بعدی از استفاده از کارکتر null (0x00) که با قرار دادن null بعد از پسوند ممنوعه و قبل از پسوند مجاز میتوان به صورت احتمالی بایپسی رو شکل داد ( نادر هست).مثل:file.asp.0x00.jpgبایپس بعدی معمولا در ویندوز کابرد داره:به این شکل که به راحتی میایم با استفاده از متاکارکتر ":" بایپس رو انجام میدیم با فرض ممنوعه بودن php و مجاز بودن png میتونیم اینطوری اپلود کنیم:file.php:.pngو به راحتی آپلود میشه!البته گاهی اوقات هم میشه از این نوع الگوریتم برای بایپس استفاده کرد :::$data. ------>>>> example ---->file.asp::$data.بایپس بعدی که میخوام براتون بگم و خیلی باحاله(اینم توی بایپس های waf خاص SQLi وجود داره به این شکل که مثلا union select اجرا نمیشه اونوقت مجبور میشیم به این شکل بنویسیم :uniunionon selselectect ------->>>>>>>>> annnnndddd ----> Bo0oM!!! Bypassed!خب چه ربطی به کار ما داره؟ در مواردی ما میتونیم برای باگ RFU هم از این حالت استفاده کنیم برای بایپس:file.a.aspsp ---->>> run like --->>> file.asp !!راه آخری هم که طبق تحقیقات به دستم رسید استفاده از اسم فایل های غیر مجاز در ویندوز هست که خب طبیعتا برای IIS کاربرد داره ( فکر کنم همه اینو میدونیم که با این لیست اسم ها نمیشه فایلی با این اسم ها ساخت): CON - PRN - AUX - NUL - COM1 - COM2 - COM3 - COM4 - COM5 - COM6 - COM7 - COM8 - COM9 - LPT1 - LPT2 - LPT3 - LPT4 - LPT5 - LPT6 - LPT7 - LPT8 - LPT9البته راهی برای ساختن فولدری با تاین نام ها وجود داره اما خب به صورت معمولی قابل انجام نیست!خب چرا این بحث رو پیش کشیدم؟ بابت اینکه این هم روشی از بایپس ها هست که میتونیم با تغییر نام فایل ها به نام های غیر مجاز ارور های جالبی از سایت بگیریم که باعث بشه روش های بایپس جدید به دستمون برسه.دورک و مثالی برای باگ RFU : این دورک برای ادیتور فایل هست که مکانی برای آپلود فایل هم در اختیار ادمین قرار میده که متاسفانه از پنل آزاد بدون محدودیت رنج میبره:Dork: inurl:"editor/filemanager/connectors/php/userfiles/"Exploit: /fckeditor/editor/filemanager/connectors/uploadtest.htmlExample: 1. https://www.udrzba-stroju.cz/exter/fckeditor/editor/filemanager/connectors/php/UserFiles/2. https://www.udrzba-stroju.cz/exter/fckeditor/editor/filemanager/connectors/uploadtest.htmlموفق باشید.