web-dev-qa-db-ja.com

セッションをハイジャックする方法は?

質問の露骨なタイトルにもかかわらず、これは実際には真の目的のためです。

私のサイトではPHPこのようなコードを使用しています:

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

私は本当にハッカーのように考え、この値をどのように変更できるかを理解しようとしています。 「ハイジャック」セッションハイジャックについての記事を読んだことがありますが、それがどのように行われるかについて漠然としています...

25
Steve

基本的に、誰かのセッションをハイジャックするときは、そのセッションIDを取得して、自分のふりをします。通常、sessionIDはcookieで転送されます。つまり、他のパーティのcookieにアクセスできる場合は、それを自分のcookieに入れるだけで、セッションを盗んだことになります。

これは、いくつかの方法で実行できます。たとえば、ワイヤレスネットワークをスニッフィングして、転送されるHTTPパケットを確認するか、または XSS attack を使用して、被害者のブラウザにCookie情報を開示するように指示できます。

質問で説明した例もSQLインジェクションに対して脆弱である可能性があることを述べておきます。 CookieのセッションIDを次のように変更した場合

asdf' OR 1=1-- 

ほとんどの場合、有効なユーザーとして認証されます。これを防ぐには、何かにデータを使用する前に、クライアントから送信されるダーティデータを適切にサニタイズしていることを確認する必要があります。

10
Chris Dale

実践的なデモンストレーションに興味がある場合は、Twitterが非常に簡単に実行できる非常に良い例です。あなたは必要になるでしょう:

  • 2台のコンピューター
  • FirefoxとFirebug(明らかに他のオプションがありますが、これらは人気があり、簡単に入手できます)
  • Advanced Cookie ManagerなどのCookieエディタ(これも、Firefoxから簡単にインストールできるアドオン)

FirefoxとfirebugがインストールされたコンピューターAで、https以外のサイトのTwitterアカウントにログインします。ログインしたら、Firebugを開いて「GET Twitter.com」の行を見てください。展開すると、Response Headersセクションの下を見て、Set-Cookieを見つけます。そこには、_Twitter_sessというCookieがあります。値を強調表示してコピーします(セミコロンまで)。

コンピューターBの高度なCookieマネージャーを使用してFirefoxを開き、Twitterログインページに移動します。 Advanced Cookie Managerを開き、Twitter.comをフィルターします。 Twitter.comドメインとCookieのリストが見つかると、_Twitter_sessというCookieが表示されます。消して。ここで、「_ Twitter_sess」、パス「/」、および「値」という名前の新しいCookieを、他のコンピューターからの_Twitter_sessの値に作成します。クッキーを保存します。

Cookieマネージャーを閉じて、Twitterのログインページに戻り、ページとBAMを更新してください。

さて、他の誰かのセッション(オープンwifi、xss)を取得するための巧妙な方法を考案してください。これが、セッションハイジャックが行われる方法の1つです。

7
Safado

Karraxのコードは、SQLインジェクション攻撃(コードが脆弱です-これは修正が必要です)ではなく、セッションハイジャック攻撃です。

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

セッションハイジャックでは、ボブはアリスに割り当てたセッションIDの値を盗みます。これは、HTMLストリームに対するMITM攻撃、ネットワークスニッフィング、サイトにjavacriptを埋め込むことができるCSSバグ、またはその他の方法の結果であった可能性があります。

セッションの固定に関する問題を見逃さないようにすることが重要です。CookieにSSLとHTTPのみのフラグを設定し、サイトにアクセスする前にボブがアリスのコンピュータを攻撃して特定の値を設定するという問題を解決しないuse_only_cookiesを設定してもセッションID。ボブは自分のコンピュータに同じ値を設定でき、彼のリクエストはアリスと同じセッションにバインドされます。したがって、認証時に新しいセッションIDを生成する必要があります-session_regenerate_id()を参照してください

4
symcbean

セッションハイジャックには通常、ユーザーからのCookieの盗難が含まれます。たとえば、FiresheepはFirefoxのプラグインであり、保護されていないWifi経由でセッションを盗みます。 HTTPはステートレスプロトコルであるため、人々を認証するためにできる最善のことはCookieを使用することです。

質問にあるPHPコードは、SQLインジェクションの影響を受けやすいcouldのコードの例です。通常、変数を挿入する前に変数をサニタイズすることをお勧めしますそのようなクエリ。

2
WalterJ89