一步一步學習DVWA滲透測試(Weak Session IDs脆弱的Session)-第十一次課

(CSDN 發文章時,拷貝文章中的圖時,基本上每次都出錯,需要一張一張拷貝進來。CSDN難道不能解決這個問題嗎?)

當用戶登錄後,在服務器就會創建一個會話(session),叫做會話控制,接着訪問頁面的時候就不用登錄,只需要攜帶session去訪問。sessionID作爲特定用戶訪問站點所需要的唯一內容。如果能夠計算或輕易猜到該sessionID,則攻擊者將可以輕易獲取訪問權限,無需登錄直接進入特定用戶界面,進而進行其他操作。

用戶訪問服務器的時候,在服務器端會創建一個新的會話(Session),會話中會保存用戶的狀態和相關信息,用於標識用戶。服務器端維護所有在線用戶的Session,此時的認證,只需要知道是哪個用戶在瀏覽當前的頁面即可。爲了告訴服務器應該使用哪一個Session,瀏覽器需要把當前用戶持有的SessionID告知服務器。用戶拿到session id就會加密後保存到 cookies 上,之後只要cookies隨着http請求發送服務器,服務器就知道你是誰了。SessionID一旦在生命週期內被竊取,就等同於賬戶失竊。

Session利用的實質 :

由於SessionID是用戶登錄之後才持有的唯一認證憑證,因此黑客不需要再攻擊登陸過程(比如密碼),就可以輕易獲取訪問權限,無需登錄密碼直接進入特定用戶界面,進而查找其他漏洞如XSS、文件上傳等等。

Session劫持 : 就是一種通過竊取用戶SessionID,使用該SessionID登錄進目標賬戶的攻擊方法,此時攻擊者實際上是使用了目標賬戶的有效Session。如果SessionID是保存在Cookie中的,則這種攻擊可以稱爲Cookie劫持。SessionID還可以保存在URL中,作爲一個請求的一個參數,但是這種方式的安全性難以經受考驗。

  1. Low級別

使用Burp抓包如下圖:

 

再次單擊【genertate】按鈕,產生session如下:

 

對比兩次產生的dvwaSession可以看到,後面一次是在原來數值基礎上加1。

<?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,否則就在上次session ID基礎上加1.這樣是非常脆弱的設置session方法,很容易被利用。

 

使用舊版本的hackbar ,2.1.3版本(新版本收費,且經過我使用免費7天的license沒有成功)

HackBar2.1.3版本下載地址

github下載地址:https://github.com/Mr-xn/hackbar2.1.3

手工安裝HackBar2.1.3

首先:打開firefox的附加組件;其次:再點 "從文件安裝附加組件";最後再打開“{4c98c9c7-fc13-4622-b08a-a18923469c1c}.xpi”添加擴展即可!

Burp抓包截圖如下:

 

把上面cookie一行拷貝到Hackbar(Firefox中按F12彈出)的選擇Cookie後的下面編輯框中,上面輸入登錄成功到的地址http://192.168.92.129/DVWA/vulnerabilities/weak_id/,單擊【Execute】,則上面firefox會刷新,進入到想要的頁面。成功。

 

  1. Medium級別

源代碼如下:

<?php 

$html 
""

if (
$_SERVER['REQUEST_METHOD'] == "POST") { 
    
$cookie_value sha1(mt_rand() . time() . "Impossible"); 
    
setcookie("dvwaSession"$cookie_valuetime()+3600"/vulnerabilities/weak_id/"$_SERVER['HTTP_HOST'], truetrue);

?>

 

 

上面的Session明顯是時間戳,對照源代碼驗證了這一點。

 

通過Hackbar中,把session的時間戳調整到現在時間,則單擊【Execute】,則可以登錄成功,進入到我在IE瀏覽器中的狀態。

 

(我改用IE瀏覽器,主要因爲在Chrome中無法設置爲Medium級別)

 

https://tool.lu/timestamp/  時間戳在線查詢工具。

  1. High級別

源代碼如下:

<?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_valuetime()+3600"/vulnerabilities/weak_id/"$_SERVER['HTTP_HOST'], falsefalse);
}

?>

 

單擊【Generate】按鈕,產生session

 

在Firefox中的Hackbar中構造報文

 

單擊【Execute】但是無法登錄。對照源代碼,源代碼中使用MD5計算session,但是抓取的報文中的不是md5編碼的session,暫時沒找到原因。

 

 

4、Impossible級別

源代碼如下:


$html "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $cookie_value sha1(mt_rand() . time() . "Impossible");
    setcookie("dvwaSession"$cookie_valuetime()+3600"/vulnerabilities/weak_id/"$_SERVER['HTTP_HOST'], truetrue);
}
?>

 

不可能級別使用隨機數+時間戳+固定字符串("Impossible")進行 sha1 運算,作爲 session Id,完全就不能猜測到。

(結束)

關注安全  關注作者

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章