Reflected XSS
- 이전에 배웠던 Stored XSS와는 달리 서버에는 저장이 되지 않는 공격
- Reflected(반사)라는 뜻은, 클라이언트 측에서 입력한 정보가 다시 클라이언트 측에 나타나는 것을 의미한다.
- 예시)
아이디 중복 검사시, 'azurp158은 사용가능한 아이디입니다.'
사과에 대해서 입력시, '사과에 대한 검색 결과'
- 이와 같이 사용자가 입력한 값이 출력이 되는데, 이 떄, script를 넣어서 script를 실행할 수 있다.
- 이러한 방식은 사회공학기법과 함께 사용이 된다. 애초에 사용자가 이러한 값을 넣을리가 만무하기 때문.
URL?value=<script>alert(1)</script>
- 위와 같이 URL을 짜고 short URL을 이용해서 임의의 짧은 URL로 만든다.
- 그리고 그 short URL을 누르면 해당 페이지로 이동하면서 알림창이 뜨게 된다.
- 이러한 값을 전달하는 방식 때문에 GET 방식으로만 가능하다. POST로 값을 전달하는 경우에는 Burp suite에서 GET으로 바꾸어 전달해서 값이 바뀌는 지 확인을 하고 사용하면 된다.
- 왜 각 공격마다 다른 URL을 사용하냐하면 URL 사이트의 서로 각기 다른 Session을 탈취하기 위함이다.
DOM based XSS
- Dom based XSS: DOM(Document object Model) 객체를 제어하는 과정에서 발생하는 XSS 공격.
- 해당 공격은 Reflected XSS와는 다르게 서버로 요청을 보내지 않아도 스크립트를 심을 수 있다.
- javascript 코드를 만나 해당 스크립트가 실행이 된다.
- 위와 같이 indexOf에서 해당 공격이 나타난다.
- Reflect XSS와 다르게 찾기 힘들다.
- 찾는 방법
1) 화면을 잘봐라.
2) javascript, new Image();, document.inner 를 잘 살펴보아라
XSS가 통하지 않는 경우와 그 파훼법
<p> 태그
<p>
안녕하세요?
</p>
- <p> 안에 있다면 script가 실행되지 않는 경우가 있다.
- 아래와 같이 </p> <p> 태그를 사용한다.
<p> </p>
<script> </script><p>
</p>
<p>
<img src = x onerror="alert(1)">
</p>
+ 필터링
<img src = x onerror="alert(1)">
- 위와 같이 입력했을 때 아래와 같이 출력이 되는 것을 알 수 있다.
<img+src+=+x+onerror="alert(1)">
- 이와 같은 경우 %20을 넣어 필터링을 피한다.
<img%20src%20=%20x%20onerror="alert(1)">
- XSS는 보물 찾기이다. Reflected XSS의 경우 모든 페이지, 모든 파라미터에서 일어날 가능성이 존재하기 때문이다.