본문 바로가기

Wargame & CTF

[Portswigger] Access Control

접근제어 기술은 접근할 권한을 판단하여 제약조건을 다르게 적용하는 기술입니다.

인증 : 사용자가 자신이 누구인지 확인

세션관리 : 동일한 사용자가 어떤 후속 HTTP 요청을 하는지 식별

접근제어 : 사용자가 수행하려는 작업을 수핼할 수 있는지 여부를 결정

 

수직적 권한 상승

사용자가 접근이 허용되지 않는 기능에 접근할 수 있는 경우 수직적 권한 상승입니다. 예를들면 관리자가 아닌 사용자가 사용자 계정을 삭제할 수 있는 관리자 페이지에 접근할 수 있는 경우 이는 수직적 권한 상승으로 볼 수 있습니다.

 

가장 기본적인 수직적 권한 상승은 애플리케이션이 민감한 기능에 대해서 보호를 시행하지 않는 경우에 발생합니다. 예를 들어 관리자 페이지의 URL을 알 수 있다면 URL을 찾아서 관리자 기능에 접근할 수 있습니다.

예시) 개인 구현 게시판 - 일반적인 페이지에서 URL을 이용한 관리자 페이지 접근

관리자 URL에 접근하면 별다른 인증 없이 관리자 페이지에 접근할 수 있습니다.

해당 위치는 https://example.com/robots.txt 파일과 같은 곳에 공개될 수 있습니다. 

 

해당 개념을 이해하기 위해서 직접 실습해보겠습니다.

실습 페이지에 접근하면 아래와 같은 페이지를 확인할 수 있습니다.

우선 실습의 경우 관리자 페이지가 노출되는지 확인하는 예제이기 때문에 관리자 페이지를 직접 맞추거나 알아내는 방법 밖에 없습니다. 따라서 기존에 힌트인 robots.txt를 이용해서 관리자 페이지를 알아내려고 합니다.

이 단서를 바탕으로 관리자 페이지의 경로를 알 수 있었고 URL을 이용한 직접 접근을 시도합니다.

해당 페이지에 접근하면 문제가 해결되는 것을 확인할 수 있습니다.

 

위의 문제는 robots.txt를 이용해서 관리자 페이지에 대한 단서를 얻은 경우이지만 또 다른 방법으로 단서를 얻을 수 있습니다. html요소 혹은 JS를 통해서도 관리자 페이지의 URL을 확인할 수 있습니다.

 

해당 사례를 익히기 위해서 실습페이지에 접근하였습니다. 이후 개발자 도구를 이용해서 html 요소를 확인하였습니다.

해당 방법을 통해서 관리자 페이지의 위치를 확인해보겠습니다.

확인 결과 관리자 페이지의 위치는

/admin-9zl86x 인 것을 확인하였습니다. 실제로 맞는지 확인해봅니다. 

실제로 경로가 맞았고, Users에 있는 계정들을 삭제했을 때 문제가 해결되는 것을 확인할 수 있었습니다.

 

세번째로 얻을 수 있는 정보는 파라미터(매개변수)를 통한 정보 획득입니다. 

https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1 
해당 링크는 실제로 매개 변수를 통해서 정보를 얻을 수 있는 예제입니다.

 

해당 방법에 대해서도 실습 페이지에서 확인해보겠습니다. 우선 파라미터가 전달되는 페이지가 어디인지 확인하였는데, 이는 로그인 페이지입니다. 따라서 이 부분이 관련이 있다고 생각해였습니다. 계정은 받은 정보를 이용하여 wiener:peter를 입력합니다.

id는 파라미터를 통해 받는것을 확인할 수 있었고, 해당 아이디는 쿠키를 통해서 확인해보면 관리자 페이지에 대한 접근권한이 없는 것을 확인할 수 있었습니다.

접근 권한이 false로 되어있기 때문에 임의로 true로 수정한 후 관리자 페이지에 접근을 시도하면 정상적으로 접근되는 것을 확인할 수 있습니다.

이후 해당 계정을 삭제하면 문제가 해결되는것을 확인할 수 있습니다.

 

이번에는 수평적 권한 상승입니다.

수평적 권한상승이란 서로 사용자인데 파라미터 조작을 이용하여 서로의 게시글에 대한 수정 및 삭제권한을 갖는 경우 수평적 권한상승이라 할 수 있습니다.

https://insecure-website.com/myaccount?id=123 

대표적인 예시로는 자신의 게시글을 수정할 때 id값을 조작하여 다른 사람의 게시글에 조작하는 사례입니다.

예시)  개인 구현 게시판 - 파라미터 조작을 이용하여 타 사용자의 게시글 수정

해당 권한 상승에 대해서 예제를 확인하겠습니다.

이번 문제는 carlos 계정으로 API키를 제출하는 문제입니다. carlos의 게시글을 확인합니다.

이후 카를로스 게시글을 확인할 때 웹 프록시 도구를 이용하여 해당 계정의 GUID를 알아냅니다.

이후 wiener로 로그인 하여 GUID를 확인하고 carlos의 GUID로 변경해줍니다.

이후 확인해보면 username이 carlos로 변경된 것을 확인할 수 있고 API키를 입력하면 문제가 해결됩니다.

 이후 API키를 제출하면 아래와같이 문제가 해결된 것을 확인할 수 있습니다.

 

마지막으로 수평에서 수직적 권한상승입니다.

수평적 권한상승을 이용하여 관리자 계정 페이지에 대한 접근 제어를 우회할 수 있습니다.

 

주어진 계정정보를 이용하여 로그인 후 관리자 계정인 admin administrator등을 프록시 도구로 시도하였습니다. 웹 프록시 도구를 이용하여 wiener를 administrator로 변조 후 정보를 확인합니다.

이후 응답을 확인하면 비밀번호를 알아낼 수 있습니다.

다시 계정 접속으로 돌아와서 접속 후 Admin panel에 접속하면 문제를 해결할 수 있습니다.

 

요약

접근제어 기술은 접근할 권한을 판단하여 제약조건을 다르게 적용하는 기술입니다.

인증 : 사용자가 자신이 누구인지 확인

세션관리 : 동일한 사용자가 어떤 후속 HTTP 요청을 하는지 식별

접근제어 : 사용자가 수행하려는 작업을 수핼할 수 있는지 여부를 결정

해당 문제들을 요약해보면

 

수직적 권한상승

- URL을 이용한 접근

- 자바스크립트와 같은 요소를 이용한 접근

- 파라미터를 이용한 접근

수평적 권한상승

- 파라미터를 이용한 접근

수평적 수직적 권한상승

- 파라미터를 이용한 접근

 

'Wargame & CTF' 카테고리의 다른 글

[Portswigger] Authentication  (0) 2024.01.05
[Dreamhack] 새싹 문제들  (0) 2023.12.31
[Portswigger] Path traversal  (0) 2023.12.22
[Dreamhack] Addition calculator  (1) 2023.12.21
[Webhacking.kr] 1,3,14,15,17번  (1) 2023.12.21