이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
인증 결함(Broken Authentication)이란 인증에 필요한 사용자의 계정 정보를 노출하는 취약점으로 보통 웹 페이지의 HTML 코드에 계정 정보를 노출하거나 인증을 GET 메서드로 요청하여 URL에 계정 정보가 노출되기도 합니다. 웹 사이트 가입 시 추측할 수 있거나 무차별 대입 공격이 가능한 비밀번호(예 1234, admin 등) 입력을 허용하는 경우도 포함됩니다. 이외에도 비밀번호 찾기 기능에서 사용자의 계정 정보를 노출하기도 합니다.
A2 - Broken Auth. - Logout Management (로그아웃 관리)
'ba_logout.php' 페이지에서는 로그아웃 관리 및 세션 관리에 대하여 점검합니다. 해당 페이지에 접속을 하면 Click here to logout.라는 문구를 확인할 수 있는데 여기서 here 글씨를 눌러보도록 하겠습니다.
here 글씨를 눌렀을 경우 위처럼 로그아웃을 할 것인지 묻는 팝업이 뜨고 여기서 확인 버튼을 누르면 로그아웃이 됩니다.
하지만 여기서 뒤로 가기를 해보면 세션이 끊키지 않아 다시 로그인 상태가 되어 있는 것을 확인할 수 있습니다. 해당 취약점은 세션에 대한 처리가 정상적으로 이루어지지 않아 발생할 수 있는 취약점입니다.
난이도 중/상
난이도 '하'와는 다르게 '중/상'에서는 뒤로 가기 버튼을 눌렀을 경우 정상적으로 로그아웃이 되어 로그인 페이지가 뜨는 것을 확인할 수 있습니다.
해당 소스코드의 switch문을 확인해 보면 난이도 하(case "0")인 경우 별다른 동작 없이 쿠키를 삭제 후 로그인 페이지(login.php)로 이동시키고 있습니다.
하지만 난이도가 중/상(case "1", case "2")인 경우에는 session_destroy() 함수를 호출한 후 쿠키 삭제, 로그인 페이지로 이동시키고 있습니다.
PHP에서 session_destroy() 함수는 현재 세션과 관련된 모든 데이터를 삭제하는 함수입니다.
비슷한 기능을 하는 함수로 session_unset() 함수가 있는데, 이 함수는 세션 배열 변수를 비우는 함수입니다.
위의 코드에서 난이도 중(case "1")인 경우에는 session_destroy() 함수만 호출하고, 난이도가 상(case "2")인 경우에는 $_SESSION = array(); 수행 후, session_destroy() 함수를 호출해주고 있는데 여기서 $_SESSION = array(); 는 세션 변수를 비우는 코드로 session_unset() 함수의 기능과 같습니다.
위에 소스코드에서 확인한 것처럼 난이도 중/상에서는 세션을 삭제시켜주고 있기 때문에, 뒤로 가기 버튼을 눌러도 이전의 로그인한 상태의 세션이 남아 있지 않아 정상적으로 로그아웃된 후 로그인 페이지가 뜨는 것을 알 수 있습니다.
세션 은 특정 기간 동안 동일한 사용자와 관련된 일련의 이벤트 및 트랜잭션입니다. 사용자가 시스템에 로그인하면 유효한 세션에 대해 사용자와 웹 앱 간의 통신을 허용하는 고유한 세션 ID (쿠키, URL 매개변수, 인증 토큰 등)가 부여됩니다.
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) A2 Broken Auth. - Weak Passwords (0) | 2022.06.28 |
---|---|
비박스(bWAPP) A2 Broken Auth. - Password Attacks (0) | 2022.06.21 |
비박스(bWAPP) A2 Broken Auth. - Insecure Login Forms (0) | 2022.06.14 |
비박스(bWAPP) A2 Broken Auth. - Forgotten Function (0) | 2022.06.13 |
비박스(bWAPP) A2 - Broken Auth & Session Mgmt (인증 및 세션 관리 취약점) (0) | 2022.06.13 |