에디터는 여러가지가 존재한다.
Smart Editor, CK Editor, Cross Editor, Namo Editor, dext5 등등
진단자 입장에서는 에디터의 존재를 파악해야 하며 에디터에서 여러가지 취약점을 발생시킬 수
있기때문에 에디터에서 많은 공격 테스트를 진행하게 된다.
여러 에디터 중 스마트 에디터를 대표적으로 다뤄보려 한다.
에디터들의 버전별로 각종 취약점이 존재하기 때문에 버전을 파악하는 것도 중요하다.
에디터의 우측 하단을 보면 Editor 모드와 HTML 모드가 존재한다.
먼저 해당 모드의 차이점이 무엇인지 알고 있어야 한다.
먼저 일반 Editor모드로 테스트 스크립트를 입력할 시 특수문자가 HTML인코딩 되어 입력되는 것을 확인할 수 있다. 따라서 Editor모드에서는 HTML을 사용할 수 없도록 제한되어 있는 모드임을 알 수 있다.
그럼 애초에 처음부터 HTML모드로 테스트 스크립트를 삽입하면 되지 않을까?
그렇다. 하지만 이번 에피소드에서는 HTML모드로 스크립트 삽입 시 특정 스크립트, HTML 태그가 사용 불가능 하도록 필터가 되어있는 여러 케이스를 보면서 우회하는 방법과 보안 하는 방법을 다루려고 한다. 대부분의 에디터는 비슷하기 때문에 다른 에디터에서도 적용이 가능하다.
가장 기본적인 스크립트 구문을 삽입 후 게시글을 작성하게 되면 XSS취약점에 대응하기 위해 <script>가 모두 제거되고 alert(1)만 남아있는 것을 확인할 수 있다.
대소문자를 섞거나 scr SCRIPT ipt 와 같은 방식으로 스크립트 구문을 두번 넣어 한번 삭제되고 다시 조합 되었을 때 동작할 수 있는 약간의 속임수를 사용해볼 수 있다.
여기서 에디터들의 목적을 알아둘 필요가 있다.
에디터는 사용자들이 UI 방식으로 쉽게 HTML을 편집하고 사용할 수 있도록 편의를 제공하는 목적이 있다. 그렇다면 사용자들도 사용할만한 img, font와 같은 태그는 사용이 가능할 것이다.
img 태그를 사용하게 되면 img는 적용이 되어 사용이 가능하지만 하위에 onclick="alert(1)"이 삭제가 된 것을 확인할 수 있다. 이런 경우에는 alert를 대신해 사용할 수 있는 핸들러를 이용해볼 수 있다.
alert대신 prompt를 사용하고 이미지를 클릭하니 팝업창이 동작하는 것을 확인할 수 있다.
prompt외에도 confirm, href 등을 이용하여 우회할 수 있음을 알 수 있다.
그렇다면 특정 이벤트 핸들러를 제한하는 경우는 어떻게 할까?
예를 들어 onclick, onmouseover, onmouseout, onfocuse 등의 이벤트 핸들러는 사용하지 못하게 제한하는 방법도 자주 사용하는 방법중에 하나이다.
하지만 이방법은 효율이 좋지 못하다. 이유는 이벤트 핸들러의 종류는 80개가 넘기 때문에 얼마든지 검색하여 다른 핸들러로 우회할 수 있다.
간단 한 예로 onwheel 이벤트를 사용하면 해당 이미지 위에서 마우스 휠을 동작할 경우 동작한다.
그래서 이렇게 이벤트 핸들러를 제한하는 방식으로 조치가 하고싶다면
HTML태그 사용 시 하위의 이벤트 핸들러 중 on이라는 단어를 다른 단어로 치환하는 방식을
사용하기를 권장한다.
HTML 태그를 사용하고 하위 이벤트 핸들러의 on 부분을 2-로 치환하는 로직을 사용하는 이미지