XSS 취약점은 있으나 페이로드 길이가 충분하지 않은 경우
최근에 수술이 있어서 하루죙일 누워만 있느라 뭔가 하질 못했다. 누워만 있는게 더 힘들긴 하더라
이번에 작성하려고 했던 게시물은 페이로드가 제한되있을 때의 XSS 공격이다.
다만 이게 하고 나니까 좀 고민이 되는 부분이 있었는데 고건 아래에서 체크해보자!
아래와 같이 게시판 검색 등의 기능에 XSS 취약점이 있는 경우
얼마든지 원하는 악성 스크립트를 사용하여 원하는 결과를 볼 수 있다. 다만 사용할 페이로드의 길이에 제한이 걸린다면??
<input type="text" ... maxlength="20"/>
maxlength를 20으로 설정하여 20글자까지만 입력이 되게 만들면 아래와 같이 간단한 POC 코드 하나도 제대로 입력할 수 없다.
그렇기 때문에 비교적 페이로드의 길이 제한이 자유로운 게시글 작성 쪽에서 XSS 공격을 시도한다. CSRF와 같이 사용하여 게시글 검색 부분의 페이로드 20글자 제한을 우회 시도한다.
이곳엔 길이 제한이 없으므로(있다고 해도 게시판 글이라 충분함) 게시판 검색 부분의 20글자 제한을 우회하여 POC 코드를 삽입할 수 있다.
그래서 결과는??
성공!! 했지만 생각해볼 점이 두 가지 있음.
- 첫 번째. 눈치 빠른 사람이거나 공부해보신 분들은 알겠지만 내 게시판은 검색 결과가 URL에 묻어나온다.
그렇기 때문에 저렇게 input 태그에 입력을 하게되면 20자 제한으로 페이로드 작성에 문제가 생기지만 URL에 직접 입력할 경우 이 역시 우회가 가능해진다. 물론 글자 수 제한을 하게 되면 공격에 타격이 생기겠지만 이러한 경우는 글자 수 제한이 아니라 다른 방법을 사용해봐야 함을 알고 있어야 되겠다.
대표적으로 게시판 글 검색 시 URL에 묻어나오는 곳이 티스토리, 묻어나오지 않는 곳이 네이버가 있다.
- 두 번째. 우회하는 것은 알겠는데 이게 무슨 의미가 있을까?
XSS 취약점이 있는 두 페이지. 하나는 XSS 취약점이 있으나 페이로드 길이 제한으로 공격을 할 수 없고 다른 한 페이지는 제한이 없어 공격이 자유로운 경우 굳이 우회할 필요 없이 제한 없는 페이지에서 공격을 하면 되는거 아닌가?
이 글을 작성하면서 중간에 이런 생각이 문득 들었고, 갑작스레 멍해지면서 굉장히 많은 시간을 보냈다. 아무리 고민해봐도 뭔가 딱 떠오르는 이유가 없었기 때문에..
그나마 좀 알아보고 떠오르는 것을 적자면
1. 제한이 있는 페이지에 특정 기능을 공격 목표로 두고 있는 경우
이러한 경우라면 우회하여 제한된 페이지에서 공격을 하는 것이 당연히 맞다. 지금은 게시글 작성 부분의 XSS를 이용하여 우회를 했지만 만약 XSS를 이용할 부분이 인증된 사람만 접근하는 곳이 아니며 제한된 페이지는 인증된 사람만 접근하는 경우, 추가적인 공격(chaining)을 이용하려면 제한된 페이지에 공격을 시도해야 한다.
2. 특정 페이지에서 공격이 지속될 경우 공격을 알아차릴 수 있음
3. 여러 공격 루트의 확보