Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Date: Sat, 25 Aug 2018 13:24:21 +0300
From: Aleksey Cherepanov <>
Subject: team john-users write-up for "Crack Me If You Can 2017" contest at DerbyCon

Team John-Users "Crack Me If You Can 2017" DerbyCon WriteUp

Contest Website [1]:


Contest Format:

KoreLogic has a tradition of changing up each CMIYC competition to
drive tool development and teach new cracking techniques. Previous
contests have focused on corporate password policies, passphrase
cracking, new file formats, and non-ASCII password encodings. This
year was no different. The contest changed from a "which team can
crack the most hashes" to a challenge format where each set of cracked
hashes revealed the URL to the next challenge. The first team to
complete all of the challenges was the winner. Team john-users
finished in third place, behind team hashcat and team CynoSure Prime.

Highlights of challenges included:
1) Moving to more of a forensics model of having to crack individual
hashes to move forward
2) Keeping with the forensics model, adjusting cracking strategy for
individual challenges based on the "easily" cracked hashes for that
3) Dealing with broken hash formats
4) Target research (hello pastebin)
5) Using regex mode, PRINCE mode and tools like combinator/kwprocessor
to generate guesses

Contest Materials:

As of 8/25/2018, the contest materials are still available on-line and
do not require registration to access. You can start the first
challenge using the following URL [2]:


Team Members:

Aleksey Cherepanov (Team Captain)
Denis Burykin aka Apingis
Dhiru Kholia
goblinmax [W&P]
Luis Rocha
Matt Weir
Solar Designer
Viktor Gazdag aka wucpi
and 1 additional member (see dedicated chapter)

Hardware Used:
~40-60 CPU cores
~15-20 GPUs
Many members of the team primarily relied on their general desktop
computer to complete the challenges, so had on average around 4 CPU
cores and 1 GPU.

Software Used:

- John the Ripper bleeding-jumbo [3]
- hashcat [4]
- kwprocessor [5]
- Custom scripts written during the contest


While our team is primarily associated with the John the Ripper tool,
since Hashcat is also open source we encouraged our members to use it
as well. Having a better understanding of both tools helps the
community and can lead to future improvements.

Team Organization:

Due to the nature of the challenges, collecting and submitting all of
the cracked passwords in one repository didn't make sense. Instead we
pasted cracks into a shared team IRC channel as well as posting them
to our mailing list. Due to the nature of our team, there was some
fragmentation as several members could not join the IRC channel. This
meant much of the collaboration occurred between those two mediums in
parallel. One advantage of this was that members who could not
actively participate in the cracking, (for example being at work
during a Friday), could still lend their support to figuring out
challenges, troubleshooting issues with Hashcat/JtR, and guess
generation strategies.

Contest Notes:

Our team really enjoyed the new format. It pushed us to try new things
and experiment in a friendly setting. As can be expected, there are a
lot of areas where we can improve our collaboration. Simple things
like timezones can provide unexpected challenges.

For a full write-up of the different challenges, we recommend Team
Hashcat's excellent write-up [6].


Most of the cracks included the URL for the next challenge. Each URL
was broken up into individual parts to make cracking it feasible. This
meant it was often possible to verify hash type by mangling some of
the common parts of the URL such at "https://", "dot", and "html".

Challenge #6 stood out as the results of cracking the NTLM hashes were
what appeared to be random strings. Based on some Google searching, (A
password cracker's best friend), we identified pastebin dumps of
additional hashes. When cracking them we found the URL for the next
challenge. We encountered the same problem as Team Hashcat reported at
this point where our team became confused which challenge number we
were on, (aka if the pastebin link referred to the same challenge or a
new one). This isn't a problem with the challenge itself, but points
to some improvements we can make regarding our workflow. Side note,
dates on pastebin posts were 17 August and 29 August which means the
hashes were available more than 1 month before the contest.

Challenge #8 was also interesting since the hash itself was missing
one character of the salt. This forced us to try and crack all
variations of the salt. We probably could have implemented this in the
custom formats for JtR, but it was much easier to simply generate all
permutations of the missing character as a different password hash and
then crack the entire set. Since there weren't that many hashes this
didn't slow us down much. If there were thousands/millions of target
hashes though then implementing this in JtR natively would have made
more sense so that all variations of a cracked hash would be removed
from future guessing attacks.

Challenge #9 was probably the most talked about challenge of the
contest. Cracking all but one hash of this challenge was fairly
straightforward, but the one hash stopped us cold. We were stuck on


There was a lot of wrong paths we took trying to finish that song,
writing variations of "NoMore", the band name, etc. PRINCE, and small
scripts were used heavily in this part. It wasn't until KoreLogic
published a hint about a rock star that we were finally able to
complete this challenge and move on. It turned out the final password
was "DidBonJovi". In retrospect was very similar to cracking passwords
in real life where one tough password can halt all forward progress.

As an example, here is one of the small scripts that Aleksey
Cherepanov wrote to generate versions of "nomore":

perl -le '$u = 20; for $a (1 .. $u) { for $b (1 .. $u) { for $c (1 ..
$u) { for $d (1 .. $u) { $k1 = "N" . ("o" x $a); $k2 = "M" . ("o" x
$b) . "r" . ("e" x $c); $k3 = ("!" x $d); for $kk1 ($k1, lc $k1, uc
$k1) { for $kk2 ($k2, lc $k2, uc $k2) { print $kk1 . $kk2; print $kk1
. $kk2 . $k3;} } } } } }' | john --pipe pw/ps2

This also can be directly implemented in JtR using JtR's built-in
regular expression mode (based on rexgen library):

john --regex='([nN]o{1,20}|NO{1,20})([mM]o{1,20}re{1,20}|MO{1,20}RE{1,20})!{0,20}' pw/ps2

All the challenges after that fell quite fast and involved things like
keyboard walks, (which some team members used kwprocessor [5] for).

Team impressions:

As stated earlier, the overall impression from our team was that the
contest was really fun! It was tough and very intensive. Critical
hashes were finished by different members, and everyone contributed
either via cracking, technical support, or other pieces of advice.
Different members approached the same problem in different ways and we
all benefited from learning from each other.

We appreciated the new format and found it interesting. A plus/minus
of it (depending on how you looked at it) was it also allowed us to
finish the competition vs. spending the last day frantically trying to
crack every last hash. Admittedly it was also frustrating getting
stuck, but that's password cracking for you! We do appreciate
KoreLogic providing hints to keep things moving along.


This was a relatively short contest so some members were not able to
join before it was completed. It also took a while for our team to
ramp up as it started on a Friday when many of our members were still
at work. This isn't a complaint as all the other teams had to deal
with the same challenges. As you can see from our time-line, a vast
majority of the contest was spent on challenge #9.

| Chal | Abs.time | Delta | Comment    |
|    1 |    01:10 |  1:09 |            |
|    2 |    01:42 |  0:32 |            |
|    3 |    03:02 |  1:20 |            |
|    4 |    04:02 |  1:00 |            |
|    5 |    06:16 |  2:14 |            |
|    6 |    06:47 |  0:31 | pastebin   |
|    7 |    08:06 |  1:19 |            |
|    8 |    10:36 |  2:30 |            |
|    9 |    24:26 | 13:50 | rock star  |
|   10 |    24:40 |  0:14 |            |
|   11 |    25:35 |  0:55 |            |
|   12 |    26:35 |  1:00 |            |
|   13 |    26:42 |  0:07 |            |
|   14 |    26:54 |  0:12 |            |
|   15 |    27:07 |  0:13 | submission |

Explaining the Unnamed Member:

Team john-users is open to anyone who wants to join. In the past this
hasn't been an issue since there has been a level of mutual respect
between the major teams that has discouraged cheating. But community
around contests grows and new players come. This was the first year
where we had a problem with our policy. One team member took our final
challenge submission and submitted it by themselves before we could
submit it. In part this was an issue with our workflow, (we wanted our
team captain Aleksey to submit it), so there was a 13 minute delay
between our final crack and our submission.

We confronted the team member who admitted what they did.

There was a lot of internal debate about how to handle this. A
majority of the team do not hold any grievances against the
individual. The individual contributed during the contest and quite
honestly this contest isn't worth dragging someone's name through the
mud. Therefore we are simply stripping their name from our team

We also are unlikely to change our recruitment policies to any
significant degree beyond coming up with a new standard of conduct.
This is a community group and we want to encourage new members to join
and to learn, not chase them away. This whole episode was saddening as
the individual showed real promise, but we're not going to burn
everything down to avoid a repeat. Of course, consistently being the
third place team also makes us a less appealing target! That being
said, we like to think we'll remain the same even if we achieve higher
rankings in the future. So please if you are reading this, consider
joining team john-users in the next challenge!

Full Disclosure, hint provided by the Unnamed Member:

The unnamed member posted a hint for challenge #9, "the rock star"
challenge to our IRC channel:

> I just got a hint
> It's nothing to do with "no more"
> It's not the lyrics

Even with that hint we did not make any progress. It was only after
the hint from the KoreLogic that we successfully completed this
challenge. There is some concern (but no indication) that this member
may have been in contact, (or listening in), with other teams. We
wanted to document this and be as transparent as possible.

Final Thanks:

We would like to thank other teams for the tough competition!

We would like to thank KoreLogic for their hard work on the contest!
This awesome event is an invaluable gift to us and all other participants.

A contest is a game environment very suitable for learning. It gives
materials and additional motivation, it forces participants to learn
more advanced cracking, and to build hardcore skills. We appreciate
all of the effort KoreLogic put into making this as we always learn
something new from these challenges.

Many thanks!

Team john-users

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.