برگزیده های پرشین تولز

Session Hijacking

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
سلام

حتما تاپیک قبلی من رو در مورد امنیت برنامه نویسی با موضوع SQL Injection دیدین .
در این تاپیک قصد دارم بازهم از تجربیات دوستان در مورد مساله مهم امنیتی دیگری با عنوان Session hijacking استفاده کنیم .

Session hijacking یک روش ماهرانه هک شدن سایتها است که از طریق جا زدن هکر جای admin سایت از طریق دزدیدن Session اونه ... hijacking اصولا واژه ای بوده که به منظور دزدیدن هواپیما بهش در انگلیسی اشاره میشه اما برای اینکار واژه بهتری توی انگلیسی که بیانگر این کار و اهمیتش باشه ظاهرا پیدا نشده . من فکر میکنم واسه این این کلمه رو انتخاب کردن که توش کلمه کلیدی hack دیده میشه !
معمولا session hijacking با خوندن cookie های مدیر سایت توسط قرار دادن کدهای جاوااسکریپتی در بعضی ورودیهای صفحه برای خوندن کوکی فعال مدیر سایت در موقع فعال بودن session یا کوکی یا خوندن session ID از طریق فرستادن مدیر سایت در هنگام فعال بودن session به یک لینک دیگر است که در صفحه مذبور با خواندن refferer صفحه و مشاهده session id میشه session را شبیه سازی کرد .
و همونطور که خودتونم میدونید با لو رفتن session مربوط به admin به راحتی کل اختیار سایت در دست هکر قرار خواهد گرفت .

نرم افزارهای خاصی هم برای اینکار وجود دارن که به hijacker ها معروفند .

اینها خلاصه مقالاتی بود که من در مورد session hijacking مطالعه کرده بودم .

دوستانی که اطلاعات دارن لطفا ادامه بدن ...
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
خوب می تونی مثال هم بزنی که چجوری عمل می کنه ؟
یعنی کلا session امنیتش پایینه ؟
 

first saeed

Registered User
تاریخ عضویت
25 آگوست 2005
نوشته‌ها
815
لایک‌ها
2
سن
41
محل سکونت
PubliC_HtmL
البته من اصلان از این چیزا سر در نمی یارم
اما من برای اینکه امنیت بالاتر بره کد اتصال به بانک رو یا جاهایی که پسورد رو به صورت ثابت می خوام تعریف کنم همیشه کدهای مربوط رو توی فایل جدا ذخیره می کنم به صورت رمز شده و هر جا بخوام تو صفحات دیگه اینکلودش می کنم .
حالا نمی دونم این اصلا ربطی به این تاپیک داشت یا نه
 

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
اینا کل اطلاعاتی بود که من جمع کرده بودم

من خودم منتظر اطلاعات جدید تری هستم منجمله :

روشهای هک کردن با session hijacking
روش های جلوگیری از آن
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
من هم دارم می گردم ولی اولین چیزی که پیدا کردم این بود


This code prevents session hijacking. It compares the ip number of the creator with that of the user of the session. If they don't match it gives an error. BTW $sid is my session variable.
PHP:
session_start();

if(!isset($sid) || empty($sid))
{
   $sess_addr = $REMOTE_ADDR;
   session_register(sess_addr);
}
elseif($sess_addr != $REMOTE_ADDR)
{
   echo "This sessions has been hijacked.";
   extt;
}
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
این هم یکی دیگه


Secure PHP sessions?
Todays post will be about security, again. Most fresh developers don’t focus on security when they develop applications. Many of them don’t eaven know what threats that are out there.
My focusing on secure PHP sessions started with a disussion on a norwegian PHP IRC channel. One of my fellow chatters stated that if a session key was disclosed, hijacking the session would be easy as pie, just create a cookie containing the key.
I replyed (mabye jumping in water way over my head) that if that was the case, the application was poorly written. And in my oppinion, I still think this is the case. Altough it’s not possible to be 100% secure, there are some methods that will improve the security of your application.

Changing the session key
This is important, in my oppinion you should change the session key for each new request the user makes. If a someone should get the hold of a session key, most likely it will be expired.

PHP:
< ?php
session_start();

echo "Old session ID: ".session_id();

// copy the old session data
$oldSessionData = $_SESSION;

// destroy and recreate the session
session_destroy();
session_start();

// copy the data back to the session
$_SESSION = $oldSessionData;

echo "New session ID: ".session_id();
?>

This script will return something like this:
27981ed0f35f1f8998037fd60ec56
New session ID: ff627981ed0f35f1f8998037fd60ec56

Let us assume that a hacker would find a users session key. If the user has made another request to the server, the key the hacker holds will be useless.

Checking the user-agent
The user-agent is an indentification string sendt by the browser when it requests a page. Although I don’t think you should trust HTTP headers sendt by the client, I feel that checking the user-agent for changes should be done. And it requires more work from the hacker to successfully hijack a session.

PHP:
< ?php
if(!isset($_SESSION['ua'])) {
    $_SESSION['ua'] = md5($_SERVER['HTTP_USER_AGENT']);
} else {
    if($_SESSION['ua'] != md5($_SERVER['HTTP_USER_AGENT'])) {
        echo \"Your user-agent has changed, please login again.\";
        session_destroy();
        exit(0);
    }
}
?>

Checking the IP address
Checking the IP address can be done the same way as checking the user-agent, but in my oppinon the user should be able to disable this check upon login, since many users are behind proxy servers, and therefore their IP address could change during the session.

Using Secure Socket Layer
Secure Socket Layer (SSL) is used to encrypt the HTTP traffic between the server and the client. It requires some work from the server administrator to enable, but will boost the security alot. This will prevent a hacker from listening to your HTTP traffic, and stealing your session id or other sensitive information.

Teaching the user to log out
The log out link is there for a reason. When you push it, all session data should be removed, and a hacker will not (should not) be able to continue the session no matter what.

http://xqus.com/archives/2004/10/19/secure-php-sessions/
 

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
مرسی

چیزای جالبی بود ...
در مورد hijacker ها چیزی پیدا کردی ؟
 

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
3
محل سکونت
ساری . . . . . . . . . . . . . . Permanently Bann
با این حساب برنامه های قدیمه ما که الان رو چند تا سایت دارن کار میکنن همه این باگو دارن :D
 

miladmovie

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
1,939
لایک‌ها
3
سن
39
راستش تا اونجای که من می دونم باز هم خوده PHP این کار رو انجام می ده
وقتی که تنظیم :
session.use_cookies ست شده باشه
دیگه این مشکل پیش نمیاد چون ID سشن باید با ID که در کوکی ذخیره می شه یک باشه !
 

miladmovie

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
1,939
لایک‌ها
3
سن
39
آرتین جان یعنی چی ؟
در تایید حرف من بود یا رد ؟ :D
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
در تایید حرف شما بود

حالا این دقیقا چطوری عمل می کنه ؟
یعنی رو هر سیستمی قابل اجرا شدنه ؟ یعنی هر کی از حالت عادی استفاده می کنه احتماله هک شدن داره ؟
 

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
3
محل سکونت
ساری . . . . . . . . . . . . . . Permanently Bann
بعضی از سایت ها که روی لینوکس و آپاچی هستن اخر همه صفحه های php یه PHPSESSID اضافه میکنه . این SESSID چرا تو url هست . در ویندوز و iis اینجوری نیست .

میشه با اینکود دیتا های سشن کاری کرد که اگه توسط کس دیگه ای خونده شدن قابل استفاده نباشن . ولی کسی میتونه با این روش سشن ایجاد کنه ؟
 

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
3
محل سکونت
ساری . . . . . . . . . . . . . . Permanently Bann
دیگه این مشکل پیش نمیاد چون ID سشن باید با ID که در کوکی ذخیره می شه یک باشه !

اینم بر میگرده به sql injection چون با جاوااسکریپت میشه کوکی که حاوی SESSID باشه ساخت ( البطه باید یه اسم کلی تر میزاشتن که اینجا هم کاربرد داشت ;( . منظورم به sql injection هست )
 

miladmovie

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
1,939
لایک‌ها
3
سن
39
به نقل از shankimout :
اینم بر میگرده به sql injection چون با جاوااسکریپت میشه کوکی که حاوی SESSID باشه ساخت ( البطه باید یه اسم کلی تر میزاشتن که اینجا هم کاربرد داشت ;( . منظورم به sql injection هست )
نه نمی شه ! اونی کوکی که با javascript ساخته می شه فرق می کنه با کوکی که برای PHP ساخته می شه
 

hba

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
8 آگوست 2004
نوشته‌ها
1,511
لایک‌ها
1
سن
39
محل سکونت
تهران-ونک-php-mysql
خوب پس اصلا session hijacking نمی دونید من یه مقدار توضیح می دم زیاد نمی گم چون روش های هکری هست و خیلی لو نمی دیم

خیلی از برنامه نویسان فکر می کنند session خیلی امن هست ولی این طور نیست

با روش هایی که نمی گم می شه session تقلبی ساخت مثلا فرض در برنامه ای بعد لاگین session به نام admin ساخته می شه و برنامه در جا هایی فقط وجود session رو برسی می کنه و این خیلی بده چون تقلبی می شه یه سشن با همون نام ساخت و برنامه چون فقط ووجود رو چک می کنه راحت وارد می شه

روش های جلوگیریش رو هم بعدا می گم
 

zfarhad2003

Registered User
تاریخ عضویت
19 ژانویه 2004
نوشته‌ها
1,155
لایک‌ها
3
سن
40
محل سکونت
R7 register
به نظرم اگه از قابلیت ذخیره session در پایگاه داده استفاده بشه بیشتر مشکلات مربوط به این روش هک حل می شه.

البته راه حلهای دیگه ای هم هست که می شه از اعتبار و واقعا درست بودن session اطلاع پیدا کرد ولی در کل فکر کنم بهترین روش استفاده از پایگاه داده باشه.
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
به نقل از hba :
خوب پس اصلا session hijacking نمی دونید من یه مقدار توضیح می دم زیاد نمی گم چون روش های هکری هست و خیلی لو نمی دیم

خیلی از برنامه نویسان فکر می کنند session خیلی امن هست ولی این طور نیست

با روش هایی که نمی گم می شه session تقلبی ساخت مثلا فرض در برنامه ای بعد لاگین session به نام admin ساخته می شه و برنامه در جا هایی فقط وجود session رو برسی می کنه و این خیلی بده چون تقلبی می شه یه سشن با همون نام ساخت و برنامه چون فقط ووجود رو چک می کنه راحت وارد می شه

روش های جلوگیریش رو هم بعدا می گم


دادشه من یا خوش خوشی می گی یا .... :cigar:

اگه session با ورودی باشه چی ؟
من معمولا اینجوری می کنم
که اگه مثلا Session login برابر با yes شد مثلا لاگین بشه !
حالا اینجوری هم مورد امنیتی پیش می یاد ؟

صفحه قبل من یه کد گذاشتم که IP رو چک می کنه این جطوریه میشه روش حساب کرد ؟
 
بالا