بیاین و فرض بگیرین زمانی که من یه عکس رو برای پست وبلاگم اضافه میکنم روی دکمه اپلود فایل کلیک کردم و توی چکی که با html داشت من اجازه داشتم فقط
.png اپلود کنم .درخواستمو با برپ رهگیری کردم و همچین درخواستی به سرور ارسال میشد با همچین بدنه ای :
form-data; name="file"; filename="photo.png"
content-type=image/png
PNG Byte
و در ریسپانس درخواست مسیری که فایل توی اون ادرس مینشست دقیقا به این حالت بود :
target/uploads/smfowmsfoeewofkewp.png
میخوام بدونم چک های امنیتی دقیقا کجاها هستند و چجوری میتونیم به نحوه ای اینارو بایپس کنیم ؟ سه نوع چک و تیک امنیتی توی اپلود فایل داریم :
1 - file extension name
2-content-type
3-magic byte
برای اولین قدم میخوام ببینم توی برپ سوییت اگه به جای png بزارم php ایا بایپس میشه ؟ نه
به من خطای اپلود رو میده و بهم ادرس فایل رو نمیده.
برای تست دوم سعی میکنم یه پسوند الکی بزارم مثل test و بله اپلود شد .
برنامه نویس از black list رو اجرا کرده که کار درستی نیست و نا امنه . چرا ناامنه ؟
چون برنامه نویس لیستی از اکستشن هایی که نباید اجرا بشه رو برای فایل اپلود گذاشته و من اگر بتونم اکستشنی توی بلک لیست نباشه و ولید باشه رو اپلود کنم میتونم یه سری دسترسی بگیرم .
برای تست سوم دست بردم به مجیک بایت (بایت عکس) و اگر بایتی رو از عکس کم یا زیاد میکردی اجازه اپلود نداشتی .
خب من جای خوبی برای تست دارم اولین کاری که میکنم سرچ میکنم که با چه پسوند هایی میتونم کد php رو اجرا کنم؟ یه لیست محدودی به من میده :
.php5 .php3 .phps .phtml .phar
دونه به دونه این اکستشن ها رو چک میکنم و تنها اکستشنی که دور میخورد این بود :
.phtml
خب من اسیپ پذیری رو زدم و کافی بود اخر مجیک بایت یه کد php بزارم و rce بگیرم .
ولی اینجا تموم نمیشه باید بریم سراغ ریشه .تمام سوال من اینه چرا فایل php با محتوای عکس اجرا میشه چه منطقی داره ؟
ببینید مرورگر چیزی به اسم اکستنشن رو نمیشناسه و براش فقط کانتنت تایپ و مجیک بایت مهمه پس چجوری فایل php اجرا میشه ؟
وب سرور فقط بر اساس اکستنشن چک میکنه و هر چیز اضافه تری رو نمیشناسه پس من وقتی زدم phtml وب سرور و انجین php متوجه شد که این یه پسوند ولید و معتبره و برای همین کامند اجرا شد و بایت عکس هم درون اون وجود داشت . دقت کنید اگر فایل شما درون داکیومت روت نشینه هیچوقت rce نداریم 🤌
همین نکته ریز و ساده میتونه به شما باگ بده و شما رو توی تحلیل فایل اپلود قوی تر کنه و اگر جایی برنامه نویس از بلک لیست برای چک اکستنشن استفاده کرده بود چشمتون رو تیز کنید 🌷
@Dagen_security