Network Security Channel
2.57K subscribers
5.33K photos
3.42K videos
5.56K files
4.44K links
شروع از سال 1395
Security Operation Center (SOC)
Bug Bounty
Vulnerability
Pentest
Hardening
Linux
Reasearch
Security Network
Security Researcher
DevSecOps
Blue Team
Red Team
Download Telegram
⭕️Prototype Pollution

این آسیب پذیری در واقع مربوط میشه به زبان javascript که به هکر اجازه میده تا بیاد propertyهای دلخواه خودش رو به prototype(والد اولیه) یک Object عمومی اضافه کنه.
در واقع در این آسیب پذیری هکر میتونه بیاد propertyهای شی ها (Objectها) رو تغییر بده که در حالت عادی بهشون دسترسی نداره.
البته این آسیب پذیری به تنهایی قابلیت Exploit نداره و impactش رو باید هکر با ترکیب کردن با آسیب پذیری های دیگه مثل XSS بالا ببره!

در ابتدا بهتره یک سری مرور بر مفاهیم اولیه javascript داشته باشیم:
همانطور که میبینیم توی javascript همه چیز یک Object یا شی هست.
یک Object در javascript مجموعه ای از کلیدها و مقادیر اون هاست که بهش میگن Key-Value که این مقادیر میتونن از هر نوع داده باشن(bool,string,int,...)
حالا میتونیم تو javascript به راحتی یک شی بسازیم:
userInfo = {
"username":"admin",
"password":"1qaz2wsx3edc",
"email":"[email protected]"
}


خب حالا برای دسترسی به propertyهای این Object که ایجاد کردیم میتونیم از دو روش استفاده کنیم:
روش اول: استفاده از نقطه
userInfo.username


روش دوم: استفاده از براکت
userInfo["username"]

در ادامه قراره یکی از این دو روش برای آلوده سازی Prototype(والد اولیه) یک Object استفاده کنیم.

وقتی property از یک Object رو صدا میزنیم , موتور javascript اول سعی میکنه تا اون property رو مستقیما از داخل همون Object بخونه.
حالا اگه اون Object چنین property رو نداشته باشه , javascript شروع میکنه و میره عقب و داخل Prototypeهای(والد های اولیه) اون Object میگرده.

برای درک بهتر این موضوع بهتره که بری تو Console مروگر خودت و یک Object بسازی , javascript با توجه به نوع Object ساخته شده به صورت خودکار اون رو متصل میکنه به یکی از Prototypeهای اولیه از پیش ساخته شده.
نمونه:
var name = "Arya";
name[<properties>]
name.<properties>

نوع Object که من ساخته بودم یک string بود. حالا وقتی سعی میکنم با استفاده از نقطه یا براکت به یکی از propertyهای Object دسترسی پیدا کنم , مرورگر کلی property بهم نشون میده که من اونا رو نساختم!
چون javascript اومده و شی من رو به Prototype(والد اولیه) متصل کرده و Object که ساختم اومده از Object والد خودش , تمامی propertyهای مربوط به string رو به ارث برده(inheritance).
همچنین ما میتونیم با استفاده از کلمه ی کلیدی "proto" به prototype (والد اولیه) Object مورد نظر اشاره کنیم:
a.__proto__


حالا اگه یه هکر بیاد و property که مربوط به یک Prototype هست رو باز نویسی کنه( property که داره وب اپلیکیشن داره ازش استفاده میکنه, چه تو فرانت چه تو بک) اینجاس که مفهوم آلوده سازی یا Prototype Pollution میاد وسط!


💡متودولوژی تست کردن parameter
pollution
در ابتدا URL رو بدین صورت وارد کن و درخواستو ارسال کن:
روش اول: استفاده از نقطه
https://target.com/?__proto__.arya=arya


روش دوم: استفاده از براکت
https://target.com/?__proto__[arya]=arya

+ در صورت گیر دادن WAF به proto میشه از constructor استفاده کرد:

/?constructor.prototype.arya=arya
/?constructor[prototype][arya]=arya


حالا اگه باز هم WAF گیر بود باید از تکنیک تو در تو استفاده کنیم برای bypass WAF:
/?__pro__proto__to__[arya]=arya
/?__pro__proto__to__.arya=arya
/?constconstructorructor[protoprototypetype][arya]=arya
/?constconstructorructor.protoprototypetype.arya=arya


حالا برای اینکه مطمئن بشیم تونستیم یه property رو آلوده کنیم و به prototype اضافه کنیم باید یه Object بسازیم توی Console مرورگر و بعدش تست کنیم:
test = {}; 
test.arya // show arya

بله, در صورت نشون دادن مقدار property که آلوده کردیم یعنی آسیب پذیری Prototype Pollution روی تارگت وجود داره.


#part1
#prototype_pollution

🔹 Share & Support Us 🔹
📱 Channel : @Engineer_Computer
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥1👏1