| # | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Brute-force |
| 6 | 하이브리드 워드리스트 + 마스크 |
| 7 | 하이브리드 마스크 + 워드리스트 |
이 공격 패턴은 "사전 공격"이라고도 불립니다. 할 말이 없습니다. 사전이 주어지면 hashcat이 사전의 내용을 줄씩 읽고 각 행의 hash 값을 계산하여 대상 hash 값과 비교합니다.
예:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu는 Combination이 명사라고 말했습니다. 의미는 "결합; 연합; 암호 조합; 점프복"입니다. 이 공격 패턴은 사실 매우 간단합니다. 두 개의 암호 사전의 내용을 결합하는 것입니다. 이 공격 패턴을 사용하려면 두 개의 비밀번호 사전을 지정해야 한다. 두 개의 암호 사전 dict1.txt와 dict2.txt가 있다고 가정해 보겠습니다. 그 내용은 다음과 같습니다.
사냥 고양이 키티 무지개
와
파리 rock
그런 다음 명령어는 다음과 같습니다.
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
실제로 시도한 사전은 다음과 같습니다.
huntingparis 헌팅록 키티파리 키티록 레인보우파리 rainbowrock
dict1.txt의 단어는 왼쪽에 있고, dict2.txt의 단어는 오른쪽에 있으며, 총 3×2=6개입니다.
이 패턴과 관련된 매개변수는 다음과 같습니다.
-j, --rule-left -k, --rule-right
-j 이후의 규칙은 왼쪽에 작용하고, -k 이후의 규칙은 오른쪽에 작용합니다. 매개변수 -j '$-'를 추가하면 실제로 시도된 사전은
hunting-paris입니다. 사냥 바위 키티 파리 키티 록 rain-bowparis에 대한 리뷰 rain-bowrock
매개변수 추가 -j '^!', 실제로 시도된 사전은
입니다! 사냥파리 ! 헌팅 록 ! 키티파리 ! 키티 록 ! 레인보우파리 ! rainbowrock
매개변수 -k '^>'를 추가하면 실제로 시도된 사전은 다음과 같습니다.
hunting>paris 바위 사냥 키티 파리 키티 바위 보우파리스 rain>bowrock
이 규칙은 무엇입니까? '$', '^'는 정규 표현식과 비슷하게 사용되고 있으니 정규인가요? 사실 그렇지 않습니다. hashcat의 규칙은 스스로 구현됩니다. 이것은 또 다른 큰 내용입니다. 자세한 내용은 Rule-based Attack
를 참조하세요. 주어진 문자 세트의 다양한 조합을 시도합니다. hashcat 공식 위키에 따르면 이 방법은 구식이며 Mask-Attack으로 전반적으로 대체되었으므로
은 비교적 새로운 공격 방법입니다. 예는 다음과 같습니다.
hashcat -a 3 -m 0 md5.hash ? 엘? 엘? 엘? 엘? l
"Attack Modes" 테이블에 따르면 -A 3은 Brute-force에 해당하지만 실제로 -A 3은 Mask Attack을 사용합니다. 마스크 공격은 고급 Brute-force로 볼 수 있습니다.
-m 매개변수는 해시 함수 유형을 지정하는 데 사용됩니다. md5 값은 md5 해시 파일에 저장됩니다. 핵심은 마지막 문자열 "?l?l?l?l?l?l?l"입니다. 이러한 문자열을 mask라고 합니다.
마스크는 여러 자리 표시자로 구성된 문자열입니다. "?l"은 자리 표시자이며, 여기서 "?"는 다음 "l"을 수정하는 데 사용되는 키워드입니다. "?l"은 "?l" 외에도 문자 집합을 나타낼 수 있습니다. "?u", "?d", "?h", "?h", "?s", "?a" 및 "?b"를 나타내는 문자 집합은 아래 표에 나와 있습니다.
| ? | Charset |
|---|---|
| l | abcdefghijklmnopqrstuvwxyz |
| u | abcdefghijklmnopqrstuvwxyz |
| d | 0123456789 |
| H | 0123456789abcdef |
| H | 0123456789abcdef |
| s | ! "#$%&'()*+,-./:;<=>?@[\]^_`~{|} |
| a | ? 엘? 너? 디? s |
| b | 0 – 0xff |
이렇게 하면 "?l"은 실제로 암호 사전과 동일합니다.
aaaaa 아아아아 ... zzzzz
마찬가지로 "?l?u?d"는 암호 사전과 동일합니다.
aA0 이메일 : aA1 ... bA0 ... zZ9
위 테이블의 문자 집합은 해시캣에 내장되어 있으며, 문자 집합을 스스로 지정할 수도 있습니다.
--custom-charset1=character set 1 --custom-charset2=문자 집합 2 --custom-charset3=문자 집합3 --custom-charset4=문자 집합 4
매개 변수 –custom-charsetN은 -N으로 줄일 수 있으며, 예를 들어 –custom-charset1은 -1로 줄일 수 있습니다. -N으로 지정된 문자 집합은
-1 abc123 ?와 같은 자리 표시자 "?N" 형태로 마스크에 지정됩니다. 1? 1? 1
는 암호 사전과 동일합니다.
aaa 아아브 ... aa3 이미지 ... 333
-N은 문자 집합을 나타내는 문자열 외에도 문자 집합을 저장하는 .hcchr로 끝나는 파일일 수도 있습니다. hashcat에는 설치 패키지의 charsets/디렉토리에 있는 .hcchr 파일이 많이 제공됩니다.
자리 표시자 "??"가 나타내는 문자 집합은 "?" 자체입니다. 이 외에도 나머지 문자를 자리 표시자로 사용하면 문자 자체를 나타냅니다. 예를 들어 "?lwerner?d"는 암호 사전과 동일합니다.
awerner0 아워너 1 ... zwerner9
위의 지식이 있으면 mask를 쉽게 이해할 수 있습니다. 마스크는 여러 자리 표시자로 구성됩니다. 각 자리 표시자는 문자 집합이고 마스크는 자리 표시자 문자 집합의 조합입니다. 자리 표시자의 수는 암호의 길이와 같습니다. 이런 디자인은 단순히 문자 집합과 비밀번호 길이를 주는 것보다 어떤 이점이 있을까요?
누군가의 비밀번호에 총 7자리가 있다는 것을 알고 있다고 가정합니다. 첫 번째 자리는 대문자, 다음 세 자리는 소문자, 마지막 세 자리는 숫자입니다. 전통적인 폭력 크래킹의 경우 문자 세트 A-Z, A-Z, 0-9, 총 62자가 필요합니다. 최대 62^7=3 521 614 606208번 시도해야 하며 이는 조 수준입니다. 이 비밀번호를 설명하기 위해 마스크를 사용하면 계산하기 쉬운 "\u\l\l\l\d\d\d"입니다. 총 (26^4)×(10^3)=456 976,000개의 가능성이 있습니다. , 이는 이전 방법에 비해 4배 줄어든 수준입니다.
한 걸음 물러서서, 비밀번호의 분포를 모르더라도 마스크를 사용하면 기존의 폭력적인 해독의 효과를 쉽게 시뮬레이션할 수 있다.
이제 문제는 마스크가 고정되어 있고, 그 안에 얼마나 많은 자리 표시자가 죽어 있는지, 비밀번호의 길이를 모른다면 어떻게 해야 하는지입니다. 비밀번호가 너무 길어도 된다. 만약 다른 사람의 비밀번호가 3자리밖에 없고, 우리의 자리표시자가 4개가 있어서 아무리 해결할 수 없다면, 어찌 큰 손해가 아닌가. 1부터 시작해서 각 길이의 마스크를 한 번 써야 할까요? 그것은 얼마나 귀찮은가.
에는 두 가지 해결 방법이 있습니다. 하나는 mask 파일을 사용하여 하나의 파일에 여러 개의 mask를 쓴 다음 명령줄에 이 파일을 지정하는 것입니다. 마스크 파일은 .hcmask로 끝나야 합니다.
예를 들어 test.hcmask의 내용은 다음과 같습니다.
? 엘 ? 엘? 엘 ? 엘? 엘? 엘 ? 엘? 엘? 엘? l
는 다음 명령을 사용하여 파일을 사용합니다.
hashcat -m 0 -a 3 --show md5.hash test.hcmask
또 다른 해결 방법은 매개변수 –increment를 추가하는 것입니다. 이 매개변수는 hashcat에게 우리가 주는 마스크에 따라 한 자리 표시자부터 시작하도록 알려줍니다. 그리고 우리가 주어진 길이가 될 때까지 두 개, 세 개를 시도합니다. 예를 들어 이 자리 표시자 "abc"를 작성한 다음 다음 문자열의 md5 값을 계산합니다.
a:0cc175b9c0f1b6a831c399e269772661 b:92eb5ffee6ae2fec3ad71c777531578f c:4a8a08f09d37b73795649038408b5f33 ab:187ef4436122d1cc2f40dc2b92f0eba0 ac:e2075474294983e013ee4dd2201c7a73 ba:07159c47ee1b19ae4fb9c40d480856c4 bc: 5360af35bde9ebd8f01f492dc059593c ca:5435c69ed3bcc5b2e4d580e393e373d3 cb:d0d7fdb6977b26929fb68c6083c0b439 abc:900150983cd24fb0d6963f7d28e17f72 abc:900150983cd24fb0d6963f7d28e17f72 bac:79ec16df80b57696a03bb364410061f3 bca:b64eab8ce39e013604e243089c687e4f cba:3944b025c9ca7eec3154b44666ae04a0 cab:16ecfd64586ec6c1ab212762c2c38a90
":" 앞에는 해시 값을 계산할 원본 문자열이 있고, ":" 뒤에는 계산된 hasn 값이 있습니다. 위의 내용을 md5.hash 파일에 저장한 다음 다음 명령을 실행합니다.
hashcat -m 0 -a 3 --show --username md5.hash abc
매개변수 –username을 추가하는 이유는 각 해시 값 앞에 원래 문자열이 있기 때문입니다. 이 매개변수를 추가하지 않으면 hashcat은 올바른 해시 값을 찾을 수 없음을 표시합니다. 이 매개변수를 추가하면 hashcat은 해시 값 앞의 문자열이 해시 값 쌍의 사용자 이름이라고 생각하여 해시 값을 원활하게 로드할 수 있습니다.
실행 결과 단 하나의 해시만 해결되었습니다.
900150983cd24fb0d6963f7d28e17f72:abc
이제 매개 변수 –increment를 추가하고 다시 실행합니다.
hashcat -m 0 -a 3 --show --increment --username md5.hash abc
이번에는 두 개의 해시가 더 풀렸습니다.
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
볼 수 있듯이 –increment가 작동합니다. 그러나 동시에 우리는 이 매개변수가 있으면 hashcat은 A, ab, abc를 순서대로만 시도할 뿐 자리 표시자를 순서대로 배열하고 조합하여 다양한 가능성을 시도하지 않는다는 것을 알고 있다.
하이브리드 공격은 두 개의 사전을 결합하는 Combinator 공격과 비슷한 반면, 하이브리드 공격은 사전과 마스크를 교배하는 것입니다.
이미 다음과 같은 사전 example.dict를 가지고 있다고 가정합니다.
안녕하세요 werner
명령:
hashcat -m 0 -a 6 md5.hash example.dict ? 디? d
는 단순히 사전을 사용하는 것과 동일합니다.
hello00 안녕하세요01 ... 안녕하세요99 워너00 베르너 01 ... werener99
명령:
hashcat -m 0 -a 7 md5.hash ? 디? dexample.dict
는 단순히 사전을 사용하는 것과 동일합니다.
00안녕하세요
01안녕
...
99안녕
00워너
01베르너
...
이 게시물을 즐겨찾기로 설정