비박스를 활용한 웹 모의해킹 완벽 실습 - 인증 결함

출처

인프런, 비박스를 활용한 웹 모의해킹 완벽 실습 12강 https://www.inflearn.com/course/%EB%B9%84%EB%B0%95%EC%8A%A4-%EB%AA%A8%EC%9D%98%ED%95%B4%ED%82%B9-%EC%8B%A4%EC%8A%B5/


인증 결함

  • 인증에 필요한 사용자의 계정 정보를 노출하는 취약점
  • HTML 코드, GET 요청, URL 변수 노출
  • 취약한 암호 설정
  • 취약한 인증 과정

image


Broken Auth - Insecure Login Forms(Low)

image

  • 소스코드를 보면 다음과 같음
<div id="main">

    <h1>Broken Auth. - Insecure Login Forms</h1>

    <p>Enter your credentials.</p>

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

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

        <p><label for="password">Password:</label><font color="white">I am Iron Man</font><br />
        <input type="password" id="password" name="password" size="20" /></p>

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

    </form>

    </br >    
        
</div>
  • id: tonystark, password: I am Iron Man이 써져있고 흰색 글자로 설정
  • 황당한 경우로 이럴 경우는 거의 없다고 보면 될듯

image


Broken Auth - Insecure Login Forms(Medium)

image

  • id는 적혀있지만 패스워드는 적혀있지 않음
  • 소스코드를 보면 다음과 같음
<div id="main">    

    <h1>Broken Auth. - Insecure Login Forms</h1>

    <p>Enter the correct passphrase to unlock the secret.</p>

    <form>   

        <p><label for="name">Name:</label><font color="white">brucebanner</font><br />
        <input type="text" id="name" name="name" size="20" value="brucebanner" /></p> 

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

        <input type="button" name="button" value="Unlock" onclick="unlock_secret()" /><br />

    </form>

    </br >    
        
</div>
  • 로그인을 하면 unlock_secret() 함수로 이동함을 알 수 있고 살펴보면 다음과 같음
<script language="javascript">   

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);

    if(document.forms[0].passphrase.value == secret)
    { 
              
        // Unlocked
        location.href="/bWAPP/ba_insecure_login_2.php?secret=" + secret;

    }
    
    else
    {
        
        // Locked
        location.href="/bWAPP/ba_insecure_login_2.php?secret=";
                
    }

}	

</script>
  • 암호문을 만들고 이를 일치하는지 안 하는지 확인하는 작업
  • Unlocked이면 "/bWAPP/ba_insecure_login_2.php?secret=" Locked이면 "/bWAPP/ba_insecure_login_2.php?secret="로 이동
  • 크롬 개발자 도구에서 자바스크립트 콘솔을 이용

image


Broken Auth - Weak Passwords(Low)

image

Burp Suite로 Intruder 실행

image

  • id: bee, password: bug 입력하였음

image

  • Sniper: 한 개만 집중 공격
  • clear를 누르고 bug를 드래그 한 후 Add 버튼 클릭
  • Payload 탭을 누르고 Brute forcer 타입 선택

image

  • Options에서 스레드 개수 설정도 할 수 있는데 무료여서 못함
  • Start attack을 누르면 진행을 하는데 오래 걸리니 한셈 치고 넘어감

image

  • Brute Force 말고 사전 공격을 할 수 있는데 이를 위해 사전 파일이 필요함
  • 사전파일
  • 칼리리눅스에서 wget https://raw.githubusercontent.com/fuzzdb-project/fuzzdb/master/wordlists-user-passwd/passwds/phpbb.txt 실행

image

image

  • 이것도 오래걸리니 한셈 침

Broken Auth - Passwords Attack(High)

image

  • 캡차가 걸려있는데 이를 확인해보면 다음과 같음
include("security.php");

include("security_level_check.php");

include("functions_external.php");



$captcha = random_string();

$_SESSION["captcha"] = $captcha;



// Creates the canvas

// Creates a new image

// image = imagecreate(233, 49);



// Creates the canvas

// Creates an image from a existing image

$image = imagecreatefrompng("images/captcha.png");



// Sets up some colors for use on the canvas

$white = imagecolorallocate($image, 255, 255, 255);

$black = imagecolorallocate($image, 0, 0, 0);

$orange = imagecolorallocate($image, 222, 77, 14);



// Loads a font (GDF)

// $font = imageloadfont("fonts/atommicclock.gdf");



// Loads a font (TTF)

$font = "fonts/arial.ttf";



// Writes the string (GDF)

// imagestring($image, $font, 0, 0, $captcha, $orange);

// imagestring($image, $font, 40, 10, $captcha, $black);



// Writes the string (TTF)

// imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);

imagettftext($image, 20, 0, 75, 38, $orange, $font, $captcha);

        

// Output the image to the browser

header ("Content-type: image/png");

imagepng($image);



// Cleans up after yourself

imagedestroy($image)



?>
  • $captcha = random_string();로 랜덤하여 한 번에 맞추기 힘듦

Broken Auth - Weak Passwords(High)

  • Low와 다르게 비밀번호를 길게 하고 대소문자에 특수문자 숫자를 넣게 하여 뚫기 힘듦
  • 이와같이 패스워드가 약한지 아닌지 확인하는 사이트가 있음 How Secure is My Password?

Comments