웹해킹/bee-box

Broken Auth - Insecure Login Form

3년안에 내집 마련 2019. 10. 21. 19:24
반응형

Broken Auth(취약한 인증)

인증 및 세션 관리와 관련된 어플리케이션 기능이 잘못 구현되어 공격자에게 취약한 암호, 키 또는 세션 토큰을 제공하여, 다른 사용자의 권한을 얻도록 착취하는 행위

 

Broken Auth는 2017년 OWASP TOP10에서 2번째를 차지할 만큼 위험한 공격이다.

취약한 인증 공격은 다양한 방식이 있는데 브루트 포스 공격, 딕셔너리 공격으로도 공격이 가능한만큼 누구든지 가능한 공격이다.

또한 위의 공격 외에도 비밀번호 찾기 기능을 통해 사용자의 계정정보를 알아낼 수 도 있다.

 

안전한지 않은 로그인 방식 - (하)

Broken Auth - Insecufe Login Form 페이지를 클릭하면 

다음과 같이 나오게 된다.

F12(개발자 도구)를 누르게 되면 

다음과 같이 나오는데 여기서

동그라미 친 부분을 누른 후 로그인 창에 갖다 대면

다음과 같은 코드가 나오게 된다. 

여기 보면 <font color="white"> 이부분이 있는데 현재 아이디는 'tonystark' 인데 지금 흰색으로 되어 있어 보이지 않을 뿐이다.

여기서 바로 아이디라는 것을 tonystark라는 것을 알 수 있지만 color를 다른 색으로 바꿔주면

다음과 같이 숨어있던 아이디가 보이게 된다.

비밀번호도 위에 방식과 동일한 방식으로 하게 되면

아이디는 'tonystark'  비밀번호는 'I am Iron Man'이라는 것을 알 수 있다.

다음과 같이 알아낸 ID와 비밀번호를 입력하면

성공적으로 로그인 했다는 메시지가 뜬다.

 

난이도 - (중)

난이도를 (중)으로 바꾼 후 페이지를 들어가 보면 다음과 같은 창이 뜬다.

개발자 도구(F12)를 누르고 Element에서 Passphrase가 있는 코드를 누러보면

다음과 같이 나오는데 Unlock을 누르면 unlock_secret() 함수로 데이터가 전송 된다.

unlock_secret() 함수가 무엇인지 확인하려면 Network에서 ba_insecure~~를 누르면 된다.

 

다음과 같이 코드가 있다.

Unlock_secret() 함수를 보면

function unlock_secret()
{

    var bWAPP = "bash update killed my shells!"

    var a = bWAPP.charAt(0);  var d = bWAPP.charAt(3);  var r = bWAPP.charAt(16);
    var b = bWAPP.charAt(1);  var e = bWAPP.charAt(4);  var j = bWAPP.charAt(9);
    var c = bWAPP.charAt(2);  var f = bWAPP.charAt(5);  var g = bWAPP.charAt(4);
    var j = bWAPP.charAt(9);  var h = bWAPP.charAt(6);  var l = bWAPP.charAt(11);
    var g = bWAPP.charAt(4);  var i = bWAPP.charAt(7);  var x = bWAPP.charAt(4);
    var l = bWAPP.charAt(11); var p = bWAPP.charAt(23); var m = bWAPP.charAt(4);
    var s = bWAPP.charAt(17); var k = bWAPP.charAt(10); var d = bWAPP.charAt(23);
    var t = bWAPP.charAt(2);  var n = bWAPP.charAt(12); var e = bWAPP.charAt(4);
    var a = bWAPP.charAt(1);  var o = bWAPP.charAt(13); var f = bWAPP.charAt(5);
    var b = bWAPP.charAt(1);  var q = bWAPP.charAt(15); var h = bWAPP.charAt(9);
    var c = bWAPP.charAt(2);  var h = bWAPP.charAt(2);  var i = bWAPP.charAt(7);
    var j = bWAPP.charAt(5);  var i = bWAPP.charAt(7);  var y = bWAPP.charAt(22);
    var g = bWAPP.charAt(1);  var p = bWAPP.charAt(4);  var p = bWAPP.charAt(28);
    var l = bWAPP.charAt(11); var k = bWAPP.charAt(14);
    var q = bWAPP.charAt(12); var n = bWAPP.charAt(12);
    var m = bWAPP.charAt(4);  var o = bWAPP.charAt(19);

    var secret = (d + "" + j + "" + k + "" + q + "" + x + "" + t + "" +o + "" + g + "" + h + "" + d + "" + p);

다음과 같은 코드가 있고 unlock_secret() 함수는 charAt()를 호출하고 있다.

charAt() 함수는 인자를 준 값에 대해 문자를 리턴을 하는 함수이다. charAt() 함수 한개당 하나씩 리턴을 하기 때문에

secret 값은 11자인 것을 알 수 있다.

다음 함수를 해석하면 charAt()으로 리턴받는 숫자가 bWAPP 변수의 위치이다.

이제 secret 함수를 해석하면 'hulk smash!'라는 것을 알 수 있다.

'hulk smash!'를 Passphrase에 집어 넣으면

다음과 같이 풀린 것을 알 수 있다.

난이도 - (상)

난이도(상)을 클릭하게 되면

다음과 같이 로그인 창이 나온다

힌트 같은거에서 a bee is a bug라는 문장이 있다.

혹시나 해서 login 값에 bee password에 bug를 집어 넣어보았다.

로그인에 성공했다고 나온다.

개발자도구(F12)를 눌러 코드를 확인해 보았다.

로그인 과정이 담긴 코드를 확인해보면

<form action="/bWAPP/ba_insecure_login_3.php" method="POST">

        <p><label for="login">Login:</label><br />
        <input type="text" id="login" name="login" size="20" /></p> 

        <p><label for="password">Password:</label><br />
        <input type="password" id="password" name="password" size="20" /></p>

        <button type="submit" name="form" value="submit">Login</button>  

    </form>

패스워드를 입력하면 /bWAPP/ba_insecure_login_3.php로 넘어가는 것을 알 수 있다.

이제 ba_insecure_login_3.php를 들어가서 확인해보려 했으나 bee-box에는 해당 페이지 코드를 찾을 수가 없었다.

 

 

반응형