zoukankan      html  css  js  c++  java
  • 记一次ubuntu密码破解(未成功)

    ubuntu账户密码探究

    查看账户信息

    cat /etc/passwd
    

    如上图所示,每一行的格式为(以root为例),每一段信息都是用隔开的:

    root:x : 0 :0 : root : /root : /bin/bash
    

    root表示账户名称

    x表示密码,这里表示不能明文
    0:0表示UID和GID
    root:/root说明该用户的信息,并标明其home目录在/root

    /bin/bash当用户执行shell命令的时候,是用的/bin/bash

    查看密码

    显然上面的密码是没有明文显示的,经过查阅资料可以知道,密码是放在/etc/shadow中的,而打开这个文件是需要root权限的。假设我们想查看ssozh这个用户的密码:

    su root
    cat /etc/shadow | grep ssozh
    

    得到结果如下:

    ssozh:$6$pESj8oMO$F4CIfS3/G9TE5aQ34Ifvcq74wZQhiBc9AqGuxTUPfUyEJ6M1e/ZwIcmWjkbPvrmxt3xod4Z4XRo2lYNxgip4x/:18363:0:99999:7:::
    

    上面这一段密码是如何显示的呢?每一个信息段也是用:隔开的:

    ssozh:用户名
    $6$pESj8oMO$F4CIfS3/G9TE5aQ34Ifvcq74wZQhiBc9AqGuxTUPfUyEJ6M1e/ZwIcmWjkbPvrmxt3xod4Z4XRo2lYNxgip4x/:加密后的密码
    18363:自上次修改密码后过去的天数(自1970年1月1日开始计算)
    0:多少天后可以修改密码
    99999:多少天后必须修改密码
    7:密码过期前多少天提醒更改密码

    • 后面几个分别表示密码过期后多少天禁用用户账户、用户被禁用的日期(自1970年1月1日经过的天数)、预留字段以备未来使用

    首先我们先顺序的看如何获得的这个MD5码:

    • 其哈希值前半部分为盐值(使用两个$符号间隔):$6$pESj8oMO$
    • 后半部分则是盐值+密码的哈希值

    验证。我们已知颜值为$6$pESj8oMO$,密码为123456

    import crypt 
    if __name__ == '__main__':
        print(crypt.crypt('123456','$6$pESj8oMO$'))
    

    显然是正确的。

    什么是盐值?

    最开始密码直接存储在数据库中:

    mysql> select * from User;
    +----------+----------+
    | UserName | PassWord |
    +----------+----------+
    | lichao   | 123      |
    | akasuna  | 456      |
    +----------+----------+
    

    这种明文存储十分容易泄露信息。数据库一旦泄露,那么所有用户名和密码都会泄露,后果非常严重。参见 《CSDN 详解 600 万用户密码泄露始末》

    为了规避明文存储的缺陷,人们开始使用md5码(SHA1)哈希后在存储,这时候数据库如下:

    mysql> select * from User;
    +----------+----------------------------------+
    | UserName | PwdHash                          |
    +----------+----------------------------------+
    | lichao   | 202cb962ac59075b964b07152d234b70 |
    | akasuna  | 250cf8b51c773f3f8dc8b4be867a9a02 |
    +----------+----------------------------------+
    

    这种散列的方法本来设计的已经很好了,但是有人收集常用的密码,然后对他们执行 MD5 或者 SHA1,然后做成一个数据量非常庞大的数据字典(彩虹表),然后对泄露的数据库中的密码就行对比,如果你的原始密码很不幸的被包含在这个数据字典中,那么花不了多长时间就能把你的原始密码匹配出来。这个数据字典很容易收集,CSDN 泄露的那 600w 个密码,就是很好的原始素材。

    为了应对用户密码过于简单就出现了盐值,数据存储形式如下:

    mysql> select * from User;
    +----------+----------------------------+----------------------------------+
    | UserName | Salt                       | PwdHash                          |
    +----------+----------------------------+----------------------------------+
    | lichao   | 1ck12b13k1jmjxrg1h0129h2lj | 6c22ef52be70e11b6f3bcf0f672c96ce |
    | akasuna  | 1h029kh2lj11jmjxrg13k1c12b | 7128f587d88d6686974d6ef57c193628 |
    +----------+----------------------------+----------------------------------+
    

    Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt),也就是说:

    MD5('123' + '1ck12b13k1jmjxrg1h0129h2lj') = '6c22ef52be70e11b6f3bcf0f672c96ce'
    MD5('456' + '1h029kh2lj11jmjxrg13k1c12b') = '7128f587d88d6686974d6ef57c193628'
    

    当用户登陆的时候,同样用这种算法就行验证。

    由于加了 Salt,即便数据库泄露了,但是由于密码都是加了 Salt 之后的散列,坏人们的数据字典已经无法直接匹配,明文密码被破解出来的概率也大大降低。

    参考:https://blog.csdn.net/sinat_30440627/article/details/53487076

    MD5是摘要算法 不存在“解密”的说法,所谓的解密就是暴力破解, 暴力破解也用好多种方法,查表应该是最快的,不过需要事先准备彩虹表。 像你这种如果盐值固定,且加密字符数量很少的话。生成的彩虹表不会很大。 或者用hashcat之类的工具来跑字典或者掩码之类的,速度也非常快。现在的GPU可以很快的暴露破解密码。

    • 散列算法没有“解密”这种说法,都是查表爆破。加盐只是增加暴力破解的难度 本质上并没有改变加密方式。如果密码本身就是多位数的复杂密码。知不知道盐区别不大。

    • 另外我们是没办法把"盐值"和"密码"分开的,我们可以把盐值放在前面中间或者后面。例如上面的ubuntu系统中,就是直接把盐值加载密码前面,通过$ $间隔开。这样其实我们是可以通过MD5后的数据知道盐值的。另外如果可以分离,你想想 我是不是可以把abcdefg这个7位密码分离成单独的7个 a b c d e f g 一位密码来破解不是快的飞起了么?

    • 参考:https://www.52pojie.cn/thread-1042699-1-1.html

    java安全Shiro的密码的MD5盐值加密

    https://blog.csdn.net/changudeng1992/article/details/81914534

    https://www.cnblogs.com/xiaowangxiao/p/10961384.html

  • 相关阅读:
    Manjaro 安装与初步使用
    hp 820 G3 驱动安装不上
    Linux Mint
    PHP模板引擎原理
    报名系统跟商品购物有点类似,可以参考一下他们的ER图
    tp5接口开发流程(思路版)
    mysql中主键和外键的作用,主表和从表如何区分,以及如何使用联合查询和TP5的联合查询
    关于会员-考生-考生自定义表单-预览打印
    PHP unserialize()和serialize两者的用法
    如何解决复杂的问题?如何在未知的领域里,解决需求?
  • 原文地址:https://www.cnblogs.com/SsoZhNO-1/p/12678854.html
Copyright © 2011-2022 走看看