XSS 정리
*xss란?
클라이언트 측에 코드를 삽입하는 공격
1. 서버에 스크립트를 저장 -> stored
2. 서버에 스크립트를 저장하지 않는 방식 => reflected,dom,universal
-Stored XSS
장점: 광역 시전 가능
단점: 특정인, 기록, 흔적이 남는다.
-Reflected XSS
XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS
게시판 서비스에서 작성된 게시물을 조회하기 위한 검색창에서 스크립트를 포함해
검색하는 방법이 있다. 이용자가 게시물을 검색하면 서버에서는 검색 결과를 반환한다.
검색 결과를 응답에 포함하면 검색 문자열에 스크립트가 포함되어 있다면 해당 취약점이 발생할 수 있다.
GET 방식으로 전달이 되어야한다.
Reflected XSS를 사용하는 이유는 공격목표의 세션을 탈취하거나 컨트롤하기 하기 위해서이다.
도메인 별 쿠키값이 모두 다르기 때문에 별도로 공격해야한다.
-DOM Based XSS
XSS에 사용되는 악성 스크립트가 URL 에 삽입되는 XSS
1) 페이지 출력을 확인한다.
2) javascript의 객체를 생성하는 부분을 확인한다.
문제풀이 정리

해당 문제에서 xss를 이용하여 alert를 표시해보자.
가장 먼저 해야할 것은 해당 문제에 페이지들을 확인해보는 것이다.
Reflected XSS는 GET으로 공격이 가능하기때문에 해당 문제 속에서
GET요청이 통하는 페이지가 있는지 확인해야한다.
페이지의 구성을 살펴보자.

기본 페이지에서는 3개의 기능이 존재한다. 마이페이지와 공지 사항으로 이동하는 버튼과 로그아웃 버튼이다.
마이페이지에서 RXSS가 가능한지 살펴보자.

mypage에서는 파라미터를 받는다. 이걸 이용해서 RXSS 공격이 가능한지 확인한다.

해당 요청을 살펴보면 user 파라미터가 존재한다. 여기에 특수문자와 js가 사용가능한지 확인해야한다.
user에 1234라는 값을 넣고 응답을 살펴본다.

검색기능을 이용하여 출력되는것이 있는지 확인했지만 매칭되는것이 없다.
다음 페이지로 넘어가 공지사항을 확인해보자.

해당 페이지 응답을 살펴보면 마땅히 RXSS를 실행해볼것이 없다는걸 알 수 있다.
하지만 검색기능이 존재한다. 여기에 임의의 값을 넣어본다.

그러면 alert창이 뜨며 입력한 값이 없다는것을 알려준다. 입력한 값이 이곳에 출력된다는것을 확인하였다.
응답을 살펴보자.

응답을 살펴보니 이곳에 javascript가 사용되는것을 볼 수 있다. 이것을 이용하여 RXSS를 실행해보자.

요청을 살펴보면 POST 방식으로 값을 전달한다는 것을 알 수 있다. 하지만 RXSS는 GET을 이용하는 취약점이다.
그렇다면 해당 요청에서 GET이 사용가능한지 알아봐야한다. 우선 POST를 GET으로 변경하고
파라미터의 값을 ?로 이어 붙여본다.

GET으로도 정상작동한다. 그렇다면 파라미터 중 어떤것이 값을 출력하는 변수인지 확인봐야한다.
확인해보면 board_result에 값을 변경하면 alert의 값도 변경되는것을 알 수 있다.
이를 이용해 alert의 출력을 변경해보자.

hello라는 문자열을 출력하도록 변경하고 뒷부분은 주석을 이용해 지워버렸다.

응답을 살펴보면 뒷부분이 주석 처리 된것을 확인할 수 있다.

해당 값을 url에 입력해 결과를 확인해보면 hello가 출력된다.