TILDA_16 2023. 5. 13. 06:22

지난번엔 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창을 띄워본다.

 

이러한 방식으로 진행하면 된다.