root权限登入后获得/etc/shadow文件之后文本打开
shadow 文件:
在linux系统中, /etc/shadow 文件存放着用户的密码哈希值。
shadow中存放的密码密文格式如下:
$id$salt$encrypted
其中id是指使用的哈希算法:
可取如下值:
ID | Method
--------------------------
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
salt:是使用上面hash算法对密码进行hash的一个干扰值。
encrypted:
这个值即 密码的hash, 但不是直接的hash("passwd"),而是hash("passwd+salt")后,再经过编码。
实际应用:
1. 在有shadow文件的前提下暴力破解(也只能暴力破解)用户密码
2. 实现自己的passwd命令。某种场景下是很有用的(在云计算中,可以方便的为使用同一模板的linux虚拟机生成不同密码)
示例:
该程序使用linux 系统中的crypt函数生成可替换shadow中密码域中的密码hash。
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
//crypt 使用方式参见man crypt
//exemple:
//./bin password $6$ffffffff
int main(int argc, char *argv[])
{
if(argc!=3)
return -1;
char *buf = crypt((const char *)argv[1], (const char *)argv[2]);
printf("salt: %s, crypt: %s\n", argv[2], buf);
return 0;
}
编译方法:gcc a.c -lcrypt -o passwd
使用: ./passwd 123 \$6\$abcdefgh
会输出:
salt: $6$abcdefgh, crypt: $6$abcdefgh$sNmFESeRuFG3asLlnZJwXSxrybA0XIDpk90fLJ9Cmzn6iJiSdKoKIKr5oVHlvQoAubV22YLUGcTVztOLfZM9g0
使用$6$abcdefgh$sNmFESeRuFG3asLlnZJwXSxrybA0XIDpk90fLJ9Cmzn6iJiSdKoKIKr5oVHlvQoAubV22YLUGcTVztOLfZM9g0 替换shadow 文件中你要修改的用户中的密码域,密码便自动修改成了123。
shadow文件的格式:
具体可参考这里:http://www.tldp.org/HOWTO/Shadow-Password-HOWTO.html
crypt 使用方法:
参见: man crypt
原文出处http://hi.baidu.com/gzlick/item/fdedea7b45517a2c5d1789e0