Weak Session IDs
1. 题目
用户访问服务器的时候,为了区别多个用户,服务器都会给每一个用户分配一个 session id 。用户拿到 session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器,服务器就能知道你是谁。
如果 session id 过于简单就会容易被人伪造。根本都不需要知道用户的密码就能访问,用户服务器的内容了。
2. Low
a. 代码分析
<?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_id只是简单的+1,没有任何安全措施。
b. 漏洞利用
放包时直接伪造dvwaSession
payload:dvwaSession=4; security=low; PHPSESSID=02krk6ekcvc7ofissuaibfivh4
3. Medium
a. 代码分析
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>
session_id 为时间戳
b. 漏洞利用
针对时间段进行穷尽,获得正确的session
4. High
a. 代码分析
<?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);
}
?>
对Low级别的cookie进行md5加密。
b. 漏洞利用
根据规律构建md5,进行爆破
5. impossible
a. 代码分析
<?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);
}
生成随机数,时间戳,字符串,联合进行sha1加密。仅从session id中无法猜测其规律。