본문 바로가기
Hacking/bWAPP

Broken Authentication – Password Attack

by 알거음슴 2021. 6. 21.

Broken Authentication – Password Attack

CAPTCHA Bypassing 의 경우 로그인 수행 시 출력되는 메시지를 이용하여 Brute Force & Dictionary Attack 을 진행했다. 이번에도 인증수준이 낮은 페이지부터 높은 페이지까지 Burf suite Intuder을 활용하여 공격을 실습한다.

 

1. Broken Authentication – Password Attack(low)

Login Form으로 되어있으며 기본적으로 IDPassword가 제공되고 있다 bee/bug 로 로그인 성공시 “Successful login!” 이라는 문구가 출력됨을 확인할 수 있다.

잘못된 정보로 로그인 시 “Invalid credentials! Did you forgot your password?” 라는 오류문구가 출력됨을 알 수 있다. 이를 기반으로 burp suite를 통해 ID, Password Check을 진행한다.

 

Burp suite를 통해 패킷을 캡쳐 한 후 Send to Intruder을 통해 공격준비를 진행한다.

Intruder -> Positions 진입 -> Clear -> 적합한 위치에 payload를 삽입 Attack type의 경우 Cluster bomb를 선택한다.

payloads 탭으로 이동하여 simple list를 통하여 Brute Force 공격을 위한 목록을 지정해준다.

1번의 경우 ID, 2번의 경우 Password 를 지정한다.

Options 탭으로 이동하여 Grep – Match 의 내용을 Clear를 통해 모두 지워준 후 login 성공의 경우 출력되는 메시지(Successful login!)을 삽입, start attack을 통해 공격을 진행한다.

시간이 지나면 결과가 출력된다, 결과 확인시 성공문구가 출력된 경우만 체크되어있음을 확인할 수 있고 Server Response 확인 시 로그인성공 문구가 전송됨을 확인할 수 있다 즉 bee/bug 조합으로 로그인이 가능하다.

 

2. Broken Authentication – Password Attack / (medium)

Medium level의 경우 salt값이 들어간걸 확인할 수 있다, login시도할때마다 salt값이 변경됨으로 지속적으로 다른 값으로 공격을 시도하는 Brute ForceDictionary 공격은 불가능한걸 확인할 수 있다.

 

3. Broken Authentication – Password Attack / (high)

High level의 경우는 Captcha 기능이 추가되어있는걸 확인할 수 있다 로그인 패킷을 캡쳐해보자

captcha_user 의 인증을 받고있는걸로 확인되고 있다 salt값을 대체하고 있는걸로 확인되고있다 해당경우는 captcha의 값이 변경되지않고 고정되어있을 경우에는 Brute Force 또는 Dictionary 공격에 취약할 수 있다.

 

 

4. Broken Authentication – Password Attack / source code

switch($_COOKIE["security_level"])
{
    case "0" :
        header("Location: ba_pwd_attacks_1.php");
        break;
    case "1" :
        header("Location: ba_pwd_attacks_2.php");
        break;
    case "2" :
        header("Location: ba_pwd_attacks_4.php");
        break;
    default :
        header("Location: ba_pwd_attacks_1.php");
        break;
}

Level 별로 case가 나눠져있는걸 확인할 수 있다.

 

1) low level

if(isset($_POST["form"]))
{
    if($_POST["login"] == $login && $_POST["password"] == $password)
    {
        $message = "<font color=\"green\">Successful login!</font>";
    }
    else
    {
        $message = "<font color=\"red\">Invalid credentials! Did you forgot your password?</font>";
    }
}

Login password 값을 받아서 로그인하는걸 확인할 수 있다.

 

2) medium level

if(isset($_POST["form"]))
{
    if(isset($_SESSION["salt"]) && ($_POST["salt"] == $_SESSION["salt"]))
    {
        if($_POST["login"] == $login && $_POST["password"] == $password)
        {
            $message = "<font color=\"green\">Successful login!</font>";
        }
        else
        {
            $message = "<font color=\"red\">Invalid credentials! Did you forgot your password?</font>";
        }
    }
    else
    {
        $message = "<font color=\"red\">Incorrect salt!</font>";
    }
}
$salt = random_string();
$_SESSION["salt"] = $salt;

salt값이 랜덤으로 받아오는걸 확인할 수 있다, 로그인 시도할 때 마다 값이 달라짐으로 Brute Force Dictionary 공격이 불가능한걸 확인할 수 있다.

 

3) high level

if(isset($_POST["form"]))
{
    if(isset($_SESSION["captcha"]) && ($_POST["captcha_user"] == $_SESSION["captcha"]))
    {
        if($_POST["login"] == $login && $_POST["password"] == $password)
        {
            $message = "<font color=\"green\">Successful login!</font>";
        }
        else
        {
            $message = "<font color=\"red\">Invalid credentials! Did you forgot your password?</font>";
        }
    }
    else
    {
        $message = "<font color=\"red\">Incorrect CAPTCHA!</font>";
    }
}

High level의 경우 captcha 값을 검증하는걸 확인할 수 있다 captcha값의 경우 추가적인 조작이 있지않을 경우 값이 변경되지않도록 설정되어있기 떄문에 Brute Force Dictionary 공격이 가능한걸 확인할 수 있다.

. 위의경우는 세션이 고정되어있는 실습환경이기에 가능하고, 실제로 세션이 매번 변경되도록 설정되어있을시, 원활한 공격이 가능할지는 미지수이다.

'Hacking > bWAPP' 카테고리의 다른 글

XSS(Cross-Site-Scripting) Reflected_GET,POST  (0) 2021.06.21
Broken Authentication – Session & Cookie  (0) 2021.06.21
Broken Authentication – CAPTCHA  (0) 2021.06.14
SQL-Injection AJAX, Login, Blog   (0) 2021.06.14
SQL Injection - Login Form  (0) 2021.06.14