Weak Session IDs (弱會話)
當用戶登錄后,在服務器就會創建一個會話(session),叫做會話控制,接著訪問頁面的時候就不用登錄,只需要攜帶Sesion去訪問。
sessionID作為特定用戶訪問站點所需要的唯一內容。如果能夠計算或輕易猜到該sessionID,則攻擊者將可以輕易獲取訪問權限,無需錄直接進入特定用戶界面,進而進行其他操作。用戶訪問服務器的時候,在服務器端會創建一個新的會話(Session),會話中會保存用戶的狀態和相關信息,用于標識用戶。服務器端維護所有在線用戶的Session,此時的認證,只需要知道是哪個用戶在瀏覽當前的頁面即可。為了告訴服務器應該使用哪一個Session,瀏覽器需要把當前用戶持有的SessionID告知服務器。用戶拿到session id就會加密后保存到 cookies 上,之后只要cookies隨著http請求發送服務器,服務器就知道你是誰了。SessionID一旦在生命周期內被竊取,就等同于賬戶失竊。
Session利用的實質 :
由于SessionID是用戶登錄之后才持有的唯一認證憑證,因此黑客不需要再攻擊登陸過程(比如密碼),就可以輕易獲取訪問權限,無需登錄密碼直接進入特定用戶界面, 進而查找其他漏洞如XSS、文件上傳等等。
Session劫持 :
通過竊取用戶SessionID,使用該SessionID登錄進目標賬戶的攻擊方法,此時攻擊者實際上是使用了目標賬戶的有效Session。如果SessionID是保存在Cookie中的,則這種攻擊可以稱為Cookie劫持。SessionID還可以保存在URL中,作為一個請求的一個參數,但是這種方式的安全性難以經受考驗。
LOW級別
<?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);
}
?>
setcookie()
函數向客戶端發送一個 HTTP cookie。如果用戶 SESSION 中的 last_session_id
不存在就設為 0,生成 cookie 時就在 cookies 上 dvwaSessionId + 1。這種生成方式過分簡單了,而且非常容易被偽造。
點擊Generate(生成會話),使用bp進行抓包
在第一次發包中,并沒有看到dvwaSession
值得傳遞,點擊Forward
放包再次進行抓包
抓取到cookie
值中dvwaSession
為1
,這是第一次,復制cookie
值和Web Session IDs
頁面的url
然后打開firefox
,打開HackBar
,將url粘貼到地址欄,將復制的cookie
粘貼到cookie
值中
可以試著修改dvwaSession的值
點擊提交后可以看到,不需要輸入密碼直接登錄成功
Medium級別
<?php$html = "";if ($_SERVER['REQUEST_METHOD'] == "POST") {$cookie_value = time();setcookie("dvwaSession", $cookie_value);
}
?>
將獲取當前的時間戳作為了會話的值
時間戳轉換工具
在bp上抓包,復制Cookie信息
在hackbar插件上發送請求
構造一下登錄的payload:
dvwaSession=1690808572; security=medium; PHPSESSID=esghfd6iq36q5em6hbhl5iim5v
請求地址:
http://192.168.80.145/dvwa/vulnerabilities/weak_id/
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_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}?>
setcookie(name,value,expire,path,domain,secure,httponly)參數 描述
name 必需。規定cookie的名稱。
value 必需。規定cookie的值。
expire 可選。規定cookie的有效期。
path 可選。規定cookie的服務器路徑。
domain 可選。規定cookie的域名。
secure 可選。規定是否通過安全的HTTPS連接來傳輸cookie。
httponly 可選。規定是否Cookie僅可通過HTTP協議訪問。
抓包發現,使用了md5加密了每次last_session_id_high
的值,但是依然無法改變每次加一的規律
所以只需將數字使用md5加密,循環的方式跑腳本,依然可以破解