专栏首页信安之路初探密码破解工具JTR

初探密码破解工具JTR

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

如何安装JTR

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

系统环境:在Ubuntu16.04.2 LTS

软件版本:John The Ripper 1.8

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

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

cat john.conf

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

rm -fr john.pot

常用参数解释

--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):

./unshadow /etc/passwd /etc/shadow > user_hash.txtcat user_hash.txt

./unshadow /etc/group /etc/gshadow >> group_hash.txtcat group_hash.txt

实际测试用户

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模式,直到把所有的规则都跑完,很显然,如果用户比较多,这样耗时必然就会很长,可以看到,由于我的密码设的都比较简单,所以瞬间就出来了,实际中可没那么轻松:

./john --user=klion,sec,1004,webadmin,httpd,1007 user_hash.txt

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

./john --single --user=klion,sec,1004,webadmin,httpd,1007 user_hash.txt

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

john --wordlist=./weakpass.txt --users=elk,root user_hash.txt

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

./john --wordlist=./weakpass.txt --shells=/usr/sbin/noglogin user_hash.txt

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

./john --incremental:digits --users=webadmin user_hash.txt

显示已经破解出的hash:

./john --user=klion,sec,1004,webadmin,httpd,1007 user_hash.txt --show

破解实战

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

single模式 -> wordlist模式 -> incremental模式 -> 默认模式

破解最普通的md5

john --wordlist=weakpass.txt --format=Raw-MD5 hash.txt

破解 ntlm

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

john --list=formats	查看john所支持的所有散列类型
john --wordlist=weakpass.txt --format=NT2 hash.txt

破解mssql 2012系列数据库用户hash

john --wordlist=weakpass.txt --format=mssql12 hash.txt

破解mysql 系列数据库用户hash

john --wordlist=weakpass.txt --format=mysql-sha1 hash.txt

破解oracle 11g 数据库用户hash

john --wordlist=weakpass.txt --format=oracle11 hash.txt

破解 postgresql 数据库用户hash

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

john --wordlist=weakpass.txt  hash.txt

破解office 系列加密后的hash(2016)

"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

john --wordlist=weakpass.txt --format=drupal7 hash.txt

破解rar系列密码hash(rar和rar5的hash提取破解方法几乎是一模一样的)

rar2john.exe sec.rar > rar_hash.txt
type rar_hash.txt
john --wordlist=weakpass.txt --format=rar rar_hash.txt
rar2john.exe sec.rar > rar5_hash.txt
type rar5_hash.txt
john --wordlist=weakpass.txt --format=rar5 rar5_hash.txt

破解zip密码hash

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识别的格式,大家可以试试

"c:\Program Files\python27\python.exe" 7z2john.py sec.7z
john --wordlist=weakpass.txt --format=7z 7hash.txt

破解pdf密码hash

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

"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

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

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还是有着比较大差距的[就免费版来说],估计专业版应该会好很多吧,反正我自己没用过

本文分享自微信公众号 - 信安之路(xazlsec),作者:klion

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 密码破解那些事

    最近恰巧刚好搞到一批hash,所以就寻思着,要不顺手小结一点关于hash破解的东西吧,反正经常要用,就当留备忘了,顺便也分享给大家,主要还是希望大家都能在实际渗...

    信安之路
  • 这些hash你了解吗?

    hash大家都不陌生,不同的hash又不一样的特征,今天的主要内容就是带大家一起来学习了解一下不同的hash。

    信安之路
  • 利用彩虹表破解Hash

    另一款相对比较实用的hash破解工具,其本质是基于事先生成好的对应的各种散列类型的彩虹表,支持GPU[amd/英伟达]加速,通常自己都是专门用来跑windows...

    信安之路
  • 这些hash你了解吗?

    hash大家都不陌生,不同的hash又不一样的特征,今天的主要内容就是带大家一起来学习了解一下不同的hash。

    信安之路
  • webpack中hash、chunkhash和contenthash三者的区别

    在webpack中有时需要使用hash来做静态资源实现增量更新方案之一,文件名的hash值可以有三种hash生成方式,每一种都有不同应用场景,那么三者有何区别呢...

    yangdongnan
  • 通过7个函数解密区块链(附代码)

    我想对很多人来说,区块链是一种很难理解的技术,虽然我也看了很多视频和文章,但从我个人角度来讲,直到我开始写一些简单的区块链应用,我才真正理解了它是什么以及它的潜...

    数据派THU
  • 通过7个python函数理解区块链 原

    我想对于那里的很多人来说,区块链就是这种现象,很难不让你头脑发热。我开始观看视频和阅读文章,但对我个人而言,直到我编写自己的简单区块链,我才真正理解它是什么以及...

    笔阁
  • pd_ds中的hash

    前言 在c++的STL中,提供了一种hash函数,其用法和map是几乎一样的,但是速度却能快接近一倍 使用方法 需要的头文件 #include<ext/pb_d...

    attack
  • 编程学习中,这几点你还是的注意

    说到编程行业这个,可能对于行外人来说,什么高大上啊,工资高啊,压力大啊等等词语会拿来形容从事该行业的的人员。没错,这些词语确实是能够形容该行业,也不完全正确!正...

    卡二条的技术圈子
  • 深入浅出一致性Hash原理

    在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载...

    加多

扫码关注云+社区

领取腾讯云代金券