成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

齊博CMS HMAC+Cookie注入漏洞分析

DangoSky / 550人閱讀

摘要:前言首先聲明這不是,具體齊博版本就不說了,后面應(yīng)該有人也發(fā)現(xiàn)這個(gè)漏洞并且發(fā)出來了。那時(shí)候?qū)Ξ?dāng)時(shí)的齊博系列進(jìn)行完整的分析和代碼審計(jì),漏洞不少,挑幾個(gè)有意思的發(fā)出來。任意長度最終密文則為由于網(wǎng)絡(luò)傳輸字符關(guān)系,齊博這里對(duì)進(jìn)行了一次操作。

前言

首先聲明這不是0day,具體齊博版本就不說了,后面應(yīng)該有人也發(fā)現(xiàn)這個(gè)漏洞并且發(fā)出來了。

本文為篤行日常工作記錄,文章是大概14年國慶節(jié)寫的,一直未公開。那時(shí)候?qū)Ξ?dāng)時(shí)的齊博系列進(jìn)行完整的分析和代碼審計(jì),漏洞不少,挑幾個(gè)有意思的發(fā)出來~。

一.HMAC簡介

HMAC 是密鑰相關(guān)的哈希運(yùn)算消息認(rèn)證碼( Hash-based Message Authentication Code),HMAC 運(yùn)算利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出。

詳細(xì)介紹自己google吧。

https://en.wikipedia.org/wiki...

二.齊博CMS HMAC解析

見文件inc/function.inc.php 中的mymd5 函數(shù)

/**
*加密與解密函數(shù)
**/
function mymd5($string, $action = "EN", $rand = ""){ //字符串加密和解密
         global  $webdb;
$secret_string = $webdb[mymd5].$rand."5*j,.^&;?.%#@!"; //絕密字符串,可以 任意設(shè)定
if  (!is_string($string)){
                $string  =  strval($string);
}
if ($string == = "") return "";
if ($action == "EN") $md5code = substr(md5($string), 8, 10); else{
$md5code = substr($string, -10);
$string = substr($string, 0, strlen($string) - 10);
}
//$key = md5($md5code.$_SERVER["HTTP_USER_AGENT"].$secret_string);
$key = md5($md5code.$secret_string);
$string = ($action == "EN" ? $string : base64_decode($string)); $len = strlen($key);
$code = "";
for ($i = 0; $i < strlen($string); $i++){
                $k  =  $i%$len;
                $code  .  =  $string[$i]  ^  $key[$k];
}
$code = ($action == "DE" ? (substr(md5($code), 8, 10) == $md5code ? $code : NULL) : base64_encode($code)."$md5code");
       return  $code;
}

開發(fā)人員把加密和解密的算法都合起來在了一起。這里的交換密鑰如下(附帶 rand 隨機(jī)變量),且系統(tǒng)安裝時(shí)候也會(huì)隨機(jī)產(chǎn)生參數(shù)$webdb[mymd5]data/config.php:

$secret_string    = $webdb[mymd5].$rand."5*j,.^&;?.%#@!"

結(jié)算構(gòu)成的密文信息結(jié)構(gòu)如下如下:

|任意長度密文|固定10字節(jié)hashcode|

總體加密過程概括如下:

Data = 原文
Key = $webdb[mymd5].$rand."5*j,.^&;?.%#@!"
HashKey = md5( Data + Key )
HashKey1 = substr( md5(Data),8,10 ) 固定 10 位的 hashcode,簽名用。
EncryptData = HashKey^Data    任意長度
最終密文則為
EncryptData+hashcode
由于網(wǎng)絡(luò)傳輸字符關(guān)系,齊博這里對(duì) EncryptData 進(jìn)行了一次 base64encode 操作。
實(shí)際得到的是 base64encode(EncryptData)+hashcode

總體解密過程如下:

Data = 密文
Key = $webdb[mymd5].$rand."5*j,.^&;?.%#@!"
DataReal = base64decode( substr( Data, 0, len(Data) – 8 )) 取出真正的密文,并且還原成二進(jìn)制 HashKey = md5(DataReal + Key)
HashKey1 = substr(Data,-8 ) 固定 10 位的 HashKey1,取最后 10 位。
OriginalData = HashKey^ DataReal    還原密文,并不是逆向解密。
最終一步 HashKey1 校驗(yàn) 如果 md5(OriginalData) 等于 HashKey1 那么則認(rèn)為這個(gè)消息是有效的那么最終明文為
OriginalData

整個(gè)交換的過程中對(duì)于用戶來說密鑰 Key 是不可見的,根據(jù)明文和密文是不可能直接還原出整個(gè)加密的算法,用戶對(duì)計(jì)算出 10 位 HashKey1 的簽名也是未知的,總體安全性比較高,要暴力破解枚舉則要 16^10 次方的數(shù)量級(jí)。

三.齊博類 HMAC 算法爆破的可能性

經(jīng)過分析,次算法可能存在一個(gè)極大的安全隱患就是計(jì)算EncryptData 引入的是 Data 的長度,在長度較短的時(shí)候可以進(jìn)行暴力枚舉。

$len = strlen($key);
$code = "";
for ($i = 0; $i < strlen($string); $i++){
         $k  =  $i%$len;
         $code  .  =  $string[$i]  ^  $key[$k];

如果我們構(gòu)造原文Data = ‘ly’ 那么 HashKey1 則可以固定成 c6555942cb ,那么整個(gè)加密串應(yīng)該是 EncryptDatac6555942cb 的形式。只要讓算法滿足 substr( md5(HashKey ^ Data),8,10) 等于 c6555942cb 即可。

又有:

Data = EncryptData^HashKey
EncryptData =HashKey ^ Data

我們的明文只有 2 位,那么能構(gòu)造的 EncryptData 是 00~FF 規(guī)模為 16^2 數(shù)量相當(dāng)可觀,那么暴力枚舉規(guī)模就轉(zhuǎn)換成了 16^len(Data) 復(fù)雜度。

四.齊博前臺(tái)認(rèn)證 COOKIES 注入

齊博系統(tǒng)在COOKIE 中使用了 HMAC,COOKIE 產(chǎn)生和使用其實(shí)都是服務(wù)端做的工作,其實(shí)沒有第一章所說的明顯的客戶端/服務(wù)端模式交換密鑰,這里的場(chǎng)景是廣義的 C/S模式,類似UC_Client/UC_Server,在業(yè)務(wù)邏輯上的C/S 模式并非物理的 C/S 模式。進(jìn)入整理,看文件 admin/global.php

/*用戶登錄*/
if ($_POST[loginname] && $_POST[loginpwd]) {
//省略省略
login_logs($_POST[loginname], "成功登錄,保密了"); $_COOKIE[Admin] = "$rs[uid]	".mymd5($rs[password]); setcookie("Admin", $_COOKIE[Admin], 0, "/");
}
if ($ForceEnter == 1){
$groupdb = @include(ROOT_PATH."data/group/3.php"); $Apower = ($groupdb[allowadmindb]);
}elseif(!$userdb){
         include  "./template/login.htm";
exit; }
else{
//同步前臺(tái)登錄
$md5code = mymd5("$lfjdb[uid]	$lfjdb[username]	$lfjdb[password]", "E N", $onlineip);
}
setcookie("adminID", $md5code, $timestamp + 1800, "/");
}

在驗(yàn)證登錄的后,多次使用了 HMAC 算法對(duì) cookie 進(jìn)行加密典型的有 $_COOKIE[adminID]$_COOKIE[admin]。

再看文件 inc/function.inc.php

//同步后臺(tái)登錄
if ($_COOKIE["adminID"] && $detail = mymd5($_COOKIE["adminID"], "DE", $onlin eip)){
unset($_uid, $_username, $_password);
list($_uid, $_username, $_password) = explode("	", $detail);
$lfjdb = $db->get_one("SELECT * FROM {$pre}memberdata WHERE uid="$
_uid" AND username="$_username""); }

由上文可知 $_COOKIE[adminID]的明文形式是

uid username password
三個(gè)參數(shù)由 tab 分割。

那么 list($_uid, $_username, $_password) = explode(" ", $detail); 之后就把結(jié)果保存到 $_uid , $_username$_password如果前后參數(shù)個(gè)數(shù)不同,那么 那個(gè)參數(shù)就會(huì)為空。

下面進(jìn)行查庫

$lfjdb = $db->get_one("SELECT * FROM {$pre}memberdata WHERE uid="$_uid" AND username="$_username"");

如果我們構(gòu)造 uid = “1’#”那么查詢語句實(shí)際就變成了 SELECT * FROM {$pre}memberdata WHERE uid=1滿足條件,前臺(tái)登錄成功,前臺(tái)登錄認(rèn)證就這一出。

由于 COOKIE 采用了密文交換,那么我們就不用關(guān)心 單引號(hào)被轉(zhuǎn)移的問題,真是太棒了,當(dāng)然這個(gè) uid 一定要存在,一般創(chuàng)始人 uid 基本=1結(jié)合上文,我們只要構(gòu)造出一個(gè)解密后的 COOKIE[adminID] = “1’#”即可。那么根據(jù)暴力分析一章,我們要構(gòu)造的 EncryptData 長度為 3范圍 000~fff總計(jì) 16^3=4096 規(guī)模,相當(dāng)可觀。

計(jì)算出 hashcode 為 cdb8c28d5d

ps:md5(1’#) =a425ef44cdb8c28d5d434b2a1343205e

那么我們只要枚舉 base64_encode( 000~fff) + cdb8c28d5d。

最重要的一點(diǎn)我們發(fā)現(xiàn)在認(rèn)證登錄的時(shí)候傳入了$onlineip 變量,可能導(dǎo)致 key 變動(dòng),不能暴力,看代碼 inc/function.inc.php

if ($_SERVER["HTTP_CLIENT_IP"]){
$onlineip = $_SERVER["HTTP_CLIENT_IP"]; }elseif($_SERVER["HTTP_X_FORWARDED_FOR"]){
} else{
}
$onlineip = $_SERVER["HTTP_X_FORWARDED_FOR"];
$onlineip  =  $_SERVER["REMOTE_ADDR"];

那么我們直接構(gòu)造固定的HTTP_X_FORWARDED_FOR 參數(shù)即可。
并且 http 請(qǐng)求提交登錄認(rèn)證頁面,并根據(jù)返回值判斷。

其實(shí)前臺(tái)可以直接getshell不過不在我們討論范圍內(nèi)。

最后 ending…如有不足請(qǐng)指點(diǎn),亦可留言或聯(lián)系 [email protected].
本文為篤行原創(chuàng)文章首發(fā)于大題小作,永久鏈接:齊博CMS:HMAC+COOkie注入漏洞分析

https://www.ifobnn.com/qibocmshmac.html

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30648.html

相關(guān)文章

  • 齊博cms漏洞分析

    摘要:原理分析還是很早之前爆出來的漏洞,現(xiàn)在拿出來學(xué)習(xí)一下,參考阿里巴巴漏洞發(fā)生在頁面中。并且與此同時(shí),齊博并未對(duì)進(jìn)行過濾操作。漏洞利用這里還是以文件中的變量為例。 ** 0x01 原理分析 **還是很早之前爆出來的漏洞,現(xiàn)在拿出來學(xué)習(xí)一下,參考阿里巴巴:https://security.alibaba.com/...漏洞發(fā)生在/inc/common.inc.php頁面中。首先看這個(gè)函數(shù):s...

    SHERlocked93 評(píng)論0 收藏0
  • 齊博cms漏洞分析

    摘要:原理分析還是很早之前爆出來的漏洞,現(xiàn)在拿出來學(xué)習(xí)一下,參考阿里巴巴漏洞發(fā)生在頁面中。并且與此同時(shí),齊博并未對(duì)進(jìn)行過濾操作。漏洞利用這里還是以文件中的變量為例。 ** 0x01 原理分析 **還是很早之前爆出來的漏洞,現(xiàn)在拿出來學(xué)習(xí)一下,參考阿里巴巴:https://security.alibaba.com/...漏洞發(fā)生在/inc/common.inc.php頁面中。首先看這個(gè)函數(shù):s...

    NoraXie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<