暴力破解-离线破解(五)

1.1 离线破解方式

1.1.1 在线md5破解

https://www.cmd5.com/

1.1.2 john命令

john是一款大受欢迎的、免费的开源软件、基于字典的密码破解工具。用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法,如DES、MD4、MD5等。John支持字典破解方式和暴力破解方式,它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目的是破解不够牢固的 Unix/Linux 系统密码。

1.2 实例:离线破解密码

1.2.1 破解md5值

1.2.1.1 准备环境

# echo "123456" | md5sum
f447b20a7fcbf53a5d5be013ea0b15af  -

1.2.1.2 在线开始破解

图片[1]|暴力破解-离线破解(五)|leon的博客

1.2.1.3 脚本破解

脚本原理:脚本把我们输入的md5值跟字典中的所有密码的md5值进行对比,结果一致则正确:

# python md5.py f447b20a7fcbf53a5d5be013ea0b15af m.txt
解密成功!密码是: 123456

1.2.2 破解Linux的shadow密码

1.2.2.1 准备环境

# scp 192.168.10.80:/etc/shadow ./
# head -1 shadow
root:$6$uE6H/Ox7$sLPaHsgfFWUDI0ulSlYHr.mD88UxUbqd.diGisbjD6/LxIiX1tiTJ2jf8F5.zESn1BTX6vwfklx0G4bbCfuxI.:19199:0:99999:7:::

密码由三部分组成的: $id$salt$encrypted

  • id为1时采用md5进行加密
  • id为5时采用SHA256进行加密
  • id为6时采用SHA512进行加密

此处id为6,则使用的是SHA512加密

1.2.2.2 使用john进行破解

# john shadow

图片[2]|暴力破解-离线破解(五)|leon的博客

如果默认的密码字典不能够满足需求,使用下面方式指定字典进行破解:

# john shadow --wordlist=m.txt

图片[3]|暴力破解-离线破解(五)|leon的博客

1.2.2.3 查看破解结果

# john shadow --show
root:123456:19199:0:99999:7:::
1 password hash cracked, 0 left

1.2.2.4 报错解析

# john shadow
Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA256"
Use the "--format=HMAC-SHA256" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 512/512 AVX512BW 8x])
No password hashes left to crack (see FAQ )

这是告诉我们已经破解成功了,不需要再破解了,若要再次破解可以删除用户家目录下的.john目录后再进行破解。

1.3 md5破解脚本

1.3.1 原始字符加密

1.3.1.1 带换行符加密

# echo "123456" | md5sum
f447b20a7fcbf53a5d5be013ea0b15af  -

1.3.1.2 不带换行符加密

# echo -n "123456" | md5sum
e10adc3949ba59abbe56e057f20f883e  -

1.3.2 破解脚本

1.3.2.1 原始加密字符串中存在换行

# -*- coding:utf-8 -*-
import hashlib
import sys
def get_cmd5(md5str):
    m1 = hashlib.md5()
    m1.update(md5str.encode("utf-8"))
    result = m1.hexdigest()
    return result
def get_file_lines(filename):
    with open(filename) as f:
        line_list = f.readlines()
        return line_list
lines = get_file_lines((sys.argv[2]))
encode_str = (sys.argv[1])
for line in lines:
    if encode_str == get_cmd5(line):
        print("解密成功!密码是: "+line)
        break
    else:
        continue

1.3.2.2 原始加密字符串中不存在换行

# -*- coding:utf-8 -*-
import hashlib
import sys
def get_cmd5(md5str):
    m1 = hashlib.md5()
    m1.update(md5str.encode("utf-8"))
    result = m1.hexdigest()
    return result
def get_file_lines(filename):
    with open(filename) as f:
        line_list = f.readlines()
        return line_list
lines = get_file_lines((sys.argv[2]))
encode_str = (sys.argv[1])
for line in lines:
    line = line.strip()
    if encode_str == get_cmd5(line):
        print("解密成功!密码是: "+line)
        break
    else:
        continue
温馨提示:本文最后更新于2022-12-20 20:57:33,已超过436天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/2827.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享