hashcat 간단 정리

2019. 2. 21. 13:26


가끔 인젝션으로 해쉬값을 빼낸 후 크랙을 해야 할 경우가 있다. 

(거의 대부분 데이터베이스에 비밀번호는 해쉬값 또는 암호화 해서 넣어놓기 때문에 사실 거의 필수적으로)


john-the-ripper 를 가장 많이 쓰고 또 유명하지만 간혹 점검 환경에 의해 사용하지 못할수도 있기에 hashcat 도 간략히 정리해둔다.






hashcat 기본



hyunmini@~$ hashcat  -h


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                          |

                        ...





옵션이 어마어마하게 많기 때문에 가장 중요한 몇가지만 정리해둔다.






-m :   크랙하려는 해시가 어떤 것인지 지정


      # | Name                                             | Category  ======+==================================================+================================

    900 | MD4                                              | Raw Hash

      0 | MD5                                              | Raw Hash

   5100 | Half MD5                                         | Raw Hash

    100 | SHA1                                             | Raw Hash

   1300 | SHA-224                                          | Raw Hash

   1400 | SHA-256                                          | Raw Hash

                         ...






-a : attack mode, brute/dictionay/hybrid 등


- [ Attack Modes ] -


  # | Mode

 ===+======

  0 | Straight

  1 | Combination

  3 | Brute-force

  6 | Hybrid Wordlist + Mask

  7 | Hybrid Mask + Wordlist


3 은 무작위 대입, 6은 워드리스트 + 마스크 요 2개 정도가 많이 사용될 듯 하다.


mask 는 문자열 타입을 지정해주는 기능인데, 아래와 같이 미리 지정된 문자열 셋이 있고, 직접 지정해줄 수도 있다.






Charset (mask 지정시 사용)


- [ Built-in Charsets ] -


  ? | Charset

 ===+=========

  l | abcdefghijklmnopqrstuvwxyz

  u | ABCDEFGHIJKLMNOPQRSTUVWXYZ

  d | 0123456789

  h | 0123456789abcdef

  H | 0123456789ABCDEF

  s |  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

  a | ?l?u?d?s

  b | 0x00 - 0xff



?l?l?l                 //  소문자로만 이루어진 3개의 글자 - ex: abc, adm, tes,...

?l?l?l?d             //  소문자 3글자, 숫자1글자 - ex: abc0, kkk5,...

?l?l?l?l?l?l?l?s   // 소문자7글자, 특수문자1글자 - ex: testabc!,...

     ...






-D : 크랙 연산에 사용할 processing unit 지정(CPU, GPU)



  # | Device Type

 ===+=============

  1 | CPU

  2 | GPU

  3 | FPGA, DSP, Co-Processor


GPU 있다면 2, CPU 면 1 로 지정. 가끔 디바이스가 없다며 에러가 날 때가 있는데, --force 옵션을 추가로 적어주면 그냥 CPU로 지정되는듯 하다.





이외 유용한 옵션들


--pw-min 6 --pw-max 9    //  크랙 시도 문자 길이 지정


경험상 10자리 이상은 일반 PC에서는 크랙이 어려움. 다만 dictionary + brute 라면 어느정도 크랙 가능, 또는 GPU로 돌리면 10자리 정도도 어느정도 크랙 가능



-i --increment-min=4 --increment-min=8    //  mask 길이값을 변경해가면서 시도함







사용 예시 


# hashcat -a 3 -m 0 example0.hash ?a?a?a?a?a?a    // bruteforce 6 length


# hashcat -m 0 -a 1 hash.lst dict.txt   // combine(dictionary + straight ?)


# hashcat -m 1400 -a 6 hash.lst dict.txt ?l?l?l?l?l?l?a?a     // hybrid ( dict + brute mask )




이상. 또 필요한 부분이 있으면 정리..


+ Recent posts