본격적으로 WebGoat에서 제공하는 주요 취약점에 대해서 하나씩 진행할 차례가 되었다. 첫 번째 교육은 Broken Access Control 이고, 그 중에서 세션 하이재킹에 대한 내용이다. 퀴즈에서는 hijack_cookie 값을 예측해서 Access Control을 우회하라고 한다. 우선 hijack_cookie가 어떻게 생겼는지 확인해보기 위해 로그인을 시도해본다. 존재하지 않는 계정으로 로그인을 시도해보니, 로그인 실패 시에도 cookie 값으로 hijack_cookie가 생성되는 것으로 보인다. 몇 번의 로그인을 시도해보니, hijack_cookie가 대략적으로 예측되는 부분이 있다. 우선 첫번째 숫자는 1씩 증가하는 것으로 보이고, 두번째 숫자는 대략 현재시간을 나타내는 것으로 보인다. 중..
해당 페이지는 보안 3대 요소(기밀성/무결성/가용성)에 대한 내용을 다루는 페이지이다. 간단히 내용을 확인하고 퀴즈 부분으로 넘어갔는데.... 뭔가 이상하다. 상황을 가정해 퀴즈를 풀라고 하고 있는데... 무슨 퀴즈인지 제대로 알려주지 않는다. 우선 Submit answer를 눌러보니 화면상에서는 보이지 않지만 패킷을 주고받고 있었다. 소스코드를 확인해보니 질문의 답을 체크하는 URL이였다. 그리고 클라이언트 코드를 확인해보아도 파라미터 변조 등을 하는 것은 아니고 실제 퀴즈가 있는 것 같은데.... 퀴즈가 보이지 않는다. 그래서 우선 해당 이슈에 대해서 검색을 해보았다. OWASP WebGoat Git에 가보니 나와 같은 이슈가 레포트 되어 있었고, 최근에 해당 이슈가 해결되어 코드도 머지된 것으로 보..
Developer Tools의 두 번째 퀴즈는 Proxy 툴이 없을 때 간이적으로 패킷을 확인하기 위해 자주 사용하는 방법인 Network 기능을 이용하는 부분이다. 나 또한 개발자와 리뷰 미팅을 진행할 때, 자주 사용하는 크롬 기능이다. 해당 퀴즈는 Go 버튼을 눌렀을 때, networkNum 값을 확인인하여 제출하는 문제이다. 그럼 Go 버튼을 눌러보자. 그럼 Network 탭에는 해당 페이지에서 발생한 여러 패킷들을 확인할 수 있는데, 그 중 해당 버튼을 눌렀을 때 발생했던 패킷을 확인해보니, 지문에서 확인해야 한다고 언급한 networkNum 값이 전달되고 있는 것을 확인할 수 있었다. 실제 Proxy 툴에서도 해당 패킷이 그대로 전달되었던 것을 확인해보면 Developer Tool이 정확하고 패..
WebGoat의 General 항목의 세 번째는 Develop Tools 사용방법에 대한 내용이다. 특히 개발자들이 자주 사용하는 크롬의 개발자 툴을 자세히 이야기 해주고 있다. 해당 내용에서는 2개의 퀴즈가 존재하는데 순서대로 확인해보겠다. 첫 번째 퀴즈는 크롬 개발자 툴에서 Console을 이용하여 특정 스크립트 함수를 실행하고, 이를 통해 생성된 값을 확인하는 퀴즈였다. 여기서 우선 Submit을 눌렀을 때 어떻게 값을 확인하고 있는지 소스코드를 확인해보자 소스코드를 확인해보면, 입력값(successMessage)와 User Session에 저장된 randValue가 같은 값인지 확인하는 것을 알 수 있다. 이를 보면 어디선가 User Session에 randValue를 설정하는 코드가 있을 것을 ..
General의 두 번째 페이지에서는 본격적으로 Proxy 사용방법에 대해서 이야기 해주는 페이지이다. 특히 OWASP ZAP Proxy에 대한 사용방법을 상세하게 알려주고 있으니, Proxy 사용에 익숙하지 않은 분들은 이 페이지를 읽어보면 많은 도움이 될 것 같다. 나는 이미 Burp를 사용하고 있기 때문에, 빠르게 퀴즈 부분으로 넘어가 보았다. 해당 요청을 처리하는 함수 내용을 확인해보면 POST method인 경우, 요청을 실패했다고 응답처리 하고 있고, 다음으로 x-request-intercepted 라는 헤더값과 changeMe라는 파라미터를 가져와서 값이 Null 인지 여부를 확인하고 있다. 특히 헤더값는 true인지 여부와 changeMe는 “Requests are tampered easi..
WebGoat에 로그인하면 소개, 기본내용, 그리고 OWASP Web Top10과 관련된 실습내용을 확인할 수 있다. 이제 차례대로 하나씩 진행해보면서 WebGoat를 분석해 보고자 한다. 가장 먼저 General > HTTP Basics 을 확인해보면 Proxy를 이용하여 요청 및 응답을 확인이 필요하다고 하며, 응답값에 사용되는 HTTP Request 파라미터, 쿠키 등을 확인해보라고 이야기 하고 있다. 해당 내용을 확인하고 나면 간단한 퀴즈를 보여준다. 퀴즈는 현재 페이지에서 제공하는 요청기능에 대해서 어떤 HTTP Method를 사용하고 있고, 이때 Magic Number가 무엇인지 물어보고 있다. 해당 요청을 처리하는 Controller의 함수를 확인해보면, answer, magic_answer..
WebGoat에서 발생하는 요청/응답을 확인하기 위해 Proxy를 설정하고, Burp로 패킷을 확인하고자 하는데, WebGoat의 패킷을 확인할 수 없었다. 우선 기본적으로 WebGoat와 Proxy가 사용하고 있는 Port가 8080으로 동일했기 때문에, Proxy를 8888 포트로 변경하고, Burp에서도 Proxy listener를 새로운 포트로 설정하였다. Port를 변경하였으나 여전히 WebGoat의 패킷을 확인할 수 없었다. 여기서 문제는 WebGoat가 Loopback IP로 접근하였기 때문에, 기본적으로 Loopback IP로 접근 시 Proxy로 패킷이 전달되지 않는 것이 문제였다. 이런 경우, WebGoat를 Internal IP로 접속하면 되는 것을 확인하였으나, Internal IP..
WebGoat에서 사용 중인 UserDetailsService에서 User 정보를 조회가 가능할 때 리턴되는 엔티티 클래스 정보를 보면, ROLE은 2개로 구분되어 있는 것을 알 수 있다. 그렇지만 Spring Security의 보안필터 구성을 보면 요청에 따른 권한적용 여부가 포함되어 있지 않았으므로, 권한에 따른 기능을 분리하지 않은 것으로 보인다. Controller나 Service에서 유저의 권한을 확인할 수도 있기 때문에 ADMIN 권한으로 검색해보았지만 특별히 권한에 따라 기능 및 데이터를 제한하지 않는 것을 알 수 있다. 이후 기능 확인과정에서 Admin 서비스가 있거나, Admin 서비스로 분류가 필요한 기능이 확인된다면, 해당 서비스가 권한검증없이 기능 및 데이터가 제공될 수 있다는 것을..
서비스를 분석할 때 가장먼저 하는 것이 어떻게 인증이 처리되고 있는지를 보고 있다. 개발 프레임워크나 아키텍쳐에 대한 정보없이 코드리뷰를 하는 경우에는 Login이나 Auth 등의 키워드를 이용하여 정보를 수집하지만, 현재 WebGoat는 SpringSecurity를 사용하고 있기 때문에, @EnableWebSecurity 어노테이션을 검색하여 보안설정 정보부터 확인한다. 보안설정 파일에서 (1) Filter 적용, 보안구성의 보안필터 내용, (2) 사용자명을 검색하기 위한 UserDetailsService, (3) 패스워드 검증을 위한 PasswordEncoder 정보를 확인한다. 보안필터 내용을 확인해 보면, 어떤 요청에 대해서 인증이 필요한지 확인할 수 있다. 현재 WebGoat는 메인페이지, 리소..
서비스 패스워드 재인증 개인정보 노출 현재 패스워드 요구 패스워드 정책 패스워드 정책 특이사항 패스워드 변경 안내 다른 디바이스 로그인 유지 기능 제공 추가 인증 강제 로그아웃 특이사항 네이버 X X O 영문 대소문자, 숫자, 특수기호 포함 8~16자리 네이버 알림 X 자동입력 방지문자 X 카카오 O Login ID (Email) X 영문 대소문자, 숫자, 특수기호 조합하여 8~32자리 카카오톡 메시지 이메일 O X X 쿠팡 O Login ID (Email) O 영문, 숫자, 특수기호 2가지 이상 조합하여 8~20자리 X X X O 11번가 O Login ID O 영문, 숫자, 특수기호 모두 포함하여 8~20자리 X O X X YES24 O Login ID X 영문 대/소문자, 숫자, 특수기호 조합하여 ..
- Total
- Today
- Yesterday