Job SSul Series 1 : 해킹 방어 실습 - EP7 XSS
안녕하세요.
해킹과 방어 시리즈를 연재하고 있는 Ziqon입니다.
이번엔 그 두번째 공격과 방어를 해보겠습니다.
게시판 등에 악의적인 스크립트를 넣어 조회자의 세션을 탈취할 수 있는 공격!
바로 XSS(Cross site scripting)입니다.
street필드 마지막에 아래 스크립트 삽입하고 UpdateProfile버튼 클릭
위는 간단한 스트링으로 XSS 공격이 먹힌다는 걸 검증하기 위해서이며 실제 공격자는 아래와 같은 형태로 스크립트를 작성합니다.
이러면 사용자의 쿠키값을 공격자가 원하는 서버로 전송하게 됩니다.
- 피해자의 입장에서 새롭게 로그인을 합니다. Jerry Mouse로 로그인하며 암호는 Jerry입니다.
이제 코드 수정을 해보도록 하겠습니다
SQL인젝션에서 했었던 것처럼 위험도 상(Scary)에서 Normal Confidence의 Potential XSS in Servlet 부분으로 탐지된 것을 확인합니다.
위 취약점을 제거하기 위해서는 외부 입력값에 대한 악의적인 문자열을 제거하는 보안 필터(클래스)를 사용해야 합니다. 필터의 동작 방식은 아래와 같습니다.
- 그 이유는 findbugs가 java파일의 취약점만 탐지가능하고 JSP등은 탐지가 어려운 한계를 가지고 있기 때문입니다.
JSP파일에서 XSS를 방어하는 코딩을 해보겠습니다.
-먼저 http://tomcat.apache.org/taglibs/standard/에서 download -> binaries 디렉터리에서 jakarta-taglibs-standard-1.1.1.zip을 다운로드 받습니다.
압축을 풀고 lib에 있는 jstl.jar, stanard.jar를 WEB-INF하위 lib디렉터리에 놓습니다.
JSTL표현식으로 수정하면..
취약코드 : <%=employee.getAddress1()%>
수정코드 : <c:out value="${employee.getAddress1()}"></c:out>
이것으로 오늘의 강좌를 마칩니다..