CSDN数据库密码整理
最近很多网站的用户数据库都泄漏出来了,看来需要加强密码保护才行啊,前两天得到一份CSDN的用户数据库,应该可以做出一份强大的密码攻击字典吧。这份密码文件一共6428632行,287238395字节(273.9MB)。
说一下想法和思路,首先从文件中提取出密码字段,然后统计各个密码重复的次数,并按从高到底排序,最后进行去重。
第一步:截取密码字段
这份数据库文件的内容都是按照 account # password # [email protected] 这样的格式。
time sh -c 'cut -f 3 -d " " csdnpasswd > cut.pass'
这条命令的作用是将csdnpasswd文件中的第三个字段截取出来,设置分隔符为“ ”(空格),把结果存放到cut.pass文件里面,
并记录命令完成所花费的时间。运行的结果如下:
real 0m27.795s <== 实际使用时间(real time)
user 0m1.764s <== 用户态使用时间(the process spent in user mode)
sys 0m15.421s <==内核态使用时间(the process spent in kernel mode)
ls -l cut.pass一下,文件已经缩小到67211985字节,即64.1MB,大小为原来的23.4%,行数还是一样的六百多万行。
第二步:按密码重复的次数降序排列
接下来,对cut.pass文件进行排序,去重,这里要走一点弯路,要先把cut.pass文件排序,,然后去重并记录下每一个密码的重复次数,然后按重复的次数进行排序,并去掉记录下的次数着一个字段。
使用如下命令进行去重并标记密码出现的次数
sort cut.pass | uniq -c > pass.times
使用cat pass.times | wc -l 可以发现,现在的文件pass.times文件已经只剩下4036971行了。并且每一行的格式都变成times password 即出现次数和实际的密码。
如果使用time sh -c来查看的话,可以得到如下的结果,一共是1分多钟的时间,当然这和系统条件有关系,我是在虚拟机里面运行的。
real 1m14.886s
user 0m46.775s
sys 0m14.353s
第三步:按第一个字段对文件进行再一次的排序
使用如下命令:
sort -nr -k1 pass.times > pass.times.sort
将pass.times文件的第一个字段,按降序排列,并将结果输入到pass.times.sort文件中。
上面的命令中,n代表依数字大小排序,r代表是降序,k1代表按第一个字段(如果是k2,则按第二个字段)。使用head pass.times.sort可以看到结果如下:
235025 123456789
212750 12345678
76346 11111111
显示使用频率最高的密码是123456789,有235025个帐号在使用。单从它的长度来看,确实可以抵御字典攻击了。呵呵。提醒大家不要使用以上的三个密码了,哈!!!
第四步:提取密码
既然已经把它们按出现的频率排序过了,接下来就再把密码提出来 次就ok了。
cat pass.times.sort | awk ‘{print $2}’ > password.dict
现在得到的这一个password.dict文件,就是最后所得到的密码字典文件。
如果对Bash命令十分熟悉的话,当然可以很容易直接写一个Bash脚本,一步搞定。
从得到的数据来看,Bash的命令效率实很高的。假如是一般的冒泡或者其他排序算法,其复杂度应该为O(n*n),在最坏的情况下,这份密码文件操作10 的13次方数量级。基本上实不太现实的。而这份无序的文件最多只要不到两分钟就完成了,而且是在一台配置不高的虚拟机ubuntu里面,可见,Bash指 令的算法都是十分高效率的。
当前暂无评论 »