网上有段代码生成密码的
function get_password() {
# Check whether our local salt is present.
SALT=/var/lib/radom_salt
if [ ! -f "$SALT" ]
then
head -c 512 /dev/urandom > "$SALT"
chmod 400 "$SALT"
fi
password=`(cat "$SALT"; echo $1) | md5sum | base64`
echo ${password:0:13}
}
cat /var/lib/radom_salt | md5sum 这段代码生成的每次结果都一样的,所以上面的代码,只要知道参数,密码都是唯一的,这是所有的 linux 都这样的,还是怎么回事。
自己写的代码用到它了,结果出现严重问题,只要猜到用户名,我的密码就能算出来。
1
typcn 2015-11-12 19:29:22 +08:00
如果 /var/lib/radom_salt 是这个脚本, cat /var/lib/radom_salt 会返回你这个脚本的内容
如果不是,会返回 "cat: /var/lib/radom_salt: No such file or directory" 的 MD5 |
2
cloudzhou 2015-11-12 19:36:13 +08:00
cat /proc/sys/kernel/random/uuid | md5sum
|
3
ooxxcc 2015-11-12 19:36:15 +08:00
脚本不是先
head -c 512 /dev/urandom > /var/lib/radom_salt 然后才 cat /var/lib/radom_salt | md5sum 要先更新这个文件然后再 md5sum 啊……你直接来后面这句干嘛 |
4
mcfog 2015-11-12 19:38:44 +08:00
LZ 你去查下 /dev/urandom 是什么就知道为什么这样了
|
5
nirocfz 2015-11-12 20:03:20 +08:00
@mcfog /dev/urandom 还是能产生随机内容的,没那么不堪。
这个问题难道不是因为只生成了一次 /var/lib/radom_salt 文件,因为那个 if 判断,文件存在就不在生成新的了。 |
6
msg7086 2015-11-12 21:29:11 +08:00
猜到用户名就能算密码?咋算的?难不成你还把 salt 发给别人了?
|
7
ryd994 2015-11-13 06:21:57 +08:00 via Android
1. 谁让你用 md5 来着
2. 这就是个教科书级的错误实现,重用 salt |
8
mengzhuo 2015-11-13 08:07:29 +08:00 via iPhone
salt 也不能重用啊!
像我司都是有特定算法把用户的 uuid 的一部分拿来做 salt 的 |
9
jings 2015-11-13 13:35:41 +08:00
tr -dc "\041"-"\176" < /dev/urandom |head -c 60|md5sum
|
10
jings 2015-11-13 13:38:36 +08:00
openssl rand -hex 10
|
11
rootit 2015-11-15 18:05:55 +08:00
完美生成随机:
head -10 < /dev/urandom|tr -dc 'a-zA-Z0-9^&()!@.^%'|cut -c 1-15 想生成多长就 cut 多长 |
13
sbmzhcn OP 我有个 VPS 上的 FTP 账号密码全部被黑客破解,我怀疑是这个脚本的问题。
get_password username 如果 username 不变密码就不会变。 现在比较明白了,每个 VPS 生成的 /var/lib/radom_salt 应该都不一样的,黑客应该不可能知道 /var/lib/radom_salt 的内容。 所以账号泄露应该还有其它原因。 |