用戶訪問服務器的時候,一般服務器都會分配一個身份證 session id 給用戶,用于標識。用戶拿到 session id 后就會保存到 cookies 上,之后只要拿著 cookies 再訪問服務器,服務器就知道你是誰了。
但是 session id 過于簡單就會容易被人偽造。根本都不需要知道用戶的密碼就能訪問,用戶服務器的內容了
LOW

image.png
刷新一次

image.png
cookies 上 dvwaSessionId 上 +1s
源碼
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id'])) {
$_SESSION['last_session_id'] = 0;
}
$_SESSION['last_session_id']++;
$cookie_value = $_SESSION['last_session_id'];
setcookie("dvwaSession", $cookie_value);
}
?>
如果用戶 SESSION中的 last_session_id 不存在就設為 0,如果dvwaSession存在就加一,這樣肯定會造成session不是唯一,引發(fā)沖突
medium

image.png

image.png
源碼
?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>
明顯就是時間戳,很容易被猜出
high

image.png

image.png
看著像md5 解密一下發(fā)現 和low級別的一樣。。。
源碼
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id_high'])) {
$_SESSION['last_session_id_high'] = 0;
}
$_SESSION['last_session_id_high']++;
$cookie_value = md5($_SESSION['last_session_id_high']);
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}
?>
impossible
源碼
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = sha1(mt_rand() . time() . "Impossible");
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
}
?>
不可能級別使用隨機數+時間戳+固定字符串("Impossible")進行 sha1 運算,作為 session Id,完全就不能猜測到