DVWA 黑客攻防演练(七)Weak Session IDs

2023-03-12,,

用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识。用户拿到 session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器,服务器就知道你是谁了。

但是 session id 过于简单就会容易被人伪造。根本都不需要知道用户的密码就能访问,用户服务器的内容了。

下面就去看看一些不太合理的 sessionId 创建方式(这部分有点傻,正常人都不会这样设计

页面也比较简单的,点击 generate 就会生成一个 session Id。

初级

生成的策略是很简单的。

就在 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 的冲突也太多了吧,都已经不是唯一了。

中级

第二种明显就是时间戳了。

依然是比较容易猜出来了

代码如下


<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>

高级

看起来很高级,应该是 md5 处理了一下。

于是我在 https://www.cmd5.com/ 这个网站,md5 解密了一下。

。。。

再发一次请求。。。

也就是说跟初级是一样的策略,只是换汤不换药,

后台代码是这样的

<?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")进行 sha1 运算,作为 session Id,完全就不能猜测到。

<?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);
}
?>

也行吧,可以作为其中一种生成 session Id 的策略。

而 tomcat 的 session id 值生成的策略,是一个随机数+时间+ jvm 的id值(jvm的id值会根据服务器的硬件信息计算得来),如果出现冲突就会再生成一个。

DVWA 黑客攻防演练(七)Weak Session IDs的相关教程结束。

《DVWA 黑客攻防演练(七)Weak Session IDs.doc》

下载本文的Word格式文档,以方便收藏与打印。