چگونه توانستم با پارامتر refurl بر روی وبسایت Digikala.com آسیبپذیریهای XSS Stored و XSS Reflected را کشف کنم؟
آنچه میخوانید، رایتآپ رامین فرجپور، برنامهنویس و محقّق امنیتی، از فرآیند کشف آسیبپذیری بر روی وبسایت دیجیکالا است.
داخل پرانتز:
۱. این رایتآپ با هماهنگی تیم امنیت دیجیکالا منتشر شده است.
۲. رامین گزارش مربوط به این آسیبپذیریها را حدود ۳ سال قبل با دیجیکالا در میان گذاشته و در حال حاضر آسیبپذیری نیز به طور کامل رفع شده است.
۳. این تست فقط یک نمونه آسیبپذیری از این سرویس را نمایش میدهد. در این تست هیچگونه آسیبی به سایت دیجیکالا وارد نشده است.
آنالیز جزییات آسیبپذیری
Reflected XSS
پارامتر refurl آسیبپذیر میباشد.
مثال:
https://accounts.digikala.com/Load/login/?refurl=javascript:alert(document.cookie);
اگر به لینک بالا وارد شوید، صفحهی ورود نمایش داده میشود. سپس نام کاربری و رمز ورود را وارد کنید و دکمهی ورود به سایت را کلیک کنید، کد جاوااسکریپت اجرا خواهد شد.
تصویر:
برای جلوگیری از بروز این آسیبپذیری:
در این لینک متدی برای جلوگیری از ورود کاراکترهای خاص که در پارامترها استفاده نشده بود، تعریف گردید.
https://template.digikala.com/Digikala/bundles/js_main?v=6mUwhbgor7RBFb0VZhGnL9U7kQBLxdEGqLjDkgqCMuY
1function CheckForPotentiallyDangerous(n) { 2 3var r = [" ", " ", " ", " ", " ", " ", " ", "%2B", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], 4 5t = ["&", "^", "*", "/", ">", "<", "'", "+", "-", "%", "=", '"', "\\", ".", "!", ")", "(", ":", "~"]; 6 7for (i = 0; i < t.length; i++) n = n.replaceAll(t[i], r[i]); 8 9return n.trim() 10 11} 12
XSS Stored
این آسیبپذیری را در قسمت آدرس سایت دیجیکالا کشف کردم.
Payload :
1‘><img src=x onerror=alert(1);> 2