Linux 下的密码 Hash破解方法

Linux 下的密码 Hash破解方法

 

0x00 前言

Linux 系统下,用户的密码会被加密保存在文件/etc/shadow 中,关于密码的加密方式与破解方法有哪些呢?本文尝试对这一部分内容进行整理,介绍相关基础知识,测试常用方法,帮助大家对此有更直观的认识。

0x01 简介

本文将要介绍以下内容:

  • Linux 下用户密码的保存格式
  • Linux 下用户密码的加密方法
  • 破解用户密码 hash 的常用工具和方法

0x02 Linux 下用户密码的保存格式

Linux 密码信息保存在两个文件中,分别为: /etc/passwd/etc/shadow

/etc/passwd:

普通用户权限能够查看

保存用户信息,每一行代表一个用户,每一行通过冒号:分为七个部分

  1. 用户名
  2. 密码,x 表示密码保存在 / etc/shadow
  3. UID,0 代表 root
  4. GID,表示所在组
  5. 描述信息,依次为 Full Name、Room Number、Work Phone、Home Phone 和 Other
  6. 用户主目录
  7. 默认 shell 类型

eg.

test2:x:1001:1001:test2,11111,111111-11,222222-22,test:/home/test2:/bin/bash
  • 用户名:test2
  • 密码保存在 / etc/shadow
  • UID 为 1001
  • GID 为 1001
  • 描述信息: Full Name []: test2 Room Number []: 11111 Work Phone []: 111111-11 Home Phone []: 222222-22 Other []: test
  • 用户主目录为 / home/test2
  • 默认 shell 为 / bin/bash

/etc/shadow:

只有 root 用户权限能够查看

保存加密后的密码和用户的相关密码信息,每一行代表一个用户,每一行通过冒号:分为九个部分

  1. 用户名
  2. 加密后的密码
  3. 上次修改密码的时间 (从 1970.1.1 开始的总天数)
  4. 两次修改密码间隔的最少天数,如果为 0,则没有限制
  5. 两次修改密码间隔最多的天数, 表示该用户的密码会在多少天后过期,如果为 99999 则没有限制
  6. 提前多少天警告用户密码将过期
  7. 在密码过期之后多少天禁用此用户
  8. 用户过期日期 (从 1970.1.1 开始的总天数),如果为 0,则该用户永久可用
  9. 保留

注:

参数说明可通过 man shadow 获取

eg.

test2:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0:17470:0:99999:7:::
  • 用户名:test2
  • 加密后的密码:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0
  • 上次修改密码的时间 (从 1970.1.1 开始的总天数为 17470)
  • 两次修改密码间隔:没有限制
  • 两次修改密码间隔最多的天数:没有限制
  • 提前 7 天警告用户密码将过期
  • 该用户永久可用

由示例可知,加密的密码具有固定格式:

$id$salt$encrypted

id 表示加密算法,1 代表 MD5,5 代表 SHA-256,6 代表 SHA-512 salt 表示密码学中的 Salt, 系统随机生成 encrypted 表示密码的 hash

0x03 破解用户密码 hash 的常用工具和方法

由于 Linux 的密码加密使用了 Salt, 所以无法使用彩虹表的方式进行破解, 常用的方法为字典破解和暴力破解

字典破解和暴力破解的常用工具:

1、John the Ripper

(1) 字典破解

Kali2.0 集成了 John the Ripper

字典文件位于 /usr/share/john/password.lst

使用 Kali Linux 上的 John 自带的密码列表。路径为 /usr/share/john/password.lst

使用字典破解:

john --wordlist=/usr/share/john/password.lst ./shadow

注:

也可使用其他字典

(2) 暴力破解:

john ./shadow 

列出已破解的明文密码:

john --show ./shadow 

结果如下图

2、hashcat

Kali2.0 集成了 hashcat

字典文件使用 /usr/share/john/password.lst

修改 hash 格式:只保留 $salt$encrypted

eg.

原 hash:

test2:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0:17470:0:99999:7:::

修改后:

$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0

(1) 字典破解:

hashcat -m 1800 -o found1.txt --remove shadow /usr/share/john/password.lst 

参数说明:

-m:hash-type,1800 对应 SHA-512 详细参数可查表:https://hashcat.net/wiki/doku.php?id=example_hashes -o:输出文件 –remove:表示 hash 被破解后将从 hash 文件移除 shadow:代表 hash 文件 /usr/share/john/password.lst:代表字典文件

成功破解出 2 个 hash,如下图

(2) 暴力破解:

hashcat -m 1800 -a 3 -o found2.txt shadow ?l?l?l?l --force

参数说明: -a:attack-mode,默认为 0,3 代表 Brute-force,即暴力破解 ?l:表示小写字母,即 abcdefghijklmnopqrstuvwxyz,4 个? l 代表暴力破解的长度为 4 ?u:表示大写字母,即 ABCDEFGHIJKLMNOPQRSTUVWXYZ ?h:代表十六进制字符小写,即 0123456789abcdef ?H:代表十六进制字符大写,即 0123456789ABCDEF ?s:表示特殊符号,即!”#$%&’()*+,-./:;<=>?@[]^_`

() ~ ?a:表示所有字符,即? l?u?d?s ?b:表示十六进制,即 0x00 - 0xff

成功暴力破解出 hash,结果如下图

3、在线网站

  1. https://hce.iteknical.com/

    HCE 分布式计算平台, 需要积分才能使用

  2. http://www.cmd5.com/

    目前暂不支持 SHA-512

4、mimipenguin

下载地址:

https://github.com/huntergregal/mimipenguin

原理类似于 mimikatz,通过内存导出明文密码

0x04 小结

本文介绍了 Linux 下的密码保存格式,测试了两款常用工具:John the Ripper 和 hashcat,分别使用字典和暴力两种破解方法。

作为一篇总结基础知识的文章,希望能够尽可能的做到简洁实用,欢迎读者补充,后续也会对这部分内容不断进行完善。

原文链接:https://3gstudent.github.io/3gstudent.github.io/Linux%E4%B8%8B%E7%9A%84%E5%AF%86%E7%A0%81Hash-%E5%8A%A0%E5%AF%86%E6%96%B9%E5%BC%8F%E4%B8%8E%E7%A0%B4%E8%A7%A3%E6%96%B9%E6%B3%95%E7%9A%84%E6%8A%80%E6%9C%AF%E6%95%B4%E7%90%86/

  • 3
    点赞
  • 23
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值