‹ بازگشت به کتابخانه‌ی رایت‌آپ‌ها
Insecure Deserialization شدت: بالا

Magic Hash: دور زدن مقایسه‌ی رمز با Type Juggling در PHP

یک نوع خاص از آسیب‌پذیری Deserialization/Type Juggling که با یک رشته‌ی هش خاص، هر مقایسه‌ی رمز را true می‌کند.

نویسنده: تیم PentesterHub

در PHP، مقایسه‌ی غیر-strict (==) بین دو رشته که هر دو با 0e شروع می‌شوند و بقیه‌شان فقط رقم است (مثل 0e123456789)، به‌صورت عددی تفسیر و هر دو برابر صفر علمی در نظر گرفته می‌شوند — یعنی "0e123" == "0e456" نتیجه‌ی true می‌دهد! اگر یک رمز هش‌شده به‌طور تصادفی این الگو را داشته باشد و مقایسه با == (نه ===) انجام شود، یک "magic hash" آن را دور می‌زند.

ارتباط با Deserialization

این دسته از باگ‌ها معمولاً وقتی یک مقدار از یک آبجکت deserialize‌شده (که نوع واقعی آن قابل‌کنترل است) در یک مقایسه‌ی غیر-strict قرار می‌گیرد، ظاهر می‌شوند.

راه‌حل

همیشه از مقایسه‌ی strict (===) برای مقایسه‌ی رمزها و هش‌ها استفاده شود؛ و از توابع مقایسه‌ی امن در برابر timing attack مثل hash_equals().

تمرین عملی در آزمایشگاه‌های Insecure Deserialization ›