• 歡迎訪問奇跡の海網站,本站不上傳任何資源,所有資源均來自于網絡,歡迎加入奇跡の海~!奇跡の海-WordPress QQ群
  • 本站下載資源為網絡上收集整理而來,并且以計算機技術研究交流為目的,版權歸原作者所有,僅供大家參考,學習,不存在任何商業目的與商業用途.
  • 本站系統鏡像均來自于官方原版,ed2k可視為P2P下載鏈接。所有操作系統默認均為試用版,如有正版密鑰可以有效激活,本站不提供任何激活和相關服務。

WordPress 3.8.2修復的cookie偽造漏洞

WP其他 奇跡の海 2年前 (2017-08-28) 478次瀏覽 已收錄 0個評論 掃描二維碼

WordPress 3.8.2發布了一個重要更新,在該次更新中,修復了一系列安全漏洞。其中最顯眼的就是cookie偽造漏洞(CVE -2014- 0166)。

我們來看修補的代碼:

????$key?=?wp_hash($username?.?$pass_frag?.?'|'?.?$expiration,?$scheme);
????$hash?=?hash_hmac('md5',?$username?.?'|'?.?$expiration,?$key);
?
?-??if?(?$hmac?!=?$hash?)?{
?+??if?(?hash_hmac(?'md5',?$hmac,?$key?)?!==?hash_hmac(?'md5',?$hash,?$key?)?)?{

前日嘗試分析該漏洞,奈何知識匱乏,對php特性不夠了解,一連用了幾個小時都想不出。想不通為何加了一次hash_hmac就可以修復漏洞。當時的我以為是涉及到了加密算法上的一些問題,就放棄了。

今日突然看到一篇文章,頓悟是comparision operator的問題。其實之前也有注意到 “!=” 與 “!==” 這兩個符號的不同,不過大致想了一下沒想到利用的可能,就把重點放在了hash_hmac上。也許這是wordpress的障眼法?呵呵,說笑。

我們把全部的關注點放到 “!=” 與 “!==” 上來:

我們知道php比較相等性的運算符有兩種,一種是strict,一種是non-strict。php manual中是這樣定義的:

“===”和”!==”即strict比較符,只有在類型相同時才相等。”==”和”!=”即non-strict比較符,會在類型轉換后進行比較。

再看php manual中給出的例子:

<?php var_dump(0?==?"a");?//?0?==?0?->?true
var_dump("1"?==?"01");?//?1?==?1?->?true
var_dump("10"?==?"1e1");?//?10?==?10?->?true
var_dump(100?==?"1e2");?//?100?==?100?->?true
?>

字符串在與數字比較前會自動轉換為數字,所以0==”a”了。

另外兩個字符串比較,如果兩個都是數字形式,則同時轉換為數字進行比較,所以”1″==”01″。

這時你要問了,wordpress的代碼中是將cookie中的hash和真實hash這兩個hash的字符串進行比較,和這個有什麼關系呢?

我們注意上面”10″==”1e1″這個例子,php智能的將科學計數形式的字符串轉換為對應數字(1e1 = 1*10^1 = 1)。兩個不同的字符居然相等了,不知到這裡你是否得到了啟示?

好吧,來一個明顯的,你一定會恍然大悟:

var_dump("0e123456789012345678901234567890"==="0")?//false
var_dump("0e123456789012345678901234567890"=="0")?//true

當hash以”0exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”之類的形式出現時,與”0″相等。

讓我們回到wordpress的驗證代碼上來。先生成根據用戶名($username)、密碼($pass_frag)、cookie有效期($expiration)、wp-config.php中的key($key)四個信息計算出對應的$hash (算法很簡單,不細說), 然后用cookie中取得的$hmac值與之進行比較($hmac != $hash ?),從而驗證cookie有效性。

另外提下,cookie的格式是這樣的:wordpress_hashofurl=username|expiration|hmac

我們能控制的變量有$username和$expiration,其中$username需要固定。于是我們可以通過控制cookie中的$expiration去改變$hash的值,然后將cookie中的$hmac設置為0

只要不斷改變$expiration,直到滿足$hash==”0″的$hash出現,就成功偽造了有效的cookie。

當然,通過粗略的數學概率運算即可推知,滿足條件的hash出現概率非常之低:

<span class="pln">P?=?Sum(10^n,n=0,30)/16^32?=?3.26526*10^-9</span>

接近三億個請求才有一個可碰上的概率,嗚嗚~

但是,相信我,天長日久、海枯石爛的付出終歸是會有結果的。

有時看人品,人品好的很快就碰到了,人品不好的就如我,幾乎五億了:

*作者:Ettack,轉載需注明來自FreeBuf黑客與極客(FreeBuf.COM)


版權聲明:本站所有文章和資源使用CC BY-NC-SA 4.0協議授權發布 , 轉載應當以相同方式注明文章來自“SeaOMC.COM->WordPress 3.8.2修復的cookie偽造漏洞!在下邊可以分享本文哦!
喜歡 (0)
[]
分享 (0)
奇跡の海
關于作者:
一個WordPress菜鳥!
發表我的評論
取消評論

表情 貼圖 加粗 刪除線 居中 斜體 簽到

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
中国福利彩票36选7开奖结果