目錄
1. 漏洞描述 2. 漏洞觸發條件 3. 漏洞影響範圍 4. 漏洞程式碼分析 5. 防禦方法 6. 攻防思考
1. 漏洞描述
Ecshop提供了密碼找回功能,但是整個密碼找回流程中存在一些設計上的安全隱患
1. Ecshop程式使用了MD5不可逆加密演算法,但是計算密文的生成元素都有可以很輕易地被黑客拿到 /* if (md5($adminid . $password) <> $code) 1. $adminid: 黑客顯式指定 2. $password: 暴力列舉 */ 2. 對重複失敗次數沒有做限制
Relevant Link:
http://www.wooyun.org/bugs/wooyun-2010-024689
2. 漏洞觸發條件
HTTP Package Repeater
3. 漏洞影響範圍
1. ecshop 2.7.2 2. ecshop 2.7.3 3. ...
4. 漏洞程式碼分析
admin/get_password.php
... /* 驗證新密碼,更新管理員密碼 */ elseif (!empty($_POST['action']) && $_POST['action'] == 'reset_pwd') { $new_password = isset($_POST['password']) ? trim($_POST['password']) : ''; $adminid = isset($_POST['adminid']) ? intval($_POST['adminid']) : 0; $code = isset($_POST['code']) ? trim($_POST['code']) : ''; if (empty($new_password) || empty($code) || $adminid == 0) { ecs_header("Location: privilege.php?act=login\n"); exit; } /* 以使用者的原密碼,與code的值匹配 */ $sql = 'SELECT password FROM ' .$ecs->table('admin_user'). " WHERE user_id = '$adminid'"; $password = $db->getOne($sql); /* 這裡是漏洞的關鍵 1. $adminid:黑客想要爆破攻擊重置密碼的物件 2. $password:黑客通過密碼暴力列舉 3. $code:黑客可以在本地使用相同的演算法進行計算得到 */ if (md5($adminid . $password) <> $code) { //此連結不合法 $link[0]['text'] = $_LANG['back']; $link[0]['href'] = 'privilege.php?act=login'; sys_msg($_LANG['code_param_error'], 0, $link); } ....
5. 防禦方法
這個漏洞屬於密碼學的抗窮舉設計缺陷,要對這個漏洞進行修復,同時要能保證對原有的業務進行平滑相容,我們可以從以下幾個方面去思考
1. 增加金鑰空間,提供攻擊者的攻擊成本:容易實現 2. 改變加密演算法,間接地提高了金鑰空間:需要對原有舊的密碼進行全量地升級,改造成本大
admin/get_password.php
/* 以使用者的原密碼,與code的值匹配 */ $sql = 'SELECT password FROM ' .$ecs->table('admin_user'). " WHERE user_id = '$adminid'"; $password = $db->getOne($sql); if (md5($adminid . $password) <> $code) { //此連結不合法 $link[0]['text'] = $_LANG['back']; $link[0]['href'] = 'privilege.php?act=login'; sys_msg($_LANG['code_param_error'], 0, $link); } //更新管理員的密碼 /* 這裡是pathc code的關鍵 程式碼中增加了隨機數的鹽,這極大地增加了黑客爆破的金鑰空間,提供了攻擊成本 */ $ec_salt=rand(1,9999); $sql = "UPDATE " .$ecs->table('admin_user'). "SET password = '".md5(md5($new_password).$ec_salt)."',`ec_salt`='$ec_salt' ". "WHERE user_id = '$adminid'";
6. 攻防思考
Copyright (c) 2014 LittleHann All rights reserved