سلام دوستان امیدوارم حالتون خوب باشه. در این پست میخوام درباره آسیبپذیری که چند روز پیش پیدا کردم با شما به اشتراک بگذارم. قبل از اینکه شروع کنیم لازمه یکم مقدمه کوچیک از چند تکنولوژی مربوط به آسیبپذیری که مهمه در نظر داشته باشین. ساختار به این شکلی خواهد بود:
- تعریف Amazon Web Service یا AWS
- تعریف Amazon EC2
- تعریف AWS Metadata
- آسیبپذیریSSRF
- کشف آسیبپذیری
تعریف Amazon Web Service یا AWS
AWS (سرویس وب آمازون) یک پلتفرم رایانش ابری جامع و در حال تحول است که توسط آمازون ارائه شده است. این تکنولوژی شامل ترکیبی از زیرساخت به عنوان سرویس (IaaS)، پلت فرم به عنوان سرویس (PaaS) و نرم افزار بستهبندی شده به عنوان سرویس (SaaS) است. سرویس های AWS می توانند ابزارهایی مانند توان محاسباتی، ذخیره سازی پایگاه داده و خدمات تحویل محتوا را به کاربر ارائه بده. AWS به سرویس های مختلفی تقسیم می شود. هر کدام را می توان به روش های مختلف نیاز کاربر برطرف کرد. برای مطالعه بیشتر به اینجا مراجعه کنید.
هر نوع برنامه وب که میخواید اجرا کنید، به یک سرور نیاز دارید ، بعضی وقتا ممکنه به سرور بزرگ گاهی اوقات ممکنه به سرورهای کوچکتر نیاز داشته باشید، اگر بتوانید سریع و ارزان این سرورها را به دست بیارید، کار خیلی راحت تر و بدون دردسر میتونه ادامه پیدا کنه نه؟ اینجاست که Amazon EC2 وارد کار میشه EC2 این امکانو به شما میده که سرورهای مجازی را در فضای ابری به سرعت و ارزان به دست آورید. EC2 خیلی مزایای خوبی داره برای مطالعه بیشتر به اینجا مراجعه کنید.
تعریف Amazon EC2
تعریف AWS Metadata
Metedata یا “فراداده” دادههایی که اطلاعات مربوط به سایر دادهها را فراهم میکنند به عبارت دیگر، فراداده «دادههایی درباره دادهها» است. در AWS این داده ها مربوط به نمونه خود را که می توانید برای تنظیم یا مدیریت نمونه در حال اجرا و استفاده است. این داده شامل اطلاعات کاربر و فراداده های مربوط به تکنولوژی در حال استفاده است. در AWS شما متونید با استفاده از ای پی http://162.254.169.254/latest/mete-data به این اطلاعات دسترسی پیدا کنید. نکتهای که اینجا خیلی مهمه اینه که شما فقط و فقط از localhost میتونید به این دادهها دسترسی پیدا کنید. به عبارتی فقط اطلاعاتی که مال شماست دسترسی دارید.
اینم نمونه از اطلاعاتی که من به اون دسترسی دارم. فقط من هم به اونا دسترسی دارم چون این EC2 رو خریدم.
آسیبپذیریSSRF
آسیبپذیری Server Side Request Forgery یا SSRF اگه به طور ساده میخوام بگم یک آسیبپذیریه که سرور رو مجبور میکنه به یه جای دیگه درخواست HTTP بفرسته. خب همونطور که حدس زدید همه چی سمت سرور اتفاق میفته و بیشتر مواقع به شما این امکانو میده که دادههایی و کلا چیز هایی که در سرور وجود داره رو بخونید خب حالا چرا و چطور این اتفاق میفه؟ مشکل از اونجا نشأت می گیره که کنترل منابع خارجی که سایت از اونها استفاده می کنه خوب انجام نمیشه.
برای مثال بگیم که سایت مموریلیکس از یه سورس یا وبسایت دیگه داره یک چیزی رو میخونه دی این مثال یه عکس از گوگل
https://memoryleaks.ir/?pictureUrl:https://google.com/flower.jp
خب ما هم به این کوری “pictureUrl” دسترسی داریم یعنی میتونیم هر چیزی که دلمون بخواد بدیم. اگه به این “pictureUrl” بگیم که مثلا به جای گوگل یه چیز دیگه رو فراخونی کن و این اتفاق انجام بیفته و چیزی که ما دادیم فراخونی بشه خب یه آسیبپذیری SSRF رو دست ماست. خب حالا سوال اینجاست که چیزی که ما میدیم چیه معمولا از نظر یه هانتر ما میخواییم اطلاعات سرور رو بخونیم طبیعتا مثلا چندتا از پیلود هایی که میتونیم بدیم:
file:///etc/passwd
یا اگه تارگت شما داره از AWS استفاده میکنه میتونید اون اطلاعات “Meta-data” رو فرا بخونید و بدون هیچ مشکلی میتونید دسترسی پیدا کنید چرا چون از خود سرور ریکوست زدین.
مثلا برای خوندن اطلاعات AWS EC2 کافیه پیلود پایین رو به “pictureUrl” یدین:
http://169.254.169.254/latest/meta-data/iam
یه چیز دیگه که میتونید اکسپلویت کنید “Port Scan” و “Protocol Enumeration” هستش که برای تشخیص اینکه کدوم پورت رو سرور بازه یا باید به زمان Response سرور توجه کنیم یا بعضی وقتا خود سرور میگه که بازه یا نه
پیلود پورت اسکن:
http://127.0.0.1:22
کشف آسیبپذیری
آسیبپذیری که پیدا کردم مربوط به یه برنامه پرایوت بود که یک function آپلود داشتن من همیشه این آپلودو یه نگاهی میکنم بش خب اینم فرق نداره یه نیم ساعت تستش کردم و کلا یک چیز توجهمو جلب کرد که موقع آپلود یک ریکوست PATCH با پارامتر “PictureUrl” تو body داشت همونطور که حدس زدید مستقیم رفتم برای تست SSRF. ولی هرچی که به “PictureUrl” میدادم هیچ اتفاقی نمایفتاد. خب من میدونستم که تارگت از تکنولوژی AWS استفادی میکرد واسه همین اخرین پیلودی که دادم این بود:
” http://169.254.169.254/latest/meta-data/iam” هیچ اتفاقی نیافتاد رفتم دنبال یه چیز دیگه بگردم.
بعد حدود یک ساعت یه functionality جالب پیدا کردم که همه اطلاعات پروفیلتون رو میتونید به صورت یک کارت دانلود کنید که شامل اسم تاریخ تولد عکس پروفایل و اینجور چیزا.
وقتی رو این دانلود کلیک میکنید در Response یه مقداری که base64 انکودد هم هست وجود داره خب منم از کنجکاوی دیکود کردم دیدم همون اطلاعات http://169.254.169.254/latest/meta-data/iam
پس چیزی که اینجا اتفاق میقته یک ریکوست به اون “PictureUrl” میفرسته هرچی مقدارش باشه سعی میکنه بخونتش.
خب اینم چند نمونه از اطلاعات AWS
خب من انجا باگو ریپورت کردم بعد یک روز دوباره سعی کردم اینبار فایل های سیستم رو بخونم با این پیلود شروع کردم “file:///etc/passwd” همه چی هم اوکی بود
خب دوستان امیدوارم لذت بردین از این ورایت آپ.
منو میتونید در تویتر دنبال کنید.
سلام اطلاعات رو توی فایلی که دانلود میشد میخوندید یا از طریق ریسپانس؟
سلام, از ریسپانس
سلام مجدد,
یعنی اون مقدار بیس ۶۴ از ریسپانس رو دیکد میکردید و اطلاعات aws داخلش بود ؟
مثل این عکس که قرار دادید؟
https://memoryleaks.ir/wp-content/uploads/2021/11/image-6-1024×372.png
ممنون
دقیقا وقتی روی دانلود کلیک میکنی سعی میکنه مقدار اون pictureUrl رو بیاره تو ریسپانس همین دانلود این بیس ۶۴ بود که اطلاعاتو داشت
عالی بود .دستت درد نکنه لذت بردم
جالب بود خیلی
سلام
عالی بود ممنون
سلام وقت بخیر
ببخشید یه سوال داخل این مسیر چه اطلاعاتی هست؟http://169.254.169.254/latest/meta-data/iam
به جای ای پی ۱۶۹ می تونیم ای پی ۱۲۷.۰.۰.۱قرار بدیم؟