在渗透过程中,我们大概率会碰到很多加密的内容,而破解这些密文则可以给我们提供很多额外信息。本篇文章主要讲述,我们可以如何破解这些加密内容。
总体思路
对称加密
对称加密算法,若我们能爆破出秘钥则可以破译。频率分析、填充Oracle攻击也可以完成。
AES破解
DES破解
3DES
Blowfish
非对称加密
非对称加密算法,破解起来则比较困难,通常需要获取其私钥证书
RSA
ECDSA
Diffie-Hellman
MD5
MD5算法只能通过彩虹表爆破完成解密,而MD5等hash算法是经常会和渗透打交道的加密手段,所以我们会使用hashcat等工具完成一系列的破译工作。
MD5破解方法
当我们发现了一个MD5加密字符串后,我们要做到的就是破解他!
破解思路
1.通过hashid工具推断hash版本
2.将hash版本信息传递给hashcat等hash破解工具
是不是看起来很简单,但并非我们想的那么简单。我还会遇到以下情况。
情况 | 解决方法 |
hashid版本无法确定 | hashcat案例功能 |
密码本跑完了还是破解不了 | hashcat 6种攻击方法 |
密码存在特定规则完成不了复杂任务 | hashcat 规则参数 |
hashid工具
为更加准确判断hashId,我们可以使用python的模块---hashid完成这个步骤
使用方法
hashid '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'
Analyzing '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'
[+] MD5(APR)
[+] Apache MD5
自动化hashid失败处理办法
hashid工具并非那么的有效,它时长会出现无法识别的情况。在这种情况下我们可以通过 --example-hash 参数获取所有的例子,然后手动查找。手动查找过程中关注hashid位置的值。然后依据这个值来grep 和 less出我们想要知道的内容。
预判hashid可能性多的问题
值得注意的是,hashid
使用正则表达式尽力确定所提供的哈希类型。通常hashid
会为给定的哈希提供许多可能性,我们仍然需要进行一定程度的猜测来识别给定的哈希。了解哈希的来源将极大地帮助我们缩小哈希类型的范围,从而Hashcat
确定破解它所需的哈希模式。
后面瘾小生呢,会为大家出一期专题《渗透测试--获取hash的途径》,告诉大家哪里能拿到hash值,因为hash是内网信息收集的重点,而且位置众多。现在现在下面提供一些简单来源。
数据库
数据库中的密码通常是通过以下算法加密的
MD5
SHA1
bcrypt
Linux /etc/shadow文件
Linux系统中的用户hash通常采用以下算法加密
SHA512crypt
Windows NTML
Windows从内存,中间人攻击,还是SAM数据库中的凭证通常采用以下算法加密
NTML
NTMLv1
NTMLv2
hashcat工具
选项
参数 | 描述 |
--example-hashes | hash示例展示 |
-b | 指定hash类型,执行性能测试 |
--show | 展示已经破译的密码 |
调整速度
参数 | 描述 |
-O | 限定md5数字长度为32,当然这会让我们错失一些东西,所以建议优先运行-O,之后再重新运行其他部分 |
-w | 系统占有情况,后面可跟3中模式: 2 正常运作,可能对系统稍卡 3 高效运作,系统负担很大 |
事例
字典破解
攻击弱密码的hash他将变得非常有效
hashcat -a 0 -m <hash type> <hash file> <wordlist>
当出现cracked则表示成功破解,Exhausted表示使用了全部密码本没有找到正确的。
组合字典破解
将两个密码本组合
hashcat -a 1 -m 0 hash.txt ./wordlist1.txt ./wordlist2.txt
掩码破解
我们可以通过以下列表构建出我们希望爆破的字典
掩码列表:
参数 | 描述 |
-1 01 | 自定义占位符,表示该位置为0或1 |
-1 02 | 自定义占位符,表示该位置为0或2 |
hashcat -a 3 -m 0 md5_mask_example_hash -1 01 'ILFREIGHT?l?l?l?l?l20?1?d'
混合破解
原理上看是将字典模式和掩码模式混合一同使用
hashcat -a 6 -m 0 hybrid_hash /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt '?d?s'
字典+规则混合破解
hashcat可以生成密码本,通过下面的方式在提供一个密码本的同时,再给出对应的rule规则文档,我们就可以做出更加有趣的密码组。
hashcat -a 0 -m 100 hash /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt -r rule.txt
自定义rule
而rule文档的创建如下面的操作可见。具体的密码生成规则可查看该系列文章的渗透测试--密码本生成。
echo 'c so0 si1 se3 ss5 sa@ $2 $0 $1 $9' > rule.txt
echo 'password_ilfreight' > test.txt
hashcat -r rule.txt test.txt --stdout'''
P@55w0rd_1lfr31ght2019
'''
开源rule库
rule也不必要完全由我们自己生成,目前有很多大佬已经写好规则,我们自己使用即可。还有各种公开规则库,例如nsa-rules、Hob0Rules和《How to Hack Like a Legend》一书中介绍的corporate.rule。
hashcatzidai
ls -l /usr/share/hashcat/rules/
-g参数随机规则生成
如标题名字一样,-g参数可以自动生成1000条规则,然后作用于我们的字典。对于此种方法的成功率只能说!!感受命运的力量吧!!
hashcat -a 0 -m 100 -g 1000 hash /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt
john的脚本工具list
瘾小生平时比较喜欢使用hashcat来破解密码,john使用的不多,但john的hash转换脚本却非常有用,这对于我们而言是宝藏内容,所以下面仅仅介绍如何用john中的脚本获取hash值。
cmundy2@htb[/htb]$ locate *2john*
/usr/bin/bitlocker2john
/usr/bin/dmg2john
/usr/bin/gpg2john
/usr/bin/hccap2john
/usr/bin/keepass2john
/usr/bin/putty2john
/usr/bin/racf2john
/usr/bin/rar2john
/usr/bin/uaf2john
/usr/bin/vncpcap2john
/usr/bin/wlanhcx2john
/usr/bin/wpapcap2john
/usr/bin/zip2john
/usr/share/john/1password2john.py
/usr/share/john/7z2john.pl
/usr/share/john/DPAPImk2john.py
/usr/share/john/adxcsouf2john.py
/usr/share/john/aem2john.py
/usr/share/john/aix2john.pl
/usr/share/john/aix2john.py
/usr/share/john/andotp2john.py
/usr/share/john/androidbackup2john.py
...SNIP...
john脚本工具提取加密SSH私钥中的hash
ssh2john.py SSH.private > ssh.hash
cat ssh.hash
ssh.private:$sshng$0$8$1C258238FD2D6EB0$2352$f7b...SNIP...
数据整理
在我们获取到hash密码的时候有可能需要破解的值需要我们从文件中提取出来,比如ntds文件中的密码本等。所以下面我们介绍一下需要掌握的linux数据处理技巧
提取任意位置的值
awk -F: '{if (length($4) == 32) print $4}' ntds_hashes.txt > hashes.txt
awk -F【分隔符】 '{【代码】}' 【数据文件】 > 【输出文件】