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


用戶訪問服務器的時候,一般服務器都會分配一個身份證 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值會根據服務器的硬件信息計算得來),如果出現沖突就會再生成一個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM