Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Faking Session/Cookies?

Tags:

php

I'm not exactly sure how the $_SESSION work in PHP. I assume it is a cookie on the browser matched up with an unique key on the server. Is it possible to fake that and by pass logins that only uses sessions to identify the user.

If $_SESSION doesn't work like that, can someone potentially fake cookies and bypass logins?

like image 716
Pwnna Avatar asked May 06 '11 00:05

Pwnna


2 Answers

Yes.

The only thing identifying a user is a pseudo-random value being sent along with each request. If an attacker can guess the right values to send, he can pose as somebody else.

There are different ways to make this harder:

  • make session ids longer (more entropy, harder to guess)
  • check additional information like the user agent (essentially more entropy)
  • obviously: use a good random number generator
  • expire sessions sooner to give a smaller set of valid session ids at any one time
  • renew session ids often, even for valid ids
  • use SSL to encrypt all communication to avoid outright cookie hijacking
like image 175
deceze Avatar answered Sep 21 '22 14:09

deceze


Sessions in PHP by default store the data in a file on the server (/tmp/) and store an identifier cookie usually PHPSESSID (it will be a hexadecimal number, e.g. f00f8c6e83cf2b9fe5a30878de8c3741).

If you have someone else's identifier, then you could in theory use their session.

However, most sites check to ensure the user agent is consistent and also regenerate the session identiifer every handful of requests, to mitigate this.

As for guessing a session, it's possible, but extremely unlikely. It'd be easier to guess credit card numbers (smaller pool of characters (0-9 over 0-9a-f) and a checksum to validate it). Though of course you'd also need the expiry and security code.

like image 42
alex Avatar answered Sep 18 '22 14:09

alex