정보보안(구버전)/ bWAPP 2019. 2. 15. 15:58

웹 해킹 bWAPP - 61. A4 - Insecre Direct Object References - Insecure DOR(Reset Secret)

 

 

본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다. 

 

 

1. Insecre Direct Object References

 

 - OWASP Top10 A4 - 안전하지 않은 직접 객체 참조

 - 객체를 참조하기 위해서 정상적인 인증 절차가 없는 취약점을 이용하는 공격이다.
 - 클라이언트로부터 수신하는 정보에 대해서 검증 단계(ID 조회) 없이 정보를 서버로 전달하기 때문에 문제가 발생한다.
 - Ex) 개인정보 변경, 패스워드 변경, 구매 가격 및 수량 변경

 

 

 

2. Insecre Direct Object References - Insecure DOR(Reset Secret)

 

 - 이 시나리오는 검증 단계(ID 조회) 없이 패스워드 힌트 정보를 변경할 경우 발생하는 취약점을 이용한 공격 내용이다. 

 - 그렇기 때문에 접속된 계정을 이용하여 다른 계정의 패스워드 힌트 정보를 변경할 수 있다.

 

 

  

Ex1) Insecre Direct Object References - Insecure DOR(Reset Secret) 이해

 

 

보안 레벨 선택 및 시나리오 선택

 

 

 

'Any bugs?' 버튼 클릭

 

 

 

SQL Injection(Login Form/User) 시나리오 선택

 

 

 

'bee/bug' 로그인 실시 -> 패스워드 힌트 변경 확인

 

 

 

Insecure DOR(Reset Secret) 시나리오 선택

 

 

 

Intercept -> 'Intercept is on' 으로 변경 실시

 

 

 

버프슈트 Intercept 내용 확인

 

 

 

  계정 정보 'A.I.M'으로 변경 실시

POST /bWAPP/xxe-2.php HTTP/1.1

Host: 192.168.20.205

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

Accept: */*

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Referer: http://192.168.20.205/bWAPP/insecure_direct_object_ref_3.php

Content-Type: text/xml; charset=UTF-8

Content-Length: 59

Cookie: security_level=0; PHPSESSID=5fe9142fa58cd5475ce627f9bea9c2b6

Connection: close

 

<reset><login>bee</login><secret>Any bugs?</secret></reset>

                     A.I.M.  <- 변경 내용

 

 

 

'Forward' 버튼 클릭

 

 

 

'Intercept is on'를 클릭하여 off 실시

 

 

 

'Intercept is off' 확인

 

 

 

SQL Injection(Login Form/User) 시나리오 선택

 

 

 

SQL 인젝션 실시 -> 'A.I.M.' 계정 및 패스워드 힌트 확인

 

 

 

Ex2) 'insecure_direct_object_ref_3.php'

 

bee@bee-box:/var/www/bWAPP$ ls -l insecure_direct_object_ref_3.php
-rw-rw-r-- 1 root www-data 5285 2014-11-02 23:52 insecure_direct_object_ref_3.php

bee@bee-box:/var/www/bWAPP$ vi insecure_direct_object_ref_3.php

~ 중간 생략 ~

 

 

 

    <h1>Insecure DOR (Reset Secret)</h1>

 

    <p>Reset your secret to <input type="button" OnClick="ResetSecret();" value="Any bugs?"></p>

 

    <script type="text/javascript">

 

        function ResetSecret()
        {
            var xmlHttp;
            // Code for IE7+, Firefox, Chrome, Opera, Safari
            if(window.XMLHttpRequest)
            {
                xmlHttp = new XMLHttpRequest();
            }
            // Code for IE6, IE5
            else
            {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlHttp.open("POST","xxe-2.php",true);
            xmlHttp.setRequestHeader("Content-type","text/xml; charset=UTF-8");
            xmlHttp.send("<reset><login><?php if(isset($_SESSION["login"])){echo $_SESSION["login"];}?></login><secret>Any bugs?</secret></reset>");
        }

 

    </script>

 

</div>

 

:q! 

 

 

bee@bee-box:/var/www/bWAPP$ vi xxe-2.php

~ 중간 생략 ~

 

// If the security level is not MEDIUM or HIGH
if($_COOKIE["security_level"] != "1" && $_COOKIE["security_level"] != "2")
{

 

    ini_set("display_errors",1);

 

    $xml = simplexml_load_string($body);

 

    // Debugging
    // print_r($xml);

 

    $login = $xml->login;
    $secret = $xml->secret;

 

    if($login && $login != "" && $secret)
    {

 

        // $login = mysqli_real_escape_string($link, $login);
        // $secret = mysqli_real_escape_string($link, $secret);

 

        $sql = "UPDATE users SET secret = '" . $secret . "' WHERE login = '" . $login . "'";

 

~ 중간 생략 ~

 

// If the security level is MEDIUM or HIGH
else
{

 

    // Disables XML external entities. Doesn't work with older PHP versions!
    // libxml_disable_entity_loader(true);
    $xml = simplexml_load_string($body);

 

    // Debugging
    // print_r($xml);

 

    $login = $_SESSION["login"];
    $secret = $xml->secret;

 

    if($secret)
    {

 

        $secret = mysqli_real_escape_string($link, $secret);

 

        $sql = "UPDATE users SET secret = '" . $secret . "' WHERE login = '" . $login . "'";

 

:q! 

 

 

 

 

Ex3) 보안 레벨 'High' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

Intercept -> 'Intercept is on' 으로 변경 실시

 

 

 

'Any bugs?' 버튼 클릭

 

 


버프슈트 Intercept 내용 확인

 

 

 

계정 정보 'A.I.M' 및 패스워드 'cisco1234'로 변경 실시

POST /bWAPP/xxe-2.php HTTP/1.1

Host: 192.168.20.205

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

Accept: */*

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Referer: http://192.168.20.205/bWAPP/insecure_direct_object_ref_3.php

Content-Type: text/xml; charset=UTF-8

Content-Length: 59

Cookie: security_level=2; PHPSESSID=5010485556f1c04ad84a7ea2f325ccff

Connection: close

 

<reset><login>bee</login><secret>Any bugs?</secret></reset>

                    A.I.M                      cisco1234  <- 변경 내용

 

 

 

'Forward' 버튼 클릭

 

 

 

'Intercept is on'를 클릭하여 off 실시

 

 

 

'Intercept is off' 확인

 

 

 

SQL Injection(Login Form/User) 시나리오 선택

 

 

 

SQL 인젝션 실시 -> 'A.I.M.' 계정 패스워드 힌트 변경 실패

 

 

 

Insecure DOR(Reset Secret) 시나리오 선택

 

 

 

'Any bugs?' 버튼 클릭

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)

 

웹해킹 61. A4 - bWAPP Insecre Direct Object References - Insecure DOR(Reset Secret)   https://youtu.be/R-tkPYuao4U

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q