Job SSul Series 1 : 해킹 방어 실습 - EP7 XSS

in #steemit6 years ago

안녕하세요.
해킹과 방어 시리즈를 연재하고 있는 Ziqon입니다.
이번엔 그 두번째 공격과 방어를 해보겠습니다.
게시판 등에 악의적인 스크립트를 넣어 조회자의 세션을 탈취할 수 있는 공격!
바로 XSS(Cross site scripting)입니다.

  • XSS메뉴에서 Tom Cat 계정으로 로그인하기 (암호 : tom)

  • ViewProfile 버튼 클릭 후 EditProfile클릭

  • street필드 마지막에 아래 스크립트 삽입하고 UpdateProfile버튼 클릭

위는 간단한 스트링으로 XSS 공격이 먹힌다는 걸 검증하기 위해서이며 실제 공격자는 아래와 같은 형태로 스크립트를 작성합니다.

이러면 사용자의 쿠키값을 공격자가 원하는 서버로 전송하게 됩니다.

  • 피해자의 입장에서 새롭게 로그인을 합니다. Jerry Mouse로 로그인하며 암호는 Jerry입니다.

  • 로그인 후 , 직원 목록에서 tom cat의 프로파일을 조회합니다.

  • 해킹되었다는 Alert창이 뜹니다.

이제 코드 수정을 해보도록 하겠습니다

  • SQL인젝션에서 했었던 것처럼 위험도 상(Scary)에서 Normal Confidence의 Potential XSS in Servlet 부분으로 탐지된 것을 확인합니다.

  • Out객체들은 입력값을 출력하는 부분으로 XSS의 취약점이 발생하는 부분입니다.

  • 위 취약점을 제거하기 위해서는 외부 입력값에 대한 악의적인 문자열을 제거하는 보안 필터(클래스)를 사용해야 합니다. 필터의 동작 방식은 아래와 같습니다.

  • 아래 path에 클래스를 생성합니다.

  • 클래스 이름은 securityFilter로 합니다.

  • XSS에 사용되는 "<", ">"문자열을 Null로 만들도록 코딩해보겠습니다.

  • 이제 만든 필터를 써볼까요? 아까 취약점이라고 발견된 곳에 돌아가 아래와 같이 필터를 적용합니다.

-그러나 여전히 차단되지 않고 있습니다.

  • 그 이유는 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디렉터리에 놓습니다.

  • 이제 취약한JSP파일을 열어보겠습니다.

  • JSTL표현식으로 수정하면..
    취약코드 : <%=employee.getAddress1()%>
    수정코드 : <c:out value="${employee.getAddress1()}"></c:out>

  • 팝업이 차단되고 정상적으로 표시되는 것을 볼 수 있습니다.

이것으로 오늘의 강좌를 마칩니다..