it-swarm-eu.dev

Come dirottare una sessione?

Nonostante il palese titolo della domanda, questo è in realtà per uno scopo autentico.

Il mio sito utilizza PHP in questo modo:

    $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 "dirottamento della sessione", ma di essere vago su come si possa fare ...

25
Steve

Fondamentalmente quando dirigi una sessione di qualcuno prendi il loro ID sessione e fingi che sia tuo. Di solito lo sessionID viene trasferito nel cookie, il che significa che se puoi accedere al cookie di altre parti puoi semplicemente inserirlo nel tuo cookie e hai rubato la loro 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 dove puoi dire al browser delle vittime di rivelarti le loro informazioni sui cookie.

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

asdf' OR 1=1-- 

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

10
Chris Dale

Se sei interessato a una dimostrazione pratica, Twitter è un ottimo esempio di quanto sia facile farlo. Avrai bisogno:

  • Due computer
  • Firefox con Firebug (ovviamente ci sono altre opzioni, ma queste sono popolari e facili da ottenere)
  • Un cookie editor, come Advanced Cookie Manager (di nuovo, componente aggiuntivo facilmente installabile 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 "OTTIENI Twitter.com". Quando lo espandi, cerca nella sezione Header 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 cookie manager avanzato sul computer B e vai alla pagina di accesso 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", path "/" e "Value" il valore di _Twitter_sess dall'altro computer. Salva il cookie.

Ora chiudi il cookie manager e torna alla pagina di accesso di Twitter, aggiorna la pagina e bam, sei dentro.

Ora escogita un modo intelligente per ottenere la sessione di qualcun altro (open wifi, xss) e questo è un modo di fare il dirottamento della sessione.

7
Safado

Il codice di Karrax è un attacco 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 della sessione, Bob ruba il valore per l'id di sessione assegnato ad Alice. Ciò potrebbe essere stato il risultato di un attacco MITM sul flusso HTML, dello sniffing della rete, di 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 solo i flag SSL e HTTP su un cookie e si impostano use_only_cookies che non risolvono il problema in cui Bob attacca il computer di Alice prima che acceda al tuo sito e imposti un valore specifico per l'id della 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 sessione - vedi session_regenerate_id ()

4
symcbean

Il dirottamento di sessione di solito comporta il furto di un cookie da un utente. Ad esempio Firesheep è un plug-in per Firefox che ruba sessioni tramite Wifi non garantito. HTTP è un protocollo senza stato, quindi il meglio che possiamo fare per autenticare le persone è con i cookie.

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

2
WalterJ89