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