فلسفه کلیدی: به جای درگیری مستقیم با فایروال (WAF) و استفاده از کاراکترهای عجیب، از رفتارهای استاندارد و ذاتی خود مرورگر استفاده کن تا از مسیرهای پنهان به اهدافت برسی.
مرورگرها یک ویژگی عجیب (و گاهی خطرناک) دارند: آنها برخی از تگهای HTML را به طور خودکار تبدیل به متغیرهای سراسری (Global Variables) در جاوااسکریپت میکنند.
کدام تگها را میتوان Clobber کرد؟
id: تمام تگهای HTML بدون استثنا (مثلاً <div id="config"> میشود window['config']).name: فقط تگهای خاص شامل: <form>، <img>، <a>، <iframe>، <embed> و <object>.ownerDocumentوقتی فایروال کلمه document را مسدود کرده است، چطور صفحه را کنترل کنیم؟
ownerDocument است که مستقیماً به شیء document اصلی صفحه اشاره میکند.id="my-span"), با صدا زدن self['my-span']['ownerDocument'] به document میرسیم!| ویژگی (Property) | کاربرد و ارزش |
|---|---|
ownerDocument |
رسیدن به شیء document (جایگزین مستقیم کلمه مسدود شده document). |
parentElement |
حرکت در درخت HTML به سمت بالا (رسیدن به <html> یا <body>). |
innerHTML |
خواندن محتوای تگ (مثل استخراج توکنهای امنیتی چاپ شده در صفحه). |
value |
استخراج متن تایپ شده توسط کاربر (مخصوص تگهای <input> یا <textarea>). |
attributes |
خواندن مقادیر مخفی داخل ویژگیهای تگ (مثل data-url). |
وقتی کلمات کلیدی، پرانتز () یا نقطه . مسدود هستند:
الف) تکهتکه کردن کلمات (String Concatenation) فایروال کلمات کامل را میشناسد، اما مرورگر میتواند تکهها را به هم بچسباند:
document یا ownerDocument['own' + 'erDocu' + 'ment']ب) فراخوانی توابع بدون پرانتز
وقتی پرانتز () مسدود است، نمیتوان توابع را صدا زد (Call). راه حل، تغییر مقدار (Assignment) است:
location.assign('...')self['loca'+'tion'] = '...'