[adventofcyber2023] - Day_3_Brute-forcing Hydra is Coming to Town
Story: 중요한 시스템이 잠겨 있는 상태에 설상가상으로 IT실과 관련 인프라 문도 잠겨있는 상황! 백업 테이프를 사용해서 시스템을 복구하기 전 IT실 문을 열어보자
목표: 비밀번호 복잡성 및 가능한 조합 수 확인, 가능한 조합 수가 무차별 대입 공격의 타당성에 어떤 영향을 미치는지 이해하기, crunch를 사용해 비밀번호 조합 생성하기, hydra를 사용해 자동으로 비밀번호 시험해 보기
1. PIN 코드 계산
- 많은 시스템에서는 PIN 코드나 비밀번호를 사용해 사용자를 인증함
- 여기서 인증이란?, 사용자의 신원을 증명하는 것을 의미함
- 4자리의 PIN은 10^4로 10,000번을 시도하면 PIN 번호를 도출할 수 있음
2. 비밀번호가 정확히 4자리이고, 숫자/영어 대문자/영어 소문자로 구성되어 있다면?
- 64^4 = 14,776,335개의 다른 비밀번호 생성이 가능함
- 무차별대입공격에 걸리는 시간 = 1번 시도하는데 0.001초가 걸린다면 약 4.1시간이 걸리지만 실제 비밀번호는 목록의 시작 부분이나 끝 부분에 가까울 수 있으므로 평균적인 시간은 약 2시간 정도가 소요됨
3. crunch를 사용한 비밀번호 목록 생성
crunch 3 3 0123456789ABCDEF -o 3digits.txt
3: 첫 번째 숫자는 생성된 비밀번호의 최소 길이
3: 두 번째 숫자는 생성된 비밀번호의 최대 길이
0123456789ABCDEF: 비밀번호를 생성하는 데 사용할 문자 집함
-o 3digits.txt: 출력을 3digits.txt 파일에 저장함
4. hydra를 사용한 자동 대입
- 우리가 풀어야 할 비밀번호 폼 확인, 소스코드 확인
- POST로, http://10.10.165.114:8000/login.php로 pin이름과 함께 전송됨
- 즉, 메인 로그인 페이지( http://10.10.165.114:8000/login.php)로 사용자로부터 입력을 받아 /login.php로 pin 이름을 사용하여 보냄
- hydra를 사용해 자동으로 보내기
hydra -l ''' -P 3digits.txt -f -v 10.10.165.114 http-post-form "/login.php:pin=^PASS^:Access denied" -s 8000
-l '' : 보안잠금장치에는 비밀번호만 필요해 로그인 이름이 비어 있음을 나타냄
-P 3digits.txt : 사용할 비밀번호 파일을 지정함
-f : 작동하는 비밀번호를 찾은 후 hydra를 중지합니다.
-v : 자세한 출력을 제공하고 오류를 잡는 데 도움이 됨
10.10.165.114 : 대상의 IP 주소
http-post-form : 사용할 HTTP 메소드를 지정함
"login.php:pin=^PASS^:Access denied"
- "login.php : PIN 코드를 제출하는 페이지
- pin=^PASS^ : 비밀번호 목록의 값으로 대체
- Access denied : 잘못된 비밀번호는 "액세스 거부됨"이라는 텍스트가 포함된 페이지로 연결됨을 나타냄
-s 8000 : 대상의 포트번호를 나타냄
^PASS^는 Hydra에서 사용되는 특수한 토큰으로, 실제 패스워드로 대체됩니다. 이 토큰은 Hydra가 패스워드 목록에서 각각의 패스워드를 시도할 때 해당 위치에 실제 패스워드 값을 삽입하는 데 사용됩니다.
http-post-form "/login.php:pin=^PASS^:Access denied"
//여기서 pin=^PASS^ 부분은 웹 폼의 POST 요청에서 사용자의 패스워드를 나타냅니다.
//Hydra는 이 부분에 각 패스워드를 하나씩 대입하여 공격을 시도할 것입니다.
//따라서 이 부분이 패스워드로 대체되면서 각 시도에 대해 다양한 패스워드가 폼에 제출됩니다.
//예를 들어, 만약 ^PASS^가 "123"이라면 실제로는 다음과 같은 요청이 만들어질 것입니다:
http-post-form "/login.php:pin=123:Access denied"