John the Ripper/Rules
From charlesreid1
Contents
Using Rules with John
Download an excellent set of John the Ripper rules from KoreLogic security here: http://openwall.info/wiki/_media/john/korelogic-rules-20100801.txt
Based on the 2010 Defcon Crack Me If You Can contest.
Install the Rules
To install the rules, download that text file. Now run this command to add those rules to John's configure file:
$ cat korelogic-rules-20100801.txt >> /etc/john/john.conf
Using Rules
Now you can use any of the rules that are listed here (http://contest-2010.korelogic.com/rules.html) or that you see in the form of [List.Rules:KoreLogicRulesPrependSeason] in the rules file (just get rid of the List.Rules: part.)
$ john --wordlist=rockyou-10.txt --format=wpapsk --rules=KoreLogicRulesPrependYears crackme
List All the Rules
Here's a one-liner to list all the commands in the configuragion file, by grepping and cutting. Remember that each one of these options could have thousands of password variations that result!
$ for ruleset in `grep KoreLogicRules /etc/john/john.conf | cut -d: -f 2 | cut -d\] -f 1`; do echo ${ruleset}; done
KoreLogicRulesPrependSeason
KoreLogicRulesAppendSeason
KoreLogicRulesPrependHello
KoreLogicRulesPrependYears
KoreLogicRulesAppendYears
KoreLogicRulesAppendCurrentYearSpecial
KoreLogicRulesAppend4Num
KoreLogicRulesAppend5Num
KoreLogicRulesAppend6Num
KoreLogicRulesAppendSpecial3num
KoreLogicRulesAppendSpecial4num
KoreLogicRulesPrependCAPCAPAppendSpecial
KoreLogicRulesPrependNumNumAppendSpecial
KoreLogicRulesPrependNumNum
KoreLogicRulesPrependNumNumNum
KoreLogicRulesPrependNumNumNumNum
KoreLogicRulesPrependNumNumSpecial
KoreLogicRulesPrepend2NumbersAppend2Numbers
KoreLogicRulesPrependSpecialSpecial
KoreLogicRulesAppendSpecialNumberNumber
KoreLogicRulesAppendSpecialNumberNumberNumber
KoreLogicRulesPrependSpecialSpecialAppendNumber
KoreLogicRulesPrependSpecialSpecialAppendNumbersNumber
KoreLogicRulesPrependSpecialSpecialAppendNumbersNumberNumber
KoreLogicRulesAppend2Letters
KoreLogicRulesPrepend4NumAppendSpecial
KoreLogicRulesAppend4NumSpecial
KoreLogicRulesAppend3NumSpecial
KoreLogicRulesAppend2NumSpecial
KoreLogicRulesAddJustNumbersLimit8
KoreLogicRulesDevProdTestUAT
KoreLogicRulesPrependAndAppendSpecial
KoreLogicRulesAppendJustNumbers
KoreLogicRulesAppendNumbers_and_Specials_Simple
KoreLogicRulesAppendJustSpecials
KoreLogicRulesMonthsFullPreface
KoreLogicRulesAddShortMonthsEverywhere
KoreLogicRulesPrepend4LetterMonths
KoreLogicRulesAdd2010Everywhere
KoreLogicRulesPrependDaysWeek
KoreLogicRulesAdd1234_Everywhere
KoreLogicRulesAppendMonthDay
KoreLogicRulesAppendMonthCurrentYear
KoreLogicRulesReplaceNumbers2Special
KoreLogicRulesReplaceNumbers
KoreLogicRulesReplaceLettersCaps
KoreLogicRulesAddDotCom
KoreLogicRulesAppendCap-Num_or_Special-Twice
KoreLogicRulesAppendSpecialLowerLower
KoreLogicRulesAppendJustSpecials3Times
KoreLogicRulesPrependJustSpecials
KoreLogicRulesAppend1_AddSpecialEverywhere
KoreLogicRulesPrependNumNum_AppendNumSpecial
KoreLogicRulesAppendNum_AddSpecialEverywhere
KoreLogicRulesAppendNumNum_AddSpecialEverywhere
KoreLogicRulesAppendNumNumNum_AddSpecialEverywhere
KoreLogicRulesAppendYears_AddSpecialEverywhere
KoreLogicRulesL33t
KoreLogicRulesReplaceSpecial2Special
KoreLogicRulesReplaceLetters
Use All the Rules
This is overkill, but it extracts every rule from the KoreLogic rule list and runs john with every one of those rules. From the full list here http://contest-2010.korelogic.com/rules.html you can see that'll take a loooooooong time. But this would be handy to use with grep to filter out some of the rule names.
$ for ruleset in `grep KoreLogicRules /etc/john/john.conf | cut -d: -f 2 | cut -d\] -f 1`; do john --wordlist=rockyou-10.txt --format=wpapsk --rules=${ruleset} crackme; done
A nice subset:
$ grep KoreLogicRules /etc/john/john.conf | cut -d: -f 2 | cut -d\] -f 1 | grep Year | grep -v Special KoreLogicRulesPrependYears KoreLogicRulesAppendYears KoreLogicRulesAppendMonthCurrentYear
Put into use:
$ for ruleset in `grep KoreLogicRules /etc/john/john.conf | cut -d: -f 2 | cut -d\] -f 1 | grep Year | grep -v Special`; do john --wordlist=rockyou-10.txt --format=wpapsk --rules=${ruleset} crackme; done
Pin Numbers
Analysis of pin numbers: http://www.datagenetics.com/blog/september32012/
I wanna turn this into some John the Ripper rules.
Defining Rules
First, start by defining some rule names.
Some 4-digit numbers that are low-hanging fruit and hard to program with patterns:
[List.Rules:CommonPins] # low hanging fruit -[c:] \p[c:] Az"0123" <+ -[c:] \p[c:] Az"1234" <+ -[c:] \p[c:] Az"2345" <+ -[c:] \p[c:] Az"3456" <+ -[c:] \p[c:] Az"4567" <+ -[c:] \p[c:] Az"5678" <+ -[c:] \p[c:] Az"6789" <+ -[c:] \p[c:] Az"7890" <+ -[c:] \p[c:] Az"1004" <+ -[c:] \p[c:] Az"4321" <+ -[c:] \p[c:] Az"6969" <+ -[c:] \p[c:] Az"1122" <+ -[c:] \p[c:] Az"1313" <+ -[c:] \p[c:] Az"0007" <+ -[c:] \p[c:] Az"0070" <+ -[c:] \p[c:] Az"1984" <+ -[c:] \p[c:] Az"2580" <+ -[c:] \p[c:] Az"2468" <+ -[c:] \p[c:] Az"1357" <+ # xxxx -[c:] \p[c:] Az"0000" <+ -[c:] \p[c:] Az"0000"s01 <+ -[c:] \p[c:] Az"0000"s02 <+ -[c:] \p[c:] Az"0000"s03 <+ -[c:] \p[c:] Az"0000"s04 <+ -[c:] \p[c:] Az"0000"s05 <+ -[c:] \p[c:] Az"0000"s06 <+ -[c:] \p[c:] Az"0000"s07 <+ -[c:] \p[c:] Az"0000"s08 <+ -[c:] \p[c:] Az"0000"s09 <+
Create some patterns for one-number PINs:
[List.Rules:OneNumberPins] # 000x -[c:] \p[c:] Az"0001" <+ -[c:] \p[c:] Az"0001"s12 <+ -[c:] \p[c:] Az"0001"s13 <+ -[c:] \p[c:] Az"0001"s14 <+ -[c:] \p[c:] Az"0001"s15 <+ -[c:] \p[c:] Az"0001"s16 <+ -[c:] \p[c:] Az"0001"s17 <+ -[c:] \p[c:] Az"0001"s18 <+ -[c:] \p[c:] Az"0001"s19 <+ # x000 -[c:] \p[c:] Az"1000" <+ -[c:] \p[c:] Az"1000"s12 <+ -[c:] \p[c:] Az"1000"s13 <+ -[c:] \p[c:] Az"1000"s14 <+ -[c:] \p[c:] Az"1000"s15 <+ -[c:] \p[c:] Az"1000"s16 <+ -[c:] \p[c:] Az"1000"s17 <+ -[c:] \p[c:] Az"1000"s18 <+ -[c:] \p[c:] Az"1000"s19 <+
Next comes two-number PIN patterns.
[List.Rules:TwoNumberPins] # x001 -[c:] \p[c:] Az"1001" <+ -[c:] \p[c:] Az"2001" <+ -[c:] \p[c:] Az"2001"s23 <+ -[c:] \p[c:] Az"2001"s24 <+ -[c:] \p[c:] Az"2001"s25 <+ -[c:] \p[c:] Az"2001"s26 <+ -[c:] \p[c:] Az"2001"s27 <+ -[c:] \p[c:] Az"2001"s28 <+ -[c:] \p[c:] Az"2001"s29 <+ # xyxy where x and y are within 1 of each other -[c:] \p[c:] Az"XYXY"sX1sY2 <+ -[c:] \p[c:] Az"XYXY"sX2sY3 <+ -[c:] \p[c:] Az"XYXY"sX3sY4 <+ -[c:] \p[c:] Az"XYXY"sX4sY5 <+ -[c:] \p[c:] Az"XYXY"sX5sY6 <+ -[c:] \p[c:] Az"XYXY"sX6sY7 <+ -[c:] \p[c:] Az"XYXY"sX7sY8 <+ -[c:] \p[c:] Az"XYXY"sX8sY9 <+ # yxyx -[c:] \p[c:] Az"XYXY"sY1sX2 <+ -[c:] \p[c:] Az"XYXY"sY2sX3 <+ -[c:] \p[c:] Az"XYXY"sY3sX4 <+ -[c:] \p[c:] Az"XYXY"sY4sX5 <+ -[c:] \p[c:] Az"XYXY"sY5sX6 <+ -[c:] \p[c:] Az"XYXY"sY6sX7 <+ -[c:] \p[c:] Az"XYXY"sY7sX8 <+ -[c:] \p[c:] Az"XYXY"sY8sX9 <+
The next set of PINs are for dates of the form MMYY:
[List.Rules:DatePins] # MMDD -[c:] \p[c:] Az"0[1-9][0-2][0-9]" <+ -[c:] \p[c:] Az"0[1-9]3[0-1]" <+ -[c:] \p[c:] Az"1[0-2][0-2][0-9]" <+ -[c:] \p[c:] Az"1[0-2]3[0-1]" <+ [List.Rules:YearPins] # 19xx -[c:] \p[c:] Az"19[0-9][0-9]" <+ # 20xx -[c:] \p[c:] Az"20[0-1][0-9]" <+ -[c:] \p[c:] Az"20[2-9][0-9]" <+
Top it all off by defining a master rule:
# all pins [List.Rules:AllPins] .include [List.Rules:CommonPins] .include [List.Rules:OneNumberPins] .include [List.Rules:TwoNumberPins] .include [List.Rules:DatePins] .include [List.Rules:YearPins]
Blow It Up
Check it:
1 password will become 1,240 passwords. Better than 10,000!
root@morpheus:~/box/besside# john --wordlist=one.txt --stdout | wc -l 1 root@morpheus:~/box/besside# john --wordlist=one.txt --rules=Pins --stdout | wc -l 1240 root@morpheus:~/box/besside#
92 passwords blows up to 114,080 passwords.
root@morpheus:~/box/besside# john --wordlist=/root/codes/SecLists/Passwords/rockyou-10.txt --stdout | wc -l 92 root@morpheus:~/box/besside# john --wordlist=/root/codes/SecLists/Passwords/rockyou-10.txt --rules=Pins --stdout | wc -l 114080 root@morpheus:~/box/besside#
If we were checking a password file like phpbb.txt, which has 184,300 passwords, that would cost us 1,240 new passwords per password in the file (to check each password with a 4-digit number appended to it). That's 228,532,000 passwords total. At a rate of about 1,240 passwords per second, that would be 51, hours or 2.1 days. On a higher-end machine, you might get 1800 passwords per second, which cuts the time to 35 hours, or 1.4 days. Still a loooong time.
Breakdown
Note that each of these are tested with a single password as an input, but the number out is TWICE the number it should be, because John the Ripper is trying both uppercase and lowercase passwords.
root@morpheus:~/box/besside# john --wordlist=one.txt --rules=CommonPins --stdout | wc -l Press 'q' or Ctrl-C to abort, almost any other key for status 58p 0:00:00:00 100.00% (2016-03-29 04:25) 414.2p/s one9999 58 root@morpheus:~/box/besside# john --wordlist=one.txt --rules=OneNumberPins --stdout | wc -l Press 'q' or Ctrl-C to abort, almost any other key for status 36p 0:00:00:00 100.00% (2016-03-29 04:25) 257.1p/s one9000 36 root@morpheus:~/box/besside# john --wordlist=one.txt --rules=TwoNumberPins --stdout | wc -l Press 'q' or Ctrl-C to abort, almost any other key for status 50p 0:00:00:00 100.00% (2016-03-29 04:25) 384.6p/s one9898 50 root@morpheus:~/box/besside# john --wordlist=one.txt --rules=DatePins --stdout | wc -l Press 'q' or Ctrl-C to abort, almost any other key for status 696p 0:00:00:00 100.00% (2016-03-29 04:26) 4640p/s one1231 696 root@morpheus:~/box/besside# john --wordlist=one.txt --rules=YearPins --stdout | wc -l Press 'q' or Ctrl-C to abort, almost any other key for status 400p 0:00:00:00 100.00% (2016-03-29 04:26) 2666p/s one2099 400
Flags
Also on the wiki:
More information about how to do password generation using wordlists and the KoreLogic rules, as well as writing your own rules: John the Ripper/Password Generation
| john the ripper password generator and all-around cracking tool.
Testing John: John the Ripper/Benchmarking Using John on Password generation using rules and modes: John the Ripper/Password Generation Installing some useful password rules: John the Ripper/Rules Using John to feed password guesses to Aircrack: Aircrack and John the Ripper John the Ripper on AWS: Ubuntu/Barebones to JtR Getting Passwords from John: John the Ripper/Password Recovery
|