Ecshop提供了密碼找回功能,但是整個(gè)密碼找回流程中存在一些設(shè)計(jì)上的安全隱患
1. Ecshop程序使用了MD5不可逆加密算法,但是計(jì)算密文的生成元素都有可以很輕易地被黑客拿到
/*
if (md5($adminid . $password) <> $code)
1. $adminid: 黑客顯式指定
2. $password: 暴力枚舉
*/
2. 對(duì)重復(fù)失敗次數(shù)沒(méi)有做限制
1. 漏洞觸發(fā)條件
HTTP Package Repeater
2 漏洞影響范圍
1. ecshop 2.7.2
2. ecshop 2.7.3
3. ...
3. 漏洞代碼分析
admin/get_password.php
...
/* 驗(yàn)證新密碼,更新管理員密碼 */
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;
}
/* 以用戶(hù)的原密碼,與code的值匹配 */
$sql = 'SELECT password FROM ' .$ecs->table('admin_user'). " WHERE user_id = '$adminid'";
$password = $db->getOne($sql);
/*
這里是漏洞的關(guān)鍵
1. $adminid:黑客想要爆破攻擊重置密碼的對(duì)象
2. $password:黑客通過(guò)密碼暴力枚舉
3. $code:黑客可以在本地使用相同的算法進(jìn)行計(jì)算得到
*/
if (md5($adminid . $password) <> $code)//www.zuimoban.com
{
//此鏈接不合法
$link[0]['text'] = $_LANG['back'];
$link[0]['href'] = 'privilege.php?act=login';
sys_msg($_LANG['code_param_error'], 0, $link);
}
....
4. 防御方法
這個(gè)漏洞屬于密碼學(xué)的抗窮舉設(shè)計(jì)缺陷,要對(duì)這個(gè)漏洞進(jìn)行修復(fù),同時(shí)要能保證對(duì)原有的業(yè)務(wù)進(jìn)行平滑兼容,我們可以從以下幾個(gè)方面去思考
1. 增加密鑰空間,提供攻擊者的攻擊成本:容易實(shí)現(xiàn)
2. 改變加密算法,間接地提高了密鑰空間:需要對(duì)原有舊的密碼進(jìn)行全量地升級(jí),改造成本大
admin/get_password.php
/* 以用戶(hù)的原密碼,與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的關(guān)鍵
代碼中增加了隨機(jī)數(shù)的鹽,這極大地增加了黑客爆破的密鑰空間,提供了攻擊成本
*/
$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'";
新聞熱點(diǎn)
疑難解答
圖片精選