وبلاگ

آموزش اکسپلویت آسیب پذیری javaScript Prototype Pollution و نحوه یافتن آن

با سلام خدمت تمامی کاربران عزیز سایت Vip Security

در این پست قصد داریم به یکی از آسیب پذیری های مهم در برنامه های جاوا اسکریپتی بپردازیم که شاید افرادی کمی از این آسیب پذیری اطلاع داشته باشند‌! 

خب اول نیاز هست که ما کمی از مباحث پایه بگیم و بعد بریم سراغ آسیب پذیری 😁

 

جاوا اسکریپت چیست؟

جاوا اسکریپت یک زبان برنامه نویسی هست که به صورت pure آن را در صفحات وب در بخش فرانت اند استفاده میکنند اما میتواند از طریق بعضی فریمورک ها از آن در جا هایی مثل ساخت برنامه اندروید و ios یا ساخت برنامه ویندوز و حتی استفاده به عنوان زبان سمت سرور هم به کار برد

 

Object ها در جاوا اسکریپت؟

Object یک گروهی تز کلید و مقدار هست اگر بخوام راحتر بگم یعنی گروهی از یکسری نام خواص و مقادیر آن ها که به اصطلاح به آن properties یک Object می گویند برای مثال :

 

 
در جاوا اسکریپت، Object یک شی پایه است، الگوی تمام اشیاء تازه ایجاد شده و  این امکان هست که با مقدار null هم بشه Object درست کرد با این حال، شی جدید ایجاد شده نیز دارای نوعی است که با پارامتر ارسال شده مطابقت دارد و تمام خصوصیات اصلی را به ارث می برد.
 
 

توابع و کلاس ها ( Functions and Class ) در جاوا اسکریپت:

در جاوا اسکریپت، مفاهیم کلاس و تابع کاملاً به هم مرتبط هستند (خود تابع به عنوان constructor کلاس عمل می کند و ماهیت واقعی مفهومی از “کلاس” در جاوا اسکریپت ندارد). مثال زیر را ببینیم:

 

 

Prototypes در جاوا اسکریپت :

نکته ای که باید به آن توجه داشت این است که ویژگی prototype را می توان در هنگام اجرای کد تغییر/تغییر/حذف کرد. به عنوان مثال، توابع به کلاس را می توان به صورت پویا اضافه کرد:

 

 

ارث بری ( Inheritance ) در  جاوا اسکریپت :

در یک برنامه مبتنی بر Prototypes ، اشیا ( Object ) properties/methods را از کلاس ها به ارث می برند. کلاس ها با افزودن properties/methods به نمونه ای از کلاس دیگر یا با افزودن آنها به یک شی خالی مشتق می شوند.
توجه داشته باشید که اگر یک خاصیت را به یک شی اضافه کنید که به عنوان prototype برای مجموعه ای از اشیاء استفاده می شود (مانند myPersonObj)، اشیایی که prototype آن است نیز ویژگی جدید را دریافت می کنند، اما آن ویژگی چاپ نمی شود مگر اینکه به طور خاص فراخوانده شد.

 

 : در جاوا اسکریپت __proto__ pollution

خب تا اینجا شما باید دانسته باشید که یک Object چطور درست میشود و محتویات آن چیه پس Object ها گروهی از Key و Value هستن که همه Object که همه Object ها به صورت پیشفرض از تابعی/کلاسی به نام Object ارث بری میکند این بدان معنی است که اگر بتوانید نوع Object را آلوده کنید، هر شی جاوا اسکریپت محیط آلوده می شود! جالبه نه 😎🤐

 

 

prototype pollution در جاوا اسکریپت :

این تکنیک به اندازه روش قبلی موثر نیست زیرا نمی توانید طرح JS Object را آلوده کنید. اما در مواردی که کلمه کلیدی __proto__ ممنوع است این تکنیک می تواند مفید باشد.
اگر بتوانید ویژگی های یک تابع را تغییر دهید، می توانید ویژگی نمونه اولیه تابع را تغییر دهید و هر ویژگی جدیدی که در اینجا اضافه می کنید توسط هر شیء ایجاد شده از آن تابع به ارث می رسد

 

 

یکی از اکسپلویت های خیلی خوب برای نمونه در اینجا براتون کمی توضیحاتش را میگیم ولی برای درک بهتر حتما به این رات آپ سر بزنید

 

AST Injection, Prototype Pollution to RCE :

در NodeJS، AST در JS اغلب به عنوان موتورهای قالب و تایپ اسکریپت و غیره استفاده می شود.
برای موتور قالب، ساختار همانطور که در بالا نشان داده شده است.

Handlebars :

برای تعیین احتمال حمله می توانید هر رشته ای را در Object.prototype.pendingContent وارد کنید.
این به شما امکان می‌دهد مطمئن شوید که سرورها از موتور فرمان استفاده می‌کنند، زمانی که یک prototype pollution در یک محیط جعبه سیاه وجود دارد.

این کار توسط تابع appendContent javascript-compiler.js انجام می شود
appendContent این استکه اگر محتوای در انتظاری  وجود دارد، به محتوا اضافه کنید و برمی‌گرداند.
pushSource محتوای در انتظاری  را undefined  می‌کند و از درج چندباره رشته جلوگیری می‌کند.

اکسپلویت ( Exploit ) :

دسته ها همانطور که در نمودار بالا نشان داده شده است کار می کنند.
پس از تولید کننده lexer و generater AST، به compiler.js منتقل می شود
ما می توانیم کامپایلر تابع قالب generated با برخی آرگومان ها را اجرا کنیم. و رشته را مانند “Hello posix” برمی گرداند (زمانی که msg posix باشد)

برای اطلاعات بیشتر این اکسپلویت میتونید به لینک  سر بزنید : https://blog.p6.is/AST-Injection

امیدوارم که از این آموزش نهایت استفاده رو برده باشید و براتون مفید واقع شده باشه 😉

 

 : prototype و __proto__  pollution ویدیو آموزش فارسی آسیب پذیری

 

برای مشاهده ویدیو حتما vpn خود را روشن کنید و حتما کانال یوتوب ما رو هم دنبال کنید !

 

دوره ای در زمینه تست نفوذ وب

اشتراک گذاری:

مطالب زیر را حتما مطالعه کنید

2 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

دیدگاهتان را بنویسید