선릉역 1번 출구

[DVWA] Burp Suite를 사용한 Brute Force 본문

Hacking & Security/Hacking

[DVWA] Burp Suite를 사용한 Brute Force

choideu 2022. 11. 30. 17:48

소스 코드 분석

1. Low

<?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 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "avatar" );

        // Login Successful
        echo "<p>Welcome to the password protected area " . $user . "</p>";
        echo '<img src="' . $avatar . '" />';
    } else {
        //Login failed
        echo "<pre><br>Username and/or password incorrect.</pre>";
    }

    mysql_close();
}

?>

아이디와 비밀번호를 단순 검증하는 로직으로 아이디와 비밀번호를 입력받고, 비밀번호는 MD5로 해시하여 저장함

-> 입력 값에 대한 검증이 존재하지 않는 단순한 검증 로직임

 

2. Medium

<?php

if( isset( $_GET[ 'Login' ] ) ) {

    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = mysql_real_escape_string( $user );

    // Sanitise password input
    $pass = $_GET[ 'password' ];
    $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 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "avatar" );

        // Login Successful
        echo "<p>Welcome to the password protected area " . $user . "</p>";
        echo '<img src="' . $avatar . '" />';
    } else {
        //Login failed
        echo "<pre><br>Username and/or password incorrect.</pre>";
    }

    mysql_close();
}

?>

mysql_real_escape_string 함수를 이용해 *이스케이프 문자를 제거하여 sql injection을 방지함

 

*이스케이프 문자: \가 붙은, 특수한 기능을 하는 문자 리터럴로 문자열안에서 특별한 의미로 해석되는 문자임

 

3. High

<?php

if( isset( $_GET[ 'Login' ] ) ) {

    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = stripslashes( $user );
    $user = mysql_real_escape_string( $user );

    // Sanitise password input
    $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 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "avatar" );

        // Login Successful
        echo "<p>Welcome to the password protected area " . $user . "</p>";
        echo '<img src="' . $avatar . '" />';
    } else {
        // Login failed
        sleep(3);
        echo "<pre><br>Username and/or password incorrect.</pre>";
        }

    mysql_close();
}

?>

High의 경우 stripslashes, mysql_real_escape_string 함수를 이용해 역 슬래시와 이스케이프 문자를 제거하여 sql injection을 대응함 

로그인 실패 시 sleep()을 사용해서 3초 지연시켜 무차별 대입 공격을 방어함


*버프 스위트를 활용한 무차별 대입 공격은 오프라인 기반의 크랙 도구보다 시간이 더 걸림

Brute Force 창에서 로그인을 하면 Burp Suite에 잡힘

 

해당 요청을 Intruder로 보냄

 

Target은 자동으로 들어감

Request에서 username, password 매개변수의 값에 해당하는 부분을 드래그 후 Add 버튼을 눌러 페이로드 포지션을 잡아줌

 

페이로드가 2개이기 때문에 Default 값인 sniper에서 Cluster bomb으로 바꿔줌

 

Payloads 탭으로 이동

Payload set의 번호 1은 앞에서 페이로드 순서를 의미함(username)

Payload type은 Simple list로 두고 아래 Payload Options에서 username에 대입할 값을 작성하고 Add 버튼을 누름

 

*이런 공격을 사전대입공격이라고 부르는데 미리 만들어진 사전 목록을 Load로 불러오는 것도 가능함

 

password 매개변수도 값을 설정함

 

로그인 성공 시 나타나는 문구

Grep - Match 서버 응답에 해당 표현이 존재하면 그 항목을 체크하는 역할

 

로그인 성공 시 나오는 문구를 작성해줌

 

start attack을 눌러 공격을 시작

 

Payload1(=username): admin, Payload2(=password): passowrd일 때 Grep - Match에서 설정한 문구가 존재하였음

-> 무차별 대입 공격 성공

'Hacking & Security > Hacking' 카테고리의 다른 글

Cobalt Strike란?  (0) 2022.12.22
[DVWA] CSRF  (0) 2022.11.30
XSS and CSRF  (0) 2022.11.19
Command Injection  (0) 2022.10.26
취약한 인증  (0) 2022.10.26
Comments