در حال بارگذاری...
بررسی آسیبپذیری تثبیت نشست (Session Fixation) که در آن مهاجم Session ID خود را به قربانی تحمیل میکند.
اهداف این درس
تثبیت نشست (Session Fixation) حملهای است که در آن مهاجم Session ID خود را به قربانی تحمیل میکند. وقتی قربانی با آن Session ID وارد حساب خود میشود، مهاجم میتواند با همان Session ID به حساب قربانی دسترسی پیدا کند.
حملهای که در آن مهاجم Session ID خود را به قربانی تحمیل میکند و بعد از ورود قربانی، با همان Session ID به حساب او دسترسی پیدا میکند.
| روش | مثال | تأثیر |
|---|---|---|
| URL | https://target.com/login?session=abc123 | Session ID در URL قرار میگیرد |
| Cookie | Set-Cookie: session=abc123 | Cookie در مرورگر ذخیره میشود |
| Form | <input type="hidden" name="session" value="abc123"> | Session ID در فرم ارسال میشود |
| XSS | document.cookie='session=abc123' | Cookie از طریق XSS تنظیم میشود |
1# دریافت Session ID قبل از ورود2curl -v https://target.com/login 2>&1 | grep -i 'set-cookie'34# ذخیره Session ID5SESSION_ID=$(curl -s -c - https://target.com/login | grep session | awk '{print $NF}')6echo "Session ID: $SESSION_ID"1# تحمیل از طریق URL2echo "https://target.com/login?session=$SESSION_ID"34# تحمیل از طریق Cookie5curl -v https://target.com/login -H "Cookie: session=$SESSION_ID"67# تحمیل از طریق فرم8curl -X POST https://target.com/login \9 -d "session=$SESSION_ID&user=admin&pass=admin"بعد از ورود قربانی، بررسی کنید آیا Session ID تغییر کرده:
1# بررسی Session ID بعد از ورود2curl -v https://target.com/dashboard -H "Cookie: session=$SESSION_ID" 2>&1 | grep -i 'set-cookie'34# اگر Session ID تغییر نکرده باشد، آسیبپذیری وجود دارد5# اگر Session ID تغییر کرده باشد، برنامه امن استSession Fixation میتواند منجر به تصاحب حساب کاربری، دسترسی غیرمجاز به اطلاعات حساس و سرقت هویت شود.
1# Django بهصورت پیشفرض Session ID را بعد از ورود تغییر میدهد2# اما میتوانید بهصورت دستی هم این کار را انجام دهید34def login_view(request):5 if request.method == 'POST':6 username = request.POST['username']7 password = request.POST['password']8 user = authenticate(request, username=username, password=password)9 10 if user is not None:11 # معتبر زدایی نشست قبلی12 request.session.flush()13 # ایجاد نشست جدید14 request.session.create()15 # ورود کاربر16 login(request, user)17 return redirect('dashboard')هشدار
هرگز Session ID را از URL نخوانید. این کار Session Fixation را بسیار آسانتر میکند.
Session ID باید بعد از ورود کاربر تغییر کند.
Session ID نباید از URL خوانده شود.
نشستهای قبل از ورود باید معتبر زدایی شوند.
این حمله نیاز به تعامل قربانی دارد.
در حمله Session Fixation، مهاجم Session ID را چه زمانی به قربانی تحمیل میکند؟
Session Fixation چیست و چگونه کار میکند؟
در حمله Session Fixation، مهاجم ابتدا یک Session ID معتبر از سرور دریافت میکند، سپس این Session ID را از طریق URL، Cookie یا فرم به قربانی تحمیل میکند. وقتی قربانی با آن Session ID وارد میشود، مهاجم میتواند به حساب قربانی دسترسی پیدا کند.
چگونه از Session Fixation جلوگیری کنیم؟
مؤثرترین راه، تغییر Session ID بعد از ورود کاربر است. همچنین نباید Session ID از URL خوانده شود و نشستهای قبل از ورود باید معتبر زدایی شوند.
تفاوت Session Fixation و Session Hijacking چیست؟
در Session Fixation، مهاجم Session ID را قبل از ورود قربانی تحمیل میکند. در Session Hijacking، مهاجم Session ID را بعد از ورود قربانی سرقت میکند. هر دو منجر به تصاحب حساب میشوند اما روش متفاوتی دارند.