星期三, 3月 14, 2012
星期二, 3月 13, 2012
星期日, 3月 11, 2012
星期五, 3月 02, 2012
MD5 + Salt
問題: 特殊方法取得用戶資料表後,在沒有加鹽的情況下,很容易遭受密碼破解[md5('密碼');]。
以下展示MD5演算法+ salt的加密方式。
1. identifier.php 行 23
2. identifier.php 行 72-73
3. install.php 行 256
4. install.php 行 315
5. user.php 行 208-210
破解上述方式:
1. 取得SQL資料
2. 取得鹽字串
3. 取得鹽與密碼的排列方式
4. 取得加密方式md5、sha1、crypt等
5. ......................上述四個都拿到不太簡單ㄚ....................
以下展示MD5演算法+ salt的加密方式。
1. identifier.php 行 23
private $letters = 'abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';* 產生字典字串
2. identifier.php 行 72-73
public function getString($length = 12) { $str = str_repeat($this->letters, 10); $hash = substr(str_shuffle($str), 0, $length); return $hash;}* 重複字典字串10次後亂數打亂,再擷取前$length字元作為雜湊。
3. install.php 行 256
$salt = ( defined('MANUAL_PASSWORD_SALT') ) ? MANUAL_PASSWORD_SALT : $vh->getString(64);* MANUAL_PASSWORD_SALT定義為$vh->getString(64)
4. install.php 行 315
define('PASSWORD_SALT', $salt);* 定義PASSWORD_SALT=$salt
5. user.php 行 208-210
public function encryptPassword($uPassword, $salt = PASSWORD_SALT) { return md5($uPassword . ':' . $salt); }* MD5 $uPassword . ':' . $salt結合後的結果即為資料庫存入密碼欄位的資料 這樣的話即使取得MD5字串也沒有用,因為已經加入亂數雜湊的鹽了
破解上述方式:
1. 取得SQL資料
2. 取得鹽字串
3. 取得鹽與密碼的排列方式
4. 取得加密方式md5、sha1、crypt等
5. ......................上述四個都拿到不太簡單ㄚ....................
訂閱:
文章 (Atom)