it-swarm-id.com

Bagaimana cara membajak suatu sesi?

Terlepas dari judul pertanyaan yang terang-terangan, ini sebenarnya untuk tujuan yang tulus.

Situs saya menggunakan PHP kode seperti ini:

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

Saya benar-benar mencoba untuk berpikir seperti seorang peretas dan mencari tahu bagaimana saya dapat mengubah nilai ini. Saya telah membaca artikel yang berbicara tentang "pembajakan" sesi, tetapi tidak jelas tentang bagaimana hal itu dapat dilakukan ...

25
Steve

Pada dasarnya ketika Anda Membajak sesi seseorang Anda mengambil sessionID mereka dan berpura-pura sendiri. Biasanya sessionID ditransfer dalam cookie, yang berarti bahwa jika Anda dapat mengakses cookie pihak lain, Anda bisa memasukkannya ke dalam cookie Anda sendiri dan Anda telah mencuri sesi mereka.

Ini dapat dilakukan dengan beberapa cara, misalnya dengan mengendus jaringan nirkabel dan melihat paket HTTP yang ditransfer atau serangan XSS di mana Anda dapat memberi tahu browser korban untuk mengungkapkan informasi cookie mereka kepada Anda.

Saya ingin menyebutkan bahwa contoh yang Anda jelaskan dalam pertanyaan Anda juga mungkin rentan terhadap SQL-Injection. Jika saya mengubah sessionID cookie saya ke

asdf' OR 1=1-- 

Saya kemungkinan besar akan dikonfirmasi sebagai pengguna yang valid. Untuk mencegah hal ini, Anda harus memastikan sanitasi yang benar pada data kotor yang berasal dari klien Anda sebelum Anda menggunakan data untuk apa pun.

10
Chris Dale

Jika Anda tertarik pada demonstrasi, Twitter adalah contoh yang sangat baik tentang betapa mudahnya dilakukan. Kamu akan membutuhkan:

  • Dua Komputer
  • Firefox dengan Firebug (jelas ada opsi lain, tetapi ini populer dan mudah didapat)
  • Editor Cookie, seperti Advanced Cookie Manager (sekali lagi, add-on yang mudah diinstal melalui Firefox)

Di komputer A dengan firefox dan firebug, masuk ke akun Twitter Anda di situs non-https. Setelah masuk, buka Firebug dan lihat baris "GET Twitter.com". Ketika Anda memperluasnya lihat di bawah bagian Header Respons dan temukan Set-Cookie. Di sana Anda akan menemukan cookie bernama _Twitter_sess. Sorot dan salin nilainya (sampai titik koma).

Sekarang buka Firefox dengan pengelola cookie tingkat lanjut di komputer B dan buka halaman login Twitter. Buka Advanced Cookie Manager dan filter untuk Twitter.com. Setelah Anda menemukan domain Twitter.com dan daftar cookie-nya, Anda akan melihat cookie bernama _Twitter_sess. Hapus. Sekarang buat cookie baru dengan nama "_Twitter_sess", path "/" dan "Nilai" nilai _Twitter_sess dari komputer lain. Simpan cookie.

Sekarang tutup manajer cookie dan kembali ke halaman login Twitter, segarkan halaman dan bam, Anda masuk.

Sekarang cukup buat beberapa cara pintar untuk mendapatkan sesi orang lain (buka wifi, xss) dan itulah salah satu cara bagaimana pembajakan sesi dilakukan.

7
Safado

Kode Karrax adalah serangan SQL Injection (yang rentan terhadap kode Anda - ini perlu diperbaiki) bukan serangan pembajakan sesi.

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

Dalam pembajakan sesi, Bob mencuri nilai id sesi yang Anda tetapkan untuk Alice. Ini mungkin sebagai akibat dari serangan MITM pada aliran HTML, jaringan mengendus, bug CSS yang memungkinkan dia untuk menanamkan beberapa javacript di situs Anda, atau metode lainnya.

Sangat penting untuk tidak melupakan masalah fiksasi sesi - bahkan jika Anda mengatur flag SSL dan HTTP hanya pada cookie, DAN mengatur use_only_cookies yang tidak menyelesaikan masalah ketika Bob menyerang komputer Alice sebelum dia mengakses situs Anda dan menetapkan nilai spesifik untuk id sesi. Bob kemudian dapat menetapkan nilai yang sama di komputernya dan permintaannya terikat pada sesi yang sama dengan Alice. Jadi ketika Anda mengautentikasi Anda harus membuat id sesi baru - lihat session_regenerate_id ()

4
symcbean

Pembajakan sesi biasanya melibatkan mencuri cookie dari pengguna. Misalnya Firesheep adalah plug-in untuk Firefox yang mencuri sesi melalui Wifi yang tidak aman. HTTP adalah protokol tanpa kewarganegaraan sehingga yang terbaik yang bisa kita lakukan untuk mengautentikasi orang adalah dengan cookie.

Kode PHP yang Anda miliki dalam pertanyaan Anda adalah contoh kode yang bisa rentan terhadap injeksi SQL. Biasanya merupakan praktik terbaik untuk membersihkan variabel sebelum memasukkannya ke dalam kueri seperti itu.

2
WalterJ89