안녕하세요 !
이번에는 접근 제어 취약점 네 번째 실습을 하도록 하겠습니다.
접근 제어 취약점
1. URL 기반 액세스 제어를 우회할 수 있음
이 웹사이트의 에는 인증되지 않은 관리 패널이 있지만 /admin프런트 엔드 시스템은 해당 경로에 대한 외부 액세스를 차단하도록 구성되었습니다. 그러나 백엔드 애플리케이션은 X-Original-URL헤더를 지원하는 프레임워크를 기반으로 구축됩니다.
실습을 해결하려면 관리자 패널에 액세스하여 사용자를 삭제하세요 carlos.
해결책
- 로드 /admin하고 차단되는지 관찰해 보세요. 응답이 매우 단순하여 프런트엔드 시스템에서 발생했을 수 있음을 알 수 있습니다.
- Burp Repeater에 요청을 보냅니다. 요청 줄의 URL을 로 변경 /하고 HTTP 헤더를 추가합니다 X-Original-URL: /invalid. 애플리케이션이 "찾을 수 없음" 응답을 반환하는지 확인합니다. 이는 백엔드 시스템이 헤더의 URL을 처리하고 있음을 나타냅니다 X-Original-URL.
- 헤더 값을 X-Original-URL으로 변경합니다 /admin. 이제 관리 페이지에 액세스할 수 있는지 확인하세요.
- 을 삭제하려면 실제 쿼리 문자열에 carlos추가 하고 경로를 로 변경합니다 . ?username=carlosX-Original-URL/admin/delete
메인 화면에 접속합니다.
어드민 패널에 접속을 하면 거부가 되었다고 확인할 수 있습니다.
버프 스위터에서도 X-Original-URL: /invalid 를 추가해서 리피터를 보냈는데 액세스가 거부되었다는 것을 확인할 수 있었습니다.
그러면 GET 메소드 옆에 admin 을 지우고 X - 오리지널 - URL 에 admin 을 입력해서 보내기를 하니까 200 정상적인 페이지의 소스 코드를 확인할 수 있었습니다.
admin 을 입력하니까 칼로스의 URL 을 확인하였습니다.
이 주소를 브라우저에 복사해서 붙여넣기 검색하니까 바로 관리자 패널에 접속하는 것을 확인하였습니다.
액세스가 거부되었다고 뜹니다.
버프 스위터에서 오리지널 URL 에 /admin/delete 를 놓고 GET 메소드에는 유저 네임 칼로스를 적고 난 뒤에 보내기를 누르면 302가 표시되므로 제대로 작동을 합니다.
다시 브라우저로 돌아가서 /admin/delete?username=carlos 를 삭제하고 검색하면 클리어 한 것을 확인할 수 있습니다.
2. 메소드 기반 액세스 제어를 우회할 수 있음
이 실습에서는 부분적으로 HTTP 요청 방법을 기반으로 액세스 제어를 구현합니다. 자격 증명을 사용하여 로그인하면 관리 패널에 익숙해질 수 있습니다 administrator:admin.
실습을 해결하려면 자격 증명을 사용하여 로그인 wiener:peter하고 결함이 있는 액세스 제어를 활용하여 자신을 관리자로 승격하세요.
해결책
- 관리자 자격 증명을 사용하여 로그인합니다.
- 관리자 패널로 이동하여 승격 carlos하고 Burp Repeater에 HTTP 요청을 보냅니다.
- 개인/시크릿 브라우저 창을 열고 관리자가 아닌 자격 증명으로 로그인합니다.
- 해당 사용자의 세션 쿠키를 기존 Burp Repeater 요청에 복사하여 관리자가 아닌 사용자로 다시 승격을 시도하고 carlos응답에 "승인되지 않음"이 표시되는지 확인합니다.
- 메서드를 에서 로 변경 POST하고 POSTX응답이 "매개변수 누락"으로 변경되는지 확인합니다.
- GET마우스 오른쪽 버튼을 클릭하고 "요청 방법 변경"을 선택하여 해당 방법을 사용하도록 요청을 변환합니다 .
- 사용자 이름 매개변수를 사용자 이름으로 변경하고 요청을 다시 보냅니다.
메인 화면에 접속합니다.
로그인을 하고 나면 유저 칼로스가 뜨는 것을 확인할 수 있습니다.
메서드 POST 를 리피터로 보내면 유저 네임, 액션을 볼 수 있습니다.
이번에는 일반 사용자 계정으로 로그인을 해서 관리자 사용자로 승격시키는 액세스 제어 취약점이 있는지 확인해보겠습니다.
역시나 어드민 패널은 없네요.
일반 사용자 계정의 쿠키 값을 복사해서 어드민 역할의 쿠키 값에 붙여넣기 해보겠습니다.
권한이 없다고 뜨네요.
그렇다면 리쿼트 체인지 메소드를 입력하고 나서 일반 사용자 계정이 칼로스로 되어 있는데 이것을 wiener 로 바꾸면 됩니다.
그리고 팔로우 리디렉트를 눌러주면 클리어 한 것을 확인할 수 있습니다.
3. 한 단계에 대한 액세스 제어가 없는 다단계 프로세스
이 실습에는 사용자 역할 변경을 위한 다단계 프로세스에 결함이 있는 관리 패널이 있습니다. 자격 증명을 사용하여 로그인하면 관리 패널에 익숙해질 수 있습니다 administrator:admin.
실습을 해결하려면 자격 증명을 사용하여 로그인 wiener:peter하고 결함이 있는 액세스 제어를 활용하여 자신을 관리자로 승격하세요.
해결책
- 관리자 자격 증명을 사용하여 로그인합니다.
- 관리자 패널로 이동하여 승격 carlos하고 Burp Repeater에 확인 HTTP 요청을 보냅니다.
- 개인/시크릿 브라우저 창을 열고 관리자가 아닌 자격 증명으로 로그인합니다.
- 관리자가 아닌 사용자의 세션 쿠키를 기존 Repeater 요청에 복사하고 사용자 이름을 사용자 이름으로 변경한 후 재생합니다.
메인 화면에 접속합니다.
관리자 계정으로 로그인 한 뒤에 칼로스 업그레이드 유저를 클릭합니다.
그리고 일반 사용자 계정 wiener 에 대한 쿠키 값을 확인합니다.
wiener 로 유저네임에 수정을 하고 wiener 의 쿠키 값으로 변경을 한 뒤에 보내기를 클릭하면 302 가 뜨는 것을 확인할 수 있습니다.
팔로우 리디렉션을 클릭하면 바로 클리어 한 것을 볼 수 있습니다.
4. 참조자 기반 액세스 제어
이 실습에서는 Referer 헤더를 기반으로 특정 관리 기능에 대한 액세스를 제어합니다. 자격 증명을 사용하여 로그인하면 관리 패널에 익숙해질 수 있습니다 administrator:admin.
실습을 해결하려면 자격 증명을 사용하여 로그인 wiener:peter하고 결함이 있는 액세스 제어를 활용하여 자신을 관리자로 승격하세요.
해결책
- 관리자 자격 증명을 사용하여 로그인합니다.
- 관리자 패널로 이동하여 승격 carlos하고 Burp Repeater에 HTTP 요청을 보냅니다.
- 개인/시크릿 브라우저 창을 열고 관리자가 아닌 자격 증명으로 로그인합니다.
- /admin-roles?username=carlos&action=upgradeReferer 헤더가 없기 때문에 요청이 승인되지 않은 것으로 처리되는 것을 찾아보고 관찰합니다.
- 관리자가 아닌 사용자의 세션 쿠키를 기존 Burp Repeater 요청에 복사하고 사용자 이름을 자신의 것으로 변경한 후 재생합니다.
메인 화면에 접속합니다.
관리자 계정으로 로그인을 한 뒤에 칼로스를 업그레이드 합니다.
유저 네임 업그레이드 클릭한 내용을 리피터로 보내서 확인합니다.
이 상태에서 일반 사용자 wiener 의 계정으로 로그인을 하고 쿠키 값을 확인합니다.
그리고 유저 네임에는 wiener , 쿠키 값에는 wiener 의 쿠키 값 그 다음은 리피터의 내용을 지워줍니다.
그리고 보내기를 누르면 승인 되지 않은 것을 확인할 수 있습니다.
그렇다면 다시 리피터를 붙여넣어서 보내기를 눌렀더니 302 글꼴을 볼 수 있었습니다.
그리고 팔로우 리디렉션을 누르면 됩니다.
클리어 한 것을 확인할 수 있습니다.
끝