简介
哈希函数,亦称为哈希算法或散列函数
能给一个任意大小的文件提取指纹。一般情况下,不同文件,哈希函数提取到的指纹是不一样的
Hash作用
- 文件校验
- 授权校验
- 基于口令的加密
- 消息验证码
- 数字签名
- 伪随机数生成器
- 一次性口令
性质
- 压缩性
- 单向性
- 理论无碰撞性
- 弱无碰撞性:对于给定的x,要找到一个y,并且满足y!=x且h(x)=h(y),在计算上不可行
- 强无碰撞性:找到任意一对数(x,y),要满足y!=x且h(x)=h(y),在计算上不可行
加密方式
普通网站
md5($str)
此方式使用最多md5($str.$salt)
md5($salt.$str)
sha1($str)
sha1($str.$salt)
sha1($salt.$str)
常见CMS后台数据库
- WordPress:生成用户密码时,随机产生了一个salt,将salt与password相加,进行count次md5,最后和encoded64的hash数值累加,得到一个以P开头的密码
- Dedecms:32位MD5减去头5位,减去尾7位,得到20位
- Joomla:
MD5($pass.$salt)
- Vbulletin;IceBB;Discus:
MD5(MD5($password).$salt)
- osCommerce:
MD5($salt.pass)
- TBDev:
MD5($salt.$pass.$salt)
- ipb;mybb:
MD5(MD5($salt).MD5($salt))
数据库
例如:
MySQL 4.1版本之前是MySQL323加密,MySQL 4.1和之后的版本都是MySQL SHA1加密
MySQL数据库中自带Old_Password(str)和Password(str)函数,它们均可以MySQL数据库里进行查询,前者是MySQL323加密,后者是MySQL SHA1方式加密
以MySQL323方式:
1
select old_password('123');
以MySQL SHA1方式:
1
select password('123')/SHA-1(SHA-1($pass))
Windows系统
- LM哈希原理:
- 将用户明文转换称
大写
- 将大写明文转换成
16进制
,并固定长度位14字节
,不足用0x00补齐
- 将16进制分为
2组
,每组7字节
- 分别将两组数据,用
str_to_key()
函数处理,得到两组8字节
数据 - 两组8字节数据将作为
DESKEY
对魔术字符串KGS!@#$%
进行标准DES加密 - 将加密后的这两组数据简单拼接,得到最后的
LM Hash
- NTLM:
与LM哈希算法相比: - 明文口令大小写敏感
- 无法根据NTLM Hash判断原始明文口令是否小于8字节
- 摆脱了魔术字符串
- MD4是真正的单项哈希函数,穷举作为数据源出现的明文,难度较大
Linux系统
其中shadow中存放的密码密文格式形如:1
$id$salt$encrypted
id
是指使用的哈希算法,可取如下值:1
: MD52a
:Blowfish(not in mainline glibc;added in some)5
: SHA-256(since glibc 2.7)6
: SHA-512(since glibc 2.7)salt
是使用上面HASH算法对密码进行HASH的一个干扰值encrypted
即密码的Hash
Hash的获取
抓住Hash密文
- 通过SQL注入漏洞获取密文(针对web应用)
- 嗅探、抓包拦截等获取(针对网络环境)
- SAM文件或者内存信息获取(Windows环境)
- 以root权限读取shadow文件(Linux环境)
Hash的破解
- 在线查找Hash破解
- 本地查找Hash破解
- 基于SAM文件破解
- 基于读取内存信息的破解
- 破解Linux口令我呢见
- 其它破解工具
补充
彩虹表