[세션의 정의]
세션은 웹 사이트에서 서비스를 제공할 때 사용자의 로그인을 유지하기 위하여 사용한다. 세션 관리가 소홀하면 세션을 가로채서 재사용하는 공격이 가능하다. 정상적인 프로세스가 진행되는 과정에서 발생하는 만큼 자동 진단 도구에서도 특정한 패턴 매칭으로 도출할 수 없는 취약점이다.
[관리자 페이지 접근]
우선 smgmt_admin_portal.php에서 관리자 권한을 체크하는 전달 값을 수정하여 관리자 인증 없이 내부 페이지에 접근 가능한지 점검해본다.
1. URL 조작
smgmt_admin_portal.php 페이지에 접속하면 URL에서 admin 변수를 확인할 수 있다.
admin 변수에 입력된 값을 0에서 1로 변경한다. 1로 변경하게 되면 위와 같이 URL 조작으로 현재 페이지의 잠금을 풀었다는 메시지가 출력된다.
2. 쿠키 값 조작
그 다음으로는 URL 조작이 아닌 쿠키 값 정보를 수정하여 페이지를 우회한다. smgmt_admin_portal.php 페이지를 우회하기 위하여 버프 스위트를 사용한다.
버프 스위트로 HTTP 요청을 가로채서 요청 헤더를 확인한다. 쿠키 값에 admin 변수를 확인할 수 있다.
admin 변수에 입력된 값을 0에서 1로 변경한다. 1로 변경한 다음에 Forward 버튼을 클릭하여 수정한 내용을 요청한다.
쿠키 값을 수정한 결과 위와 같이 쿠키를 변조하여 페이지의 잠금을 풀었다는 메시지가 출력된다.
3. 데이터베이스 관리
URL을 조작하거나 쿠키 값에 admin, security_level 같이 권한과 관련된 단어들이 평문으로 노출되는 경우에는 우회 가능성이 높다. 이에 대응하기 위해 데이터베이스에서 admin 변수의 값이 1인지 체크하고, 세션 정보가 admin 계정인지 검사한 후에 해당 페이지의 잠금을 해제하도록 할 수 있다.
bWAPP 데이터베이스에서 users 테이블을 조회했다. id가 bee인 계정이 admin 계정임을 확인할 수 있다.
따라서 admin 계정인 bee로 접속하면 데이터베이스 관리자에 의해 페이지 잠금이 해제되었다는 메시지가 출력된다.
[URL 주소 조작을 통한 세션 우회]
이번에는 smgmt_sessionid_url.php에서 다른 사용자의 세션 정보를 이용하여 권한을 획득할 수 있는지 점검해본다.
smgmt_sessionid_url.php 페이지에 접속하면 절대 세션 아이디를 노출하면 안 된다는 메시지와 달리 URL에 세션 아이디가 노출되어 있다.
공격을 위하여 다른 웹 브라우저로 비박스의 로그인 페이지에 접속한다. 그 다음 버프 스위트를 사용하여 공격 대상의 세션 아이디로 smgmt_sessionid_url.php 페이지에 연결을 요청한다.
버프 스위트로 HTTP 요청을 가로챈 다음 Host 헤더와 Cookie 헤더를 수정한다.
요청 URL을 smgmt_sessionid_url.php 페이지로 변경하고, 쿠키 값에 있는 PHPSESSID의 값을 공격 대상의 세션 아이디 값으로 변경한다. 변경을 마치면 Forward 버튼을 클릭하여 수정한 내용을 요청한다.
인증 단계를 거치지 않고도 공격 대상의 세션 아이디로 페이지 접근에 성공했다. 하지만 URL에는 smgmt_sessionid_url.php 페이지가 아닌 login.php가 보인다. 아마 어느 부분에서 놓친 부분이 있을 것으로 보인다.
'웹 > 비박스' 카테고리의 다른 글
비밀번호 변경 & 비밀번호 힌트 변경 (0) | 2022.07.31 |
---|---|
서버 측 요청 변조 (0) | 2022.07.31 |
반사된 XSS 취약점 (0) | 2022.07.31 |
Blind SQL Injection - Time Based (0) | 2022.07.07 |
Blind SQL Injection - Boolean Based (0) | 2022.07.05 |