前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初探密码破解工具JTR

初探密码破解工具JTR

作者头像
信安之路
发布2018-08-08 10:52:12
3.1K0
发布2018-08-08 10:52:12
举报
文章被收录于专栏:信安之路信安之路

JTR是John The Ripper的缩写本身是用来专门破解linux系统用户hash的,但现在已经不再那么局限了,它同样也提供了非常多的散列类型,虽然,跟hashcat在某些方面确实还差了一个量级,但它也有自己很独到的地方,多用你就知道了,废话不多说,咱们开始吧

如何安装JTR

windows下提供了编译好的exe工具,但是实际破解的话还是推荐Linux版的,下面就简单介绍一下在Linux下的安装方法。

系统环境:在Ubuntu16.04.2 LTS

软件版本:John The Ripper 1.8

像类似的hash破解工具,不用多说,单独找个显卡或者CPU性能好点的机器是必须的,要不,意义何在呢,编译安装的过程就非常简单了,如下[如果实在嫌手敲的累,自己放脚本里跑跑就好了]

代码语言:javascript
复制
wget http://www.openwall.com/john/j/john-1.8.0.tar.xz
tar xvfJ john-1.8.0.tar.xz
cd john-1.8.0/src
make 选择对应的系统平台进行编译
make clean linux-x86-64
echo $?
cd ../run/
./john --test 测试当前系统的破解速度
echo $?

安装完以后,看到如下的情况,基本就算安装成功了

一些小建议

1 下面是john 默认破解规则的配置文件(可自行设置每种模式下的具体破解规则,一般没有极特殊的需求,我们是很少改配置的,有兴趣可以仔细阅读该文件):

代码语言:javascript
复制
cat john.conf

2 john在运行期间会在当前目录产生一个john.pot文件,用来缓存破解时的数据,主要是用来记录破解进度什么的,如果你每次想从头开始破解,直接把这个文件手工删除,然后重新跑即可

代码语言:javascript
复制
rm -fr john.pot

常用参数解释

代码语言:javascript
复制
--single	简单破解模式,也是默认的执行模式,就是根据用户和家目录名进行一些简单的变形猜解
--incremental   逐个遍历模式[其实跟hashcat的increment模式是一样的],直到尝试完所有可能的组合
--wordlist      纯字典模式,后面跟上字典的路径即可
--external      扩展[自定义]破解规则模式,今天先不讲,有闲工夫会专门说
--restore	从上次的破解进度接着执行破解过程,它会把破解的过程存到john.pot文件中,下次破解会先读取该文件,如果不想让它从这儿读取,而是从头跑,直接把它删掉就好了
--show 		显示已经破解出来的hash及所对应的明文密码
--users		只破解指定用户的hash,可以是用户名或者对应的uid
--groups	只破解指定用户组的hash,可以是组名或者对应的gid
--shells	只破解指定shell的hash,可以用逗号分隔多个shell程序
--format	指定要破解的hash所对应的加密类型,可以不用手工指定,john会自动识别
--stdout	从标准重定中接收指定字符

关于不同破解模式的官方介绍,如下,没事儿还是建议多看看官方文档,对你肯定会有很大的帮助:http://www.openwall.com/john/doc/MODES.shtml

Incremental模式详解

关于Incremental模式的一些默认破解规则,最大跑8位,为了节省时间,建议挨个字符集尝试,特别不建议一上来就给个特别大的范围,比如,all,机器性能不是太好的话,可能要跑很久:

破解模式的具体方法

破解的密码长度

所包含的字符

Incremental:all

0-8

All 95 printable ASCII characters

Incremental:all15

0-5

All 95 printable ASCII characters

Incremental:all6

6

All 95 printable ASCII characters

Incremental:all7

7

All 95 printable ASCII characters

Incremental:all8

8

All 95 printable ASCII characters

Incremental:alpha

1-8

A-Z 纯大写字母

Incremental:digits

1-8

0-9 纯数字

Incremental:lanman

0-7

A-Z, 0-9, and some special characters 大写字母,数字加一些特殊字符

测试举例

暂以破解linux系统用户密码hash为例,我们需要先合并下linux系统中的用户/组和密码及hash的配置文件(实际中,你可以想办法直接把目标的账户hash文件先down下来,然后再在本地合并,另外,在john中有个比较好的地方,如果实在不知道某条hash的具体散列类型,直接在john后跟上要破解的hash即可,它会自动去识别出类型,然后先尝试简单模式,如果简单模式破不出来,会自动再用incremental):

代码语言:javascript
复制
./unshadow /etc/passwd /etc/shadow > user_hash.txtcat user_hash.txt

./unshadow /etc/group /etc/gshadow >> group_hash.txtcat group_hash.txt
实际测试用户
代码语言:javascript
复制
klion:x:1002:1002::/home/klion:
sec:x:1003:1003::/home/sec:
master:x:1004:1004::/home/master:
webadmin:x:1005:1005::/home/webadmin:
httpd:x:1006:1006::/home/httpd:
elk:x:1007:1007::/home/elk:/usr/sbin/noglogin
破解过程

破解linux系统用户的密码hash[新一点的发行版默认基本都是基于'sha512crypt'加密的],实际破解中,最好指定用户名,shell类型,以节省时间,接下来的演示中,为了能尽快演示给大家看到实际的破解效果,会尽量选择字典模式,实际破解中,按照下面的爆破顺序来就好了: 首先,使用默认的爆模式,它会先尝试single模式,然后再尝试incremental模式,直到把所有的规则都跑完,很显然,如果用户比较多,这样耗时必然就会很长,可以看到,由于我的密码设的都比较简单,所以瞬间就出来了,实际中可没那么轻松:

代码语言:javascript
复制
./john --user=klion,sec,1004,webadmin,httpd,1007 user_hash.txt

粗暴简单的爆破模式 [single],只爆破指定用户的hash(如果不手工指定hash类型,john会自动帮你识别,并提示你):

代码语言:javascript
复制
./john --single --user=klion,sec,1004,webadmin,httpd,1007 user_hash.txt

基于纯字典的爆破模式[wordlist,顾名思义,你需要事先精心准备好一个高质量字典,字典不用过大,可以多在质量上做些文章]:

代码语言:javascript
复制
john --wordlist=./weakpass.txt --users=elk,root user_hash.txt

只破解特定shell类型的用户hash,如果用户实在比较多,我们只需要破解那些可以登录到系统中的用户就好了,伪用户可以暂时不用管:

代码语言:javascript
复制
./john --wordlist=./weakpass.txt --shells=/usr/sbin/noglogin user_hash.txt

逐个遍历的爆破模式,这里暂以纯数字为例[incremental 实际破解速度可能会比较的慢,毕竟是一位位的猜解,组合比较多]:

代码语言:javascript
复制
./john --incremental:digits --users=webadmin user_hash.txt

显示已经破解出的hash:

代码语言:javascript
复制
./john --user=klion,sec,1004,webadmin,httpd,1007 user_hash.txt --show

破解实战

实际破解中推荐的爆破顺序,为了尽量节省爆破时间,可以自行尝试:

代码语言:javascript
复制
single模式 -> wordlist模式 -> incremental模式 -> 默认模式
破解最普通的md5
代码语言:javascript
复制
john --wordlist=weakpass.txt --format=Raw-MD5 hash.txt
破解 ntlm

可能是编译的时候,没把有些库加进去,导致john不支持NT2类型的hash,所以后面的掩饰就直接用win版的john代替了(实际测试的hash为2008r2系统用户的hash):

代码语言:javascript
复制
john --list=formats	查看john所支持的所有散列类型
john --wordlist=weakpass.txt --format=NT2 hash.txt
破解mssql 2012系列数据库用户hash
代码语言:javascript
复制
john --wordlist=weakpass.txt --format=mssql12 hash.txt
破解mysql 系列数据库用户hash
代码语言:javascript
复制
john --wordlist=weakpass.txt --format=mysql-sha1 hash.txt
破解oracle 11g 数据库用户hash
代码语言:javascript
复制
john --wordlist=weakpass.txt --format=oracle11 hash.txt
破解 postgresql 数据库用户hash

如果特意指定散列类型貌似不太好使,让它自动识别就好了,不知道今天什么情况,之前在centos7中用一直都没问题的呀

代码语言:javascript
复制
john --wordlist=weakpass.txt  hash.txt
破解office 系列加密后的hash(2016)
代码语言:javascript
复制
"c:\Program Files\python27\python.exe" office2john.py sec.docx >> office_hash.txt
type office_hash.txt
john --wordlist=weakpass.txt --format=office office_hash.txt
破解drupal7 用户密码hash
代码语言:javascript
复制
john --wordlist=weakpass.txt --format=drupal7 hash.txt
破解rar系列密码hash(rar和rar5的hash提取破解方法几乎是一模一样的)
代码语言:javascript
复制
rar2john.exe sec.rar > rar_hash.txt
type rar_hash.txt
john --wordlist=weakpass.txt --format=rar rar_hash.txt
代码语言:javascript
复制
rar2john.exe sec.rar > rar5_hash.txt
type rar5_hash.txt
john --wordlist=weakpass.txt --format=rar5 rar5_hash.txt
破解zip密码hash
代码语言:javascript
复制
zip2john.exe sec.zip > zip_hash.txt
type zip_hash.txt
john --wordlist=weakpass.txt --format=PKZIP zip_hash.txt
破解7z密码hash

可能提取脚本的问题,暂时没空管它,不过还有7z2hashcat.pl的脚本(运行时候可能需要你自己装一些perl模块)可以直接转成hashcat识别的格式,大家可以试试

代码语言:javascript
复制
"c:\Program Files\python27\python.exe" 7z2john.py sec.7z
john --wordlist=weakpass.txt --format=7z 7hash.txt
破解pdf密码hash

可能又是脚本的问题,哪天闲下来了统一搞下吧,看样子,脚本估计没几个能用的

代码语言:javascript
复制
"c:\Program Files\python27\python.exe" security-geek-2016-A.pdf > pdf_hash.txt
type pdf_hash.txt
john.exe pdf_hash.txt

这里跟pgsql一样,不用特意指定类型,暂时还不知道是什么毛病

破解wpa/wpa2hash

直接从标准输出中读取密码然后挨个尝试

代码语言:javascript
复制
john --stdout --incremental:all | aircrack-ng -b 目标ap的mac -w - wpa2*.cap

参考连接

https://countuponsecurity.files.wordpress.com/2016/09/jtr-cheat-sheet.pdf

http://msu-nftc.org/courses/intro/material/9 Password Cracking/Tools/John the Ripper.pdf

总结

作为john的入门使用,到这里基本就差不多了,确实非常简单,里面所支持的散列类型这里就不一一演示了,破解方式几乎都是一样的,关键是知道各种爆破模式的工作细节和各类hash的提取方法,这才是今天要关注的重点,关于自定义规则后续有空会再单独说明,它比hashcat唯一好一点的是,如果你不指定目标的hash类型它会自动匹配,但实际破解中跟hashcat还是有着比较大差距的[就免费版来说],估计专业版应该会好很多吧,反正我自己没用过

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何安装JTR
  • 一些小建议
  • 常用参数解释
  • Incremental模式详解
  • 测试举例
    • 实际测试用户
      • 破解过程
      • 破解实战
        • 破解最普通的md5
          • 破解 ntlm
            • 破解mssql 2012系列数据库用户hash
              • 破解mysql 系列数据库用户hash
                • 破解oracle 11g 数据库用户hash
                  • 破解 postgresql 数据库用户hash
                    • 破解office 系列加密后的hash(2016)
                      • 破解drupal7 用户密码hash
                        • 破解rar系列密码hash(rar和rar5的hash提取破解方法几乎是一模一样的)
                          • 破解zip密码hash
                            • 破解7z密码hash
                              • 破解pdf密码hash
                                • 破解wpa/wpa2hash
                                • 参考连接
                                • 总结
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档