XSS 2
지난번엔 Stored XSS를 정리했다.
Stored XSS는 서버에 스크립트를 저장하는 방식이므로 광역으로 시전 할 수 있다.
단점으로는 공격대상을 지정할 수 없고, 기록과 흔적이 남는다는 것이다.
그렇다면 스크립트를 서버에 저장하는 것이 아닌 값을 다시 받아오는 방법은 어떨까
이러한 방법으로 reflected XSS가 있다.
1) Reflected XSS
reflected XSS는 말 그대로 반사시킨다.
입력값을 받으면 그것을 다시 출력시켜준다.
대표적으로는 검색창, 아이디 중복 검사가 있다.
게시글을 검색하면 '@@@@'에 대한 검색결과 이런 식으로 값을 다시 받아온다.
아이디 중복 검사를 하면 '@@@'은 사용가능한 아이디입니다.라고 값을 다시 받아온다.
reflected XSS는 이용자의 요청에 의해 발생하는 공격이다. 따라서 GET으로 가능한지 확인을 해야 한다.
또한 사회공학기법을 같이 이용한다. ex) 연봉 재협상, 긴급공지 등 눌러봐야 하는 것처럼 유도
페이지에서 POST가 아닌 GET으로 전달을 하게 된다면 그곳은 reflected XSS를 사용할 수 있다.
가장 먼저 페이지에서 값을 입력하면 값이 출력되는 곳을 확인한다.(버프스위트 이용)
값을 입력했을 때 그대로 나오는지 확인을 하고
그대로 나오면 특수문자를 넣어본다. < " ' >
저기 있는 4개의 특수문자를 입력해서 값이 출력되는 것을 확인하고 필터링이 되는지 그대로 출력이 되는지 살펴본다.
버프스위트의 리피터에서 출력값을 확인했을 때
<script>'출력하는 값'</script>
이러한 모양처럼 스크립트 안에 출력하는 값이 있으면 <script> 태그를 안 써도 괜찮고
코드내용에 맞춰서 공격용 스크립트를 수정해 주면 된다.
스크립트 수정 시 제일 먼저 alert창을 띄워보고
alert창이 띄워지면 이제 공격용 코드를 만들면 된다.
2) DOM Based XSS
DOM이란 Document Object Model이고 임의의 Document 객체를 삽입하여 실행시키는 공격이다.
<img src=x onerror="alert(1)">]
예를 들어서
img src가 x가 아니면 onerror을 실행시키는데 이것이 alert창이면 alert대신에 공격용 코드를 입력해서 공격을 할 수도 있다.
공격 방식은 Reflected XSS와 같다.
출력창에 같은 값이 나오는지 확인하고
특수문자를 집어넣어보고
스크립트를 하나하나 넣어가면서 확인을 한다.
확인을 하면서 alert창을 띄워본다.
이러한 방식으로 진행하면 된다.