セッションハイジャック 01 - yujitounai/helloworld GitHub Wiki
クエリストリングにセッションIDがある件でのセッションハイジャック
<?php
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
$page=filter_input(INPUT_GET,"page");
if(!$page){
echo "<a href=\"?page=input\">input</a>";
}elseif($page==="input"){
echo <<<EOM
<div class="box">
<form method="post" action="?page=input_secret">secret
<input name="secret" type="text" value="">
<input type="submit">
</form>
</div>
EOM;
}elseif($page==="input_secret"){
$secret = filter_input(INPUT_POST,"secret");
$_SESSION['secret']=$secret;
echo "<a href=\"?page=display_secret\">display_secret</a>";
echo "<br><a href=\"?page=logout\">clear session</a>";
}elseif($page==="display_secret"){
echo "SECRET=".$_SESSION['secret'];
echo "<br><br>";
echo "<a href=\"?page=input\">input</a>";
echo "<br><a href=\"?page=logout\">clear session</a>";
}elseif($page==="logout"){
$_SESSION = array();
session_destroy();
echo "logout";
echo "<br><br>";
echo "<a href=\"?page=input\">input</a>";
}
?>
- sessionhijack-01.php を開くとsecretを入力する画面になる
- 入力するとsecretが表示される(page=secret)
- inputをクリックするとURLのクエリストリングに
PHPSESSID
が漏れている - referer、プロキシログなどでURLが漏れることを想定
- 別のブラウザから
/sessionhijack-01.php?page=secret&PHPSESSID=[漏えいしたPHPSESSID]
にアクセスすると別のブラウザの情報が閲覧できる
ini_set('session.use_trans_sid', 1);
はやらない
ログイン、ログインしてない場合は重要な情報の送信後は
session_regenerate_id()
も使いたい