stage 4 : 아래 그림의 HTML 테그를 복사하여 입력합니다.
- 아래와 같이 Hello, Please... 나오면 아무거나 입력합니다.
stage 5 : 방어 코딩을 해야 합니다. escape.js 를 활용해서 해야 합니다.
- firebug를 열어 escape.js를 확인합니다.
- escapeHTML 함수를 input 에 적용하여 줍니다.
- input에 onkeyup="displayGreeting(person.value)" 이부분의 함수를 찾아 봅니다.
- 서버의 WebGoat-5.2\tomcat\webapps\WebGoat\javascript 위치에 DOMXSS.js 파일을 열어 줍니다.
- 아래와 같이 name부분에 escapeHTML함수를 적용하고 저장합니다.
- js 파일이 변경이 되었기 때문에 파이어폭스를 새로고침하여 주고 위에서 작성한 자바 스크립트 코드를 아무거나 적용하여 테스트 합니다.
1. Using an Access Control Matrix
user, resource : 가 어떻게 변화되는지 잘 보시고 목표를 찾으시면 됩니다.
2. Bypass a Path Based Access Control Scheme
아래 경로에 그림과 같은 파일이 있습니다.
D:\WebGoat-5.2\tomcat\webapps\WebGoat\lesson_plans
톰켓의 사용자 환경설정 파일인 tomcat/conf/tomcat-users.xml 파일을 접근해보겠습니다.
URL과 디렉토리를 보면 알수 있듯이 tomcat 디렉토리에 webapps가 웹 루트로 된것을 알수 있습니다.
파일 다운로드 시스템을 악용하여 공격합니다.
-Firefox에서 Tamper Data를 실행합니다.
: 파이어 폭스 에드온 프로그램인 Tamper Data를 실행합니다.( Post 데이터 값이나 Head값을 변경할 수 있는 에드온입니다.)
: 다운로드 경로 : https://addons.mozilla.org/en-US/firefox/addon/tamper-data/
- Start Tamper를 클릭하여 시작합니다.
- 파이어 폭스에서 Choose the file to view : 목록에 파일을 아무거나 클릭 후에 View File를 클릭하면
- 아래와 같은 Tamper with request? 창이 나타납니다.
- Tamper 를 클릭하여 데이터을 합니다.
- 오른쪽에 Post Data란에 File 부분에
/../../../conf/tomcat-users.xml 을 입력합니다. ( 이러 상대경로 설정 접근으로 PC에 있는 모든 파일을 열어 볼수 있습니다. )
- 확인을 누르시면 파이어 폭스 화면에서 공격 성공 메시지를 확인 할 수 있습니다.
3. LAB : Role Based Access Control
문제는 톰(일반계정) 계정을 사용하여 계정을 지워 버리면 성공 할 수 있습니다.
문제를 읽어 보면 비밀번호는 prename 을 사용하다 되어 있네요.
아직도 상당수의 일반인들이 아이디와 같은 비밀번호를 많이 사용하고 있다고 하지요?? 문제입니다.
- 직원 목록에서 Tom Cat를 선택합니다.
- 비밀번호 란은 tom입니다.
- 로그인 화면을 보면 계정을 삭제 하는 기능이 없습니다.
- 프로그래머들의 습성을 이해하고 URL을 파악을 하면 풀이가 가능한 부분입니다.
보통의 프로그래머들은 View, Delete, Search 과 같은 것을 자주 사용하게 됩니다.
아래에서는 ViewProfile를 변경하여 계정을 삭제 하면 됩니다.
- Tamper Data를 실행 합니다.
- 아래 화면에서 ViewProfile 을 클릭합니다.
- Post 데이터를 아래와 같이 변경합니다.
- 공격이 성공 하였되었습니다.
4. Stage 2 : Add Business Layer Access Control
- 소스에서 방어 하는 방법입니다.
- D:\WebGoat-5.2\tomcat\webapps\WebGoat\
JavaSource\org\owasp\webgoat\lessons\RoleBasedAccessControl\RoleBasedAccessControl.java
파일을 수정하고 컴파일 한 후 WEB-INF\classes 디렉토리에 위에 패키지 경로를 찾아가서 수정된 class파일로 변환합니다.
추가할 코드 RoleBasedAccessControl.java 236 라인 부분 CODE HERE 아래 부분에 추가
- 수정후에 톰켓을 다시 시작합니다.
- State 1과 동일한 방식으로 Tom 계정을 삭제 합니다.
- 아래와 같이 에러가 나타나면 정상적으로 방어 코딩을 한것 입니다.
5. Stage 3: Bypass Data Layer Access Control
Tom의 약한 계정을 가지고 다른 계정을 컨트롤 하는 방법입니다.
- Firebug를 열어 아래와 같이 select 박스의 value를 확인합니다.
- manager 권한을 가진 사용자는 vlaue가 102입니다.
- employee 권한을 가진 tom(105)으로 로그인 하여 102의 프로파일을 확인하면 됩니다.
- tom의 프로파일로 로그인 합니다.
- Tamper Data를 실행 하고 ViewProfile를 클릭합니다.
tom의 employee_id 가 105입니다. 이것을 manager권한의 102로 수정하고 확인인 하면 성공.
- 성공 하면 Moe의 프로파일을 보실 수 있습니다.
6. stage 3 방어 코딩을 하시면 됩니다.
- stage 2와 동일한 파일을 수정합니다.
- 아래는 수정 코드입니다. employeeld 를 가져 오기 위하여 코드를 수정하였습니다. userid도 약간 수정했습니다.
int userId = Integer.parseInt((String) s.getRequest().getSession()
int employeeId = s.getParser().getIntParameter(RoleBasedAccessControl.EMPLOYEE_ID);
if(!isAuthorized(s, userId, requestedActionName)) // stage 2 코드
{
throw new UnauthorizedException();
}
if(!action.isAuthorizedForEmployee(s, userId, employeeId)) // stage 4 코드
{
throw new UnauthorizedException();
}
- stage 3 과 동일한 방법으로 공격을 시도 합니다.
- 아래와 같은 화면이 나오면 성공입니다.
7. Remote Admin Access
- Goat에 어드민 모드가 있다는 군요.
- 주소창 파라미터 부분에 &admin=true 를 입력합니다.
- Admin Functions 에 몇가지 메뉴가 나타나는것을 확인합니다.
User Information을 클릭하면 처음 화면으로 돌아가게 됩니다. 이것을 볼수 있도록 URL을 수정 합니다.
- User Information의 마우스를 오른쪽 클릭 후 주소를 복사합니다.
- 복사한 주소를 주소창에 입력 후 마지막에 &admin=true를 붙여 줍니다.
- product information도 동일한 방법으로 합니다.
- 모두 성공하였습니다.