linuxcrackinghashcat

hashcat - toggle-case dictionary attack (case sensitive)


I'm new to computer security but I'm trying the same to make a toggle case attack starting from a dictionary password.

I read there that it's possible to alternate uppercase and lower case word starting from a dictionary to have all combinations (case sensitive).

I don't know what command to use and 4 now I'm stopped on standard dictionary attack

sudo hashcat -m 16800 convertedpcap.16800 dict.txt

Someone knows howto?

Here the complete help (I removed - [ Hash modes ] - to preserve space):

kali@kali:~$ hashcat --help
hashcat - advanced password recovery

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

- [ Options ] -

 Options Short / Long           | Type | Description                                          | Example
================================+======+======================================================+=======================
 -m, --hash-type                | Num  | Hash-type, see references below                      | -m 1000
 -a, --attack-mode              | Num  | Attack-mode, see references below                    | -a 3
 -V, --version                  |      | Print version                                        |
 -h, --help                     |      | Print help                                           |
     --quiet                    |      | Suppress output                                      |
     --hex-charset              |      | Assume charset is given in hex                       |
     --hex-salt                 |      | Assume salt is given in hex                          |
     --hex-wordlist             |      | Assume words in wordlist are given in hex            |
     --force                    |      | Ignore warnings                                      |
     --status                   |      | Enable automatic update of the status screen         |
     --status-timer             | Num  | Sets seconds between status screen updates to X      | --status-timer=1
     --stdin-timeout-abort      | Num  | Abort if there is no input from stdin for X seconds  | --stdin-timeout-abort=300
     --machine-readable         |      | Display the status view in a machine-readable format |
     --keep-guessing            |      | Keep guessing the hash after it has been cracked     |
     --self-test-disable        |      | Disable self-test functionality on startup           |
     --loopback                 |      | Add new plains to induct directory                   |
     --markov-hcstat2           | File | Specify hcstat2 file to use                          | --markov-hcstat2=my.hcstat2
     --markov-disable           |      | Disables markov-chains, emulates classic brute-force |
     --markov-classic           |      | Enables classic markov-chains, no per-position       |
 -t, --markov-threshold         | Num  | Threshold X when to stop accepting new markov-chains | -t 50
     --runtime                  | Num  | Abort session after X seconds of runtime             | --runtime=10
     --session                  | Str  | Define specific session name                         | --session=mysession
     --restore                  |      | Restore session from --session                       |
     --restore-disable          |      | Do not write restore file                            |
     --restore-file-path        | File | Specific path to restore file                        | --restore-file-path=x.restore
 -o, --outfile                  | File | Define outfile for recovered hash                    | -o outfile.txt
     --outfile-format           | Num  | Define outfile-format X for recovered hash           | --outfile-format=7
     --outfile-autohex-disable  |      | Disable the use of $HEX[] in output plains           |                                                           
     --outfile-check-timer      | Num  | Sets seconds between outfile checks to X             | --outfile-check=30                                        
     --wordlist-autohex-disable |      | Disable the conversion of $HEX[] from the wordlist   |                                                           
 -p, --separator                | Char | Separator char for hashlists and outfile             | -p :                                                      
     --stdout                   |      | Do not crack a hash, instead print candidates only   |                                                           
     --show                     |      | Compare hashlist with potfile; show cracked hashes   |                                                           
     --left                     |      | Compare hashlist with potfile; show uncracked hashes |                                                           
     --username                 |      | Enable ignoring of usernames in hashfile             |                                                           
     --remove                   |      | Enable removal of hashes once they are cracked       |                                                           
     --remove-timer             | Num  | Update input hash file each X seconds                | --remove-timer=30                                         
     --potfile-disable          |      | Do not write potfile                                 |                                                           
     --potfile-path             | File | Specific path to potfile                             | --potfile-path=my.pot                                     
     --encoding-from            | Code | Force internal wordlist encoding from X              | --encoding-from=iso-8859-15                               
     --encoding-to              | Code | Force internal wordlist encoding to X                | --encoding-to=utf-32le                                    
     --debug-mode               | Num  | Defines the debug mode (hybrid only by using rules)  | --debug-mode=4                                            
     --debug-file               | File | Output file for debugging rules                      | --debug-file=good.log                                     
     --induction-dir            | Dir  | Specify the induction directory to use for loopback  | --induction=inducts                                       
     --outfile-check-dir        | Dir  | Specify the outfile directory to monitor for plains  | --outfile-check-dir=x                                     
     --logfile-disable          |      | Disable the logfile                                  |                                                           
     --hccapx-message-pair      | Num  | Load only message pairs from hccapx matching X       | --hccapx-message-pair=2                                   
     --nonce-error-corrections  | Num  | The BF size range to replace AP's nonce last bytes   | --nonce-error-corrections=16                              
     --keyboard-layout-mapping  | File | Keyboard layout mapping table for special hash-modes | --keyb=german.hckmap                                      
     --truecrypt-keyfiles       | File | Keyfiles to use, separated with commas               | --truecrypt-keyf=x.png                                    
     --veracrypt-keyfiles       | File | Keyfiles to use, separated with commas               | --veracrypt-keyf=x.txt                                    
     --veracrypt-pim            | Num  | VeraCrypt personal iterations multiplier             | --veracrypt-pim=1000                                      
 -b, --benchmark                |      | Run benchmark of selected hash-modes                 |                                                           
     --benchmark-all            |      | Run benchmark of all hash-modes (requires -b)        |                                                           
     --speed-only               |      | Return expected speed of the attack, then quit       |                                                           
     --progress-only            |      | Return ideal progress step size and time to process  |                                                           
 -c, --segment-size             | Num  | Sets size in MB to cache from the wordfile to X      | -c 32                                                     
     --bitmap-min               | Num  | Sets minimum bits allowed for bitmaps to X           | --bitmap-min=24                                           
     --bitmap-max               | Num  | Sets maximum bits allowed for bitmaps to X           | --bitmap-max=24                                           
     --cpu-affinity             | Str  | Locks to CPU devices, separated with commas          | --cpu-affinity=1,2,3                                      
     --example-hashes           |      | Show an example hash for each hash-mode              |                                                           
 -I, --opencl-info              |      | Show info about detected OpenCL platforms/devices    | -I                                                        
     --opencl-platforms         | Str  | OpenCL platforms to use, separated with commas       | --opencl-platforms=2                                      
 -d, --opencl-devices           | Str  | OpenCL devices to use, separated with commas         | -d 1                                                      
 -D, --opencl-device-types      | Str  | OpenCL device-types to use, separated with commas    | -D 1                                                      
     --opencl-vector-width      | Num  | Manually override OpenCL vector-width to X           | --opencl-vector=4
 -O, --optimized-kernel-enable  |      | Enable optimized kernels (limits password length)    |
 -w, --workload-profile         | Num  | Enable a specific workload profile, see pool below   | -w 3
 -n, --kernel-accel             | Num  | Manual workload tuning, set outerloop step size to X | -n 64
 -u, --kernel-loops             | Num  | Manual workload tuning, set innerloop step size to X | -u 256
 -T, --kernel-threads           | Num  | Manual workload tuning, set thread count to X        | -T 64
     --spin-damp                | Num  | Use CPU for device synchronization, in percent       | --spin-damp=50
     --hwmon-disable            |      | Disable temperature and fanspeed reads and triggers  |
     --hwmon-temp-abort         | Num  | Abort if temperature reaches X degrees Celsius       | --hwmon-temp-abort=100
     --scrypt-tmto              | Num  | Manually override TMTO value for scrypt to X         | --scrypt-tmto=3
 -s, --skip                     | Num  | Skip X words from the start                          | -s 1000000
 -l, --limit                    | Num  | Limit X words from the start + skipped words         | -l 1000000
     --keyspace                 |      | Show keyspace base:mod values and quit               |
 -j, --rule-left                | Rule | Single rule applied to each word from left wordlist  | -j 'c'
 -k, --rule-right               | Rule | Single rule applied to each word from right wordlist | -k '^-'
 -r, --rules-file               | File | Multiple rules applied to each word from wordlists   | -r rules/best64.rule
 -g, --generate-rules           | Num  | Generate X random rules                              | -g 10000
     --generate-rules-func-min  | Num  | Force min X functions per rule                       |
     --generate-rules-func-max  | Num  | Force max X functions per rule                       |
     --generate-rules-seed      | Num  | Force RNG seed set to X                              |
 -1, --custom-charset1          | CS   | User-defined charset ?1                              | -1 ?l?d?u
 -2, --custom-charset2          | CS   | User-defined charset ?2                              | -2 ?l?d?s
 -3, --custom-charset3          | CS   | User-defined charset ?3                              |
 -4, --custom-charset4          | CS   | User-defined charset ?4                              |
 -i, --increment                |      | Enable mask increment mode                           |
     --increment-min            | Num  | Start mask incrementing at X                         | --increment-min=4
     --increment-max            | Num  | Stop mask incrementing at X                          | --increment-max=8
 -S, --slow-candidates          |      | Enable slower (but advanced) candidate generators    |
     --brain-server             |      | Enable brain server                                  |
 -z, --brain-client             |      | Enable brain client, activates -S                    |
     --brain-client-features    | Num  | Define brain client features, see below              | --brain-client-features=3
     --brain-host               | Str  | Brain server host (IP or domain)                     | --brain-host=127.0.0.1
     --brain-port               | Port | Brain server port                                    | --brain-port=13743
     --brain-password           | Str  | Brain server authentication password                 | --brain-password=bZfhCvGUSjRq
     --brain-session            | Hex  | Overrides automatically calculated brain session     | --brain-session=0x2ae611db
     --brain-session-whitelist  | Hex  | Allow given sessions only, separated with commas     | --brain-session-whitelist=0x2ae611db

- [ Brain Client Features ] -

  # | Features
 ===+========
  1 | Send hashed passwords
  2 | Send attack positions
  3 | Send hashed passwords and attack positions

- [ Outfile Formats ] -

  # | Format
 ===+========
  1 | hash[:salt]
  2 | plain
  3 | hash[:salt]:plain
  4 | hex_plain
  5 | hash[:salt]:hex_plain
  6 | plain:hex_plain
  7 | hash[:salt]:plain:hex_plain
  8 | crackpos
  9 | hash[:salt]:crack_pos
 10 | plain:crack_pos
 11 | hash[:salt]:plain:crack_pos
 12 | hex_plain:crack_pos
 13 | hash[:salt]:hex_plain:crack_pos
 14 | plain:hex_plain:crack_pos
 15 | hash[:salt]:plain:hex_plain:crack_pos

- [ Rule Debugging Modes ] -

  # | Format
 ===+========
  1 | Finding-Rule
  2 | Original-Word
  3 | Original-Word:Finding-Rule
  4 | Original-Word:Finding-Rule:Processed-Word

- [ Attack Modes ] -

  # | Mode
 ===+======
  0 | Straight
  1 | Combination
  3 | Brute-force
  6 | Hybrid Wordlist + Mask
  7 | Hybrid Mask + Wordlist

- [ Built-in Charsets ] -

  ? | Charset
 ===+=========
  l | abcdefghijklmnopqrstuvwxyz
  u | ABCDEFGHIJKLMNOPQRSTUVWXYZ
  d | 0123456789
  h | 0123456789abcdef
  H | 0123456789ABCDEF
  s |  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
  a | ?l?u?d?s
  b | 0x00 - 0xff

- [ OpenCL Device Types ] -

  # | Device Type
 ===+=============
  1 | CPU
  2 | GPU
  3 | FPGA, DSP, Co-Processor

- [ Workload Profiles ] -

  # | Performance | Runtime | Power Consumption | Desktop Impact
 ===+=============+=========+===================+=================
  1 | Low         |   2 ms  | Low               | Minimal
  2 | Default     |  12 ms  | Economic          | Noticeable
  3 | High        |  96 ms  | High              | Unresponsive
  4 | Nightmare   | 480 ms  | Insane            | Headless

- [ Basic Examples ] -

  Attack-          | Hash- |
  Mode             | Type  | Example command
 ==================+=======+==================================================================
  Wordlist         | $P$   | hashcat -a 0 -m 400 example400.hash example.dict
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule
  Brute-Force      | MD5   | hashcat -a 3 -m 0 example0.hash ?a?a?a?a?a?a
  Combinator       | MD5   | hashcat -a 1 -m 0 example0.hash example.dict example.dict

If you still have no idea what just happened, try the following pages:

* https://hashcat.net/wiki/#howtos_videos_papers_articles_etc_in_the_wild
* https://hashcat.net/faq/
kali@kali:~$ 

Thankz


Solution

  • Short answer:

    Download toggle5.rule from the Hashcat repo on Github and try running this:

    sudo hashcat -m 16800 -r toggle5.rule convertedpcap.16800 dict.txt
    

    Explanation of hashcat rules + a demo:

    That older togglecase example links to a newer article recommending rules be used, specifically the examples in rules/. For this example, let's use toggle5.rule, which the site explains "include[s] all possible toggle-case switches of the plaintext positions 1 to 15 of...5 characters at once".

    Let's try cracking the md5 of the string HaShCaT and put that in our example.hash file (it's 41e24266141b6ef98bf0e1fb54b238a1) and use a dictionary of just the string hashcat for example.dict file. Go ahead and create these two files in whatever folder you're working in, with whatever editor you prefer.

    If we just use a normal dictionary attack, like so:

    hashcat -a 0 -m 0 example.hash example.dict
    

    It fails to crack the hash. No surprises there. Now add the --stdout flag.

    hashcat --stdout -a 0 -m 0 -r toggle5.rule example.dict
    

    You will see the hash printed followed by all candidates that would be tried if we were trying to crack a hash, which in this case is just the string hashcat. Note, no need for example.hash in the command when using --stdout.


    Now let's try adding the toggle5.rule into the mix with

    hashcat --stdout -a 0 -m 0 -r toggle5.rule example.dict
    

    I've copied the rule directly from the Github repository. Thanks to --stdout this should print a lot of variations on hashcat. We can make it a bit more manageable by piping it into less or better yet...

    hashcat --stdout -a 0 -m 0 -r toggle5.rule example.dict | sort | uniq -c | sort -rn
    

    Basically this will display the number of times each variation of hashcat would be generated as a candidate. Now you can see how a rule generates new candidates for trying to crack hashes! And with that, the final run...

    hashcat -a 0 -m 0 -r toggle5.rule example.hash example.dict
    

    And success! It cracks the md5 hash HaShCaT.


    Now about your question...

    Speaking specifically to what you asked about, you might not need all the variations that toggle5.rule gives. If you know for certain that the password you're trying to crack is less that 15 characters or it won't have more than 4 uppercase characters, you can cut down on the variations.

    For example, if you only wanted to try candidates with alternating cases for every letter, your rule file would just be

    T0T2T4T6T8TATCTE
    T1T2T5T7T9TBTDTF
    

    Reusing hashcat as the example, this would generate the candidates HaShCaT and hAsHcAt. Just in case this is closer to what you're looking for. Feel free to describe your specific scenario in a comment and we can work together on what rules might make the most sense.