آموزش باگ RFU و جلوگیری از آن

سلام! باگ RFU یا Remote File Upload رو میخواهیم مورد بررسی قرار بدیماین باگ زمانی رخ میده که برنامه نویس آپلودر رو درست کانفیگ نکرده باشهاین باگ به نفوذگر اجازه اعمال کد های مخرب و دسترسی به سرور رو میده که همین فرایند آپلود shell یک مشکل هستاعتبارسنجی های سمت مشتری (Client-Side Filters Validation)اعتبارسنجی سمت مشتری یک اعتبار سنجی هست که قبل از ورود ورودی ها انجام میشه و این تو مرورگر وب توسط html5,VBscript,Javascript اتفاق میوفته.این اعتبارسنجی ها برای اینه که کاربر تجربه بهتری موقع کار با سایت داشته باشهدور زدن فیلترهای سمت مشتری (Client-Side Filters Bypass)با خاموش کردن JavaScrpit در مرورگر میتوانیم به راحتی از این اعتبارسنجی عبور کنیمدستکاری درخواست های HTTP قبل از ارسال درخواست به سرورمحدود کردن نام فایلخب برای اینکه بتوانیم درست از این اعتبار سنجی عبور کنیم باید مانند برنامه نویس فکر کنیممثلا من اگر برنامه نویس اون سایت بودم یک whitList یا BlackList مربوط به پسوند فایل ها درست میکردم که فقط فایل هایی که این پسوند را دارند اجازه آپلود داشته باشن مثل : png,jpg,jpeg,gif و......از WhitList ها بیشتر استفاده میشه چون فقط به چند فایل اجازه آپلود میده اما تو BlackList ها باید بیایم چندین فایل رو محدود کنیم دور زدن محدودیت نام فایلبایپس BlackList : به عنوان مثال یک شل رو که به زبان php هست را میتونیم با تغییر پسوند این فایل قبل از ارسال درخواست تغییر بدیم مثل :pht, phpt, phtml, php3,php4,php5,php6 با استفاده از برنامه هایی مانند BurpSuite یا افزونه HTTP Header Live که امکان دستکاری درخواست رو به ما میدنburpsuiteبایپس WhiteList : یکی از ترفند های دورزدن لیست سفید، Null byte Injection است. مثلا قبل از ارسال درخواست به سرور در آخر فایل بعد از پسوند فایل (php) از 00jpg% استفاده کنیم.(بجای jpg میتوانیم هر پسوندی که سرور مجاز کرده استفاده کنیم)burpsuite -کوچک و بزرگ کردن حروف فایل مثلا php >> PhP یا phP و ...burpsuiteیا اینکه برای Content-name اسم فایل رو mygame.php;jpg قرار بدیم و بعد بیایم content-Type رو image/jpg قرار بدیماعتبار سنجی Content-Typeآپلودرها با بررسی شناسه فایل رو تایید میکنند مثل تصاویر که این هم قابل دور زدن است.بایپس Content-Typeبا تغییر Content-type از application/x-php به image/jpg میتونیم این محدودیت را دور بزنیمburpsuiteاعتبار سنجی Content-Sizeخب آپلودرها ممکنه مارو تو سایز فایل محدود کنن مثلا فقط به فایلی که کمتر از 1 مگابایت باشه اجازه آپلود بدنبایپس Content-Sizeبرای بایپس هم یا باید از شل کم حجم تر استفاده کنیم یا اینکه اندازه فایل رو موقع اسنیف کردن با burpsuite یا HTTP header Live تغییر بدیمخب حالا مثلا ما همه اینهارو بایپس کردیم ولی باز آپلود نمیشه، این بخاطر اینه که آنتی ویروس فایل رو میخونه و به ما اجازه آپلود نمیده.برای بایپس هم باید امضای فایل رو تغییر بدیم:شل رو با یک Hex Editor باز میکنم و در اولین بایت های اون عبارت زیر رو قرار میدیم :ffd8 ffdbو در آخرین بایت های اون هم عبارت زیر رو قرار میدیم:ffd9یک روش دیگه این هست که یک فایل htaccess.txt. رو بسازیم و داخل اون عبارت زیر رو قرار بدیم:AddType application/x-httpd-php jpgو بعد آپلود کنیم اینطوری اون سرور در دایرکتوری که فایل در اون آپلود شده فایل هایی که با پسوند jpg هستند رو با پسوند php اجرا میکنه و ما بعد آپلود این فایل، پسوند شل خودمون رو به jpg تغییر میدیم و شل رو آپلود و اجرا میکنیمخب گاهی میبینیم وقتی شل رو آپلود میکنیم مسیر اون فایل رو پیدا نمیکنیم :یکی از راه هاش اینه که اول یه فایل سالم رو آپلود کنیم و بعد میتونیم ببینیم که دایرکتوری که فایل در اون آپلود میشه کجاست و بعد شل رو آپلود میکنیم و حالا که آدرس اون دایرکتوری رو داریم، بعد اون دایرکتوری اسم شل خودمون رو میزاریم برای مثال:http://target.com/image/upload/shell.phpو یا اینکه میایم تمام دایرکتوری های سایت رو با ابزارهای directory finder در میاریم و سپس اسم شل خودمون رو بعد هر دایرکتوری میزاریم.بعد که شل رو آپلود و اجرا کردیم رمز شل رو وارد میکنیم و وقتی که وارد محیط شل شدیم درواقع به سرور دسترسی داریم و میتونیم اون رو دیفیس کنیم یا با نصب بکدورها دسترسی خودمون رو ارتقا بدیم!!!امن کردن آپلودر در برابر این باگاز یک فایروال خوب برای جلوگیری از این حملات استفاده کنیمبه همه کاربران اجازه آپلود فایل رو ندیمبرای آپلود محدودیت هایی بزاریمسرور دانلود و آپلود رو از خود سایت اصلی جدا کنیمو....امیدوارم که خوب و قابل فهم توضیح داده باشم !خدانگهدار!!!