سلام! باگ RFU یا Remote File Upload رو میخواهیم مورد بررسی قرار بدیم
این باگ زمانی رخ میده که برنامه نویس آپلودر رو درست کانفیگ نکرده باشه
این باگ به نفوذگر اجازه اعمال کد های مخرب و دسترسی به سرور رو میده که همین فرایند آپلود shell یک مشکل هست
اعتبارسنجی های سمت مشتری (Client-Side Filters Validation)
اعتبارسنجی سمت مشتری یک اعتبار سنجی هست که قبل از ورود ورودی ها انجام میشه و این تو مرورگر وب توسط html5,VBscript,Javascript اتفاق میوفته.
این اعتبارسنجی ها برای اینه که کاربر تجربه بهتری موقع کار با سایت داشته باشه
دور زدن فیلترهای سمت مشتری (Client-Side Filters Bypass)
محدود کردن نام فایل
خب برای اینکه بتوانیم درست از این اعتبار سنجی عبور کنیم باید مانند برنامه نویس فکر کنیم
مثلا من اگر برنامه نویس اون سایت بودم یک whitList یا BlackList مربوط به پسوند فایل ها درست میکردم که فقط فایل هایی که این پسوند را دارند اجازه آپلود داشته باشن مثل : png,jpg,jpeg,gif و......
از WhitList ها بیشتر استفاده میشه چون فقط به چند فایل اجازه آپلود میده اما تو BlackList ها باید بیایم چندین فایل رو محدود کنیم
دور زدن محدودیت نام فایل
با استفاده از برنامه هایی مانند BurpSuite یا افزونه HTTP Header Live که امکان دستکاری درخواست رو به ما میدن
-کوچک و بزرگ کردن حروف فایل مثلا php >> PhP یا phP و ...
یا اینکه برای Content-name اسم فایل رو mygame.php;jpg قرار بدیم و بعد بیایم content-Type رو image/jpg قرار بدیم
اعتبار سنجی Content-Type
آپلودرها با بررسی شناسه فایل رو تایید میکنند مثل تصاویر که این هم قابل دور زدن است.
بایپس Content-Type
با تغییر Content-type از application/x-php به image/jpg میتونیم این محدودیت را دور بزنیم
اعتبار سنجی 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 در میاریم و سپس اسم شل خودمون رو بعد هر دایرکتوری میزاریم.
بعد که شل رو آپلود و اجرا کردیم رمز شل رو وارد میکنیم و وقتی که وارد محیط شل شدیم درواقع به سرور دسترسی داریم و میتونیم اون رو دیفیس کنیم یا با نصب بکدورها دسترسی خودمون رو ارتقا بدیم!!!
امیدوارم که خوب و قابل فهم توضیح داده باشم !
خدانگهدار!!!