기준

세션 예측

세션 고정

불충분한 세션 만료

 

취약점 설명

세션 예측

세션의 구성이 단순하게 구성되거나 복호화가 가능한 암호화를 통해 예상 가능하게 구성되어 다른 사용자의 세션을 쉽게 유추할 수 있는 경우 발생하는 취약점입니다.

본인의 세션을 여러 번 생성하여 확인하는 것 만으로 타 사용자의 세션을 예측하여 도용할 수 있는 매우 위험한 취약점입니다.

 

불충분한 세션 만료

로그아웃 후 혹은 로그인 시의 세션 유지시간이 너무 긴 경우 세션을 필요 이상으로 유지하여 발생할 수 있는 취약점입니다.

타 사용자의 세션이 강탈당하거나 세션을 획득한 경우 세션을 도용하여 타 사용자 및 관리자의 권한을 탈취할 수 있는 매우 위험한 취약점입니다.

 

세션 고정

사용자 로그인 시에 생성되는 세션이 고정되어 발생되는 취약점입니다.

사용자 및 관리자의 세션을 탈취한 경우 고정된 세션으로 접근하여 공격자에 의해 권한이 도용될 수 있는 취약점으로 매우 위험한 취약점입니다.

 

-----------------------------------------------------------------------------------------------------------------------------------

 

각각의 취약점은 위험성이 큰 취약점입니다.

하지만 위의 세 취약점은 매우 유사한 부분이 많아 한번에 취합하여 포스팅하게 되었습니다.

 

세 가지 취약점은 세션의 보안 조치가 취약하게 설정되어 발생하는 취약점으로 서비스를 이용하는 사용자의 가용성 저해 및 개인정보 탈취, 타 사용자 ID 도용, 사용자 ID를 활용한 DoS 공격 등을 유발할 수 있는 취약점입니다.

 

공격 방법

(해당 취약점은 DVWA의 Weak Session IDs를 활용하여 실습해보도록 하겠습니다.)

1. Low Level

해당 페이지의 형태는 위와 같습니다.

우선 세션의 취약점을 확인할 방법으로 쿠키를 확인해보도록 하겠습니다.

개발자 도구 > 애플리케이션 > 쿠키를 들어가 보면 세션 값을 확인할 수 있습니다. 

dvwaSession 값이 4로 설정되어 있지만 페이지의 Generate를 눌러보겠습니다.

우선 PHPSESSID는 고정되어 있으며 dvwaSession 값은 1씩 증가하는 방식이랑 것을 알 수 있습니다.

고치려고 하는 값을 더블클릭해주면 수정할 수 있습니다.

 

2. Medium Level

Low Level과 달리 세션 값이 길어진 것을 알 수 있습니다.

Generate를 해보면 위처럼 바뀌는 것은 알 수 있습니다.

PHPSESSID는 고정되어 있지만 dvwasession은 다르게 바뀌는 것을 알 수 있습니다.

그럼 이제 좀 자세히 보기 위해 페이지 소스를 확인해보겠습니다.

세션을 확인해보면 시간을 쿠키값에 적용해 생성되는 것을 알 수 있습니다.

다시 Generate 하면서 확인해보면 앞의 '164810'은 고정된 값이고 뒤의 3자리는 시간에 의해 생성되는 것을 확인할 수 있습니다.

 

3. High Level

High Level에서 확인해보면 고정되어 있는 것처럼 확인되지만 실제고 적용은 되지 않는 것을 알 수 있습니다.

그래서 Request와 Response 패킷을 확인하여 Session값이 어떻게 적용되는지 확인해보겠습니다.

확인해보면 Response 패킷이 Generate 되는 것을 확인할 수 있습니다.

그럼 Session 값이 어떤 방식으로 바뀌는지 확인하기 위해 소스코드를 확인해보도록 하겠습니다.

<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (!isset ($_SESSION['last_session_id_high'])) {
        $_SESSION['last_session_id_high'] = 0;
    }
    $_SESSION['last_session_id_high']++;
    $cookie_value = md5($_SESSION['last_session_id_high']);
    setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}

?>

소스코드를 확인해보면 cookie_value = md5로 적용되는 것을 확인할 수 있습니다.

md5는 해쉬 함수로 rainbow table로 cracking이 가능합니다.

복호화해보면 md5가 적용되었을 뿐 전과같이 1씩 증가하는 형태로 Session값이 적용 중인 것을 확인할 수 있습니다.

+ Recent posts