WebGoat(웹고트) LAB: Role Based Access Control
Stage 1 : Bypass Presentational Layer Access Control
(1) Window xp에서 http://victim:8080/WebGoat/attack 사이트로 이동하여 목록에서 LAB: Role Based Access Control - Stage1을 찾아 이동합니다. (webgoat / webgoat)
(2) Tom Cat으로 로그인합니다. (비밀번호: tom)
(3) Jerry Mouse로 로그인합니다. (비밀번호: jerry)
=> Tom은 employee라는 그룹에 속해있고, Jerry는 hr이라는 그룹에 속해있습니다.
=> 역할에 따라 할 수 있는 업무(기능)가 달라집니다.
=> Tom 사용자가 제공되지 않는 기능을 요청할 수 없을까? 버튼이 없는데 CreateProfile이나 DeleteProfile을 할 수 없을까?
(4) 서버로 전송되는 값을 보기위해 Proxy를 사용합니다.
(4)-1 Proxy에서 Intercept is on으로 설정해주고 Tom에서 Search Staff를 클릭합니다.
=> employee_id=105 & action=SearchStaff
(4)-2 Proxy에서 Intercept is on으로 설정해주고 Jerry를 입력하고 FindProfile을 클릭합니다.
=> search_name=Jerry&action=FindProfile
(4)-3 List Staff를 눌러 메인으로 돌아가서 Proxy에서 Intercept is on으로 설정해주고 ViewProfile을 클릭합니다.
=> employee_id=105 & action=ViewProfile
(4)-4 Proxy에서 Intercept is on으로 설정해주고 EditProfile을 클릭합니다.
=> employee_id=105 & action=EditProfile
(4)-1 ~ (4)-4까지 보면 기능 버튼의 라벨명이 action 요청 파라미터의 값으로 전달되는 것을 확인할 수 있습니다.
=> action=버튼명
(4)-5 (4)-4 페이지에서 EditPorofile을 DeleteProfile로 바꾸고 Intercept is off로 설정합니다.
(5) 실행결과
=> 미션 성공
=> 화면에 버튼이 보이지 않더라도 각각의 동작들을 분석해야합니다. 어떤 주소로 가는지, 어떤 매개변수를 받는지를 분석하여 화면에 안보이는 기능을 의미하는 단어들을 넣어봐야합니다. 이렇게 넣어봤을 때, 그 기능이 동작한다면 접근통제 취약점을 가지고 있는 것입니다.
=> 원인은 서버 사이드에서 요청이 들어왔을 때, 해당 사용자가 권한이 있는지를 확인하지 않고 무조건 요청을 처리했기 때문에 발생하는 것입니다. 일반적인 사용자는 화면에 기능 버튼이 없으면 요청을 할 수 없지만, 공격자는 URL 주소의 패턴, 요청 파라미터의 패턴을 분석해서 예상되는 행위를 유발하는 값을 요청 파라미터에 포함시켜서 서버를 호출할 수 있습니다.
=> 즉, 서버는 요청이 들어오면 무조건 처리하는 것이 아니라 요청한 사용자가 권한이 있는지 없는지를 확인해야합니다.