Come dirottare una sessione?

24

Nonostante il palese titolo della domanda, questo è in realtà per un vero scopo.

Il mio sito utilizza un codice PHP come questo:

    $select="select id from tableA where user_id='".$_SESSION['sess_user_id']."'";

Sto davvero cercando di pensare come un hacker e capire come posso modificare questo valore. Ho letto articoli che parlano di "sequestro di sessione, ma sono vaghi su come si possa fare ...

    
posta Steve 10.02.2011 - 08:51
fonte

4 risposte

9

Fondamentalmente quando dirai qualcuno sessione prendi il loro sessionID e fai finta di essere il tuo. Di solito il sessionID viene trasferito nel cookie, il che significa che se è possibile accedere ai cookie delle altre parti, è sufficiente inserirlo nel proprio cookie e aver rubato la propria sessione.

Questo può essere fatto in diversi modi, ad esempio annusando la rete wireless e osservando i pacchetti HTTP che vengono trasferiti o attacco XSS in cui è possibile dire al browser delle vittime di rivelare le proprie informazioni sui cookie all'utente.

Vorrei menzionare che l'esempio che descrivi nella tua domanda potrebbe essere vulnerabile a SQL-Injection. Se cambio il sessionID del mio cookie in

asdf' OR 1=1-- 

Molto probabilmente verrei autenticato come utente valido. Per evitare ciò devi assicurarti di avere una corretta sanificazione dei dati sporchi provenienti dai tuoi clienti prima di utilizzare i dati per qualsiasi cosa.

    
risposta data 10.02.2011 - 10:00
fonte
7

Se sei interessato a dimostrazioni pratiche, Twitter è un ottimo esempio di quanto facilmente sia fatto. Avrai bisogno di:

  • Due computer
  • Firefox con Firebug (ovviamente ci sono altre opzioni, ma queste sono popolari e facili da ottenere)
  • Un editor di cookie, come Advanced Cookie Manager (di nuovo, componente aggiuntivo installabile facilmente tramite Firefox)

Sul computer A con firefox e firebug, accedi al tuo account Twitter sul sito non-https. Una volta effettuato l'accesso, apri Firebug e guarda la riga "GET twitter.com". Quando lo espandi, guarda sotto la sezione Intestazioni di risposta e trova Set-Cookie. Lì troverai un cookie chiamato _twitter_sess. Evidenzia e copia il valore (fino al punto e virgola).

Ora apri Firefox con il gestore di cookie avanzato sul computer B e vai alla pagina di login di Twitter. Apri Advanced Cookie Manager e filtra per twitter.com. Una volta trovato il dominio twitter.com e il suo elenco di cookie, vedrai un cookie chiamato _twitter_sess. Cancellalo. Ora crea un nuovo cookie con il nome "_twitter_sess", percorso "/" e "Valore" il valore di _twitter_sess dall'altro computer. Salva il cookie.

Ora chiudi il gestore dei cookie e torna alla pagina di login di Twitter, aggiorna la pagina e bam, sei a posto.

Ora immagina solo un modo intelligente per ottenere la sessione di qualcun altro (open wifi, xss) e questo è un modo di fare il sequestro di sessione.

    
risposta data 06.12.2011 - 17:00
fonte
4

Il codice di Karrax è un attacco di SQL Injection (a cui il tuo codice è vulnerabile - questo deve essere risolto) non un attacco di dirottamento di sessione.

$select="select id from tableA where user_id='"
    .mysql_real_escape_string($_SESSION['sess_user_id'], $db_handle)
    ."'";

Nel dirottamento di sessione, Bob ruba il valore per l'ID di sessione che hai assegnato ad Alice. Ciò potrebbe essere dovuto a un attacco MITM sul flusso HTML, allo sniffing della rete, a un bug CSS che gli ha permesso di incorporare qualche javacript sul tuo sito o altri metodi.

È importante non perdere di vista i problemi di fissazione della sessione - anche se si impostano i flag SSL e HTTP solo su un cookie, E si imposta use_only_cookies che non risolve il problema in cui Bob attacca il computer di Alice prima di accedere al sito e imposta un valore specifico per l'ID di sessione. Bob può quindi impostare lo stesso valore sul suo computer e le sue richieste sono legate alla stessa sessione di Alice. Quindi, quando esegui l'autenticazione, dovresti generare un nuovo ID di sessione - vedi session_regenerate_id ()

    
risposta data 11.02.2011 - 15:09
fonte
2

Il dirottamento della sessione di solito comporta il furto di un cookie da parte di un utente. Ad esempio Firesheep è un plug in per Firefox che ruba le sessioni su Wifi non protetto. HTTP è un protocollo stateless quindi il meglio che possiamo fare per autenticare le persone è con i cookie.

Il codice PHP che hai nella tua domanda è un esempio di codice che potrebbe essere suscettibile all'iniezione SQL. Di solito è consigliabile disinfettare le variabili prima di inserirle in una query del genere.

    
risposta data 10.02.2011 - 09:59
fonte

Leggi altre domande sui tag