

1) 사용자 입력이 웹 서버에 저장되는 요청 식별
2) 테스트 문자열 보내기
3) 테스트 문자열이 응답 내에 표시되는 모든 Endpoint 식별
4) 테스트 문자열이 표시된 위치의 응답 소스코드 분석
5) 입력값으로 스크립트 전달 및 실행 여부 확인
6) 필터링으로 인한 실패시 우회 시도 (대소문자 구분, 재귀적 필터링 여부 등)

흔한 게시판의 모습이다. 텍스트 박스에 문자열을 입력하면 입력한 정보를 하단에 리스트 형태로 표시해준다. 그렇다면 텍스트 박스에 자바스크립트 코드를 넣어도 실행이 되는지 확인해보자.

마찬가지로 쿠키 값을 뽑아내는 데에 성공했다.

해당 사이트의 URL 주소에 주목해보자.
영화 장르를 고르고 Like 를 누르면 해당 사이트의 URL이

http://192.168.184.132/bWAPP/xss_stored_2.php?genre=horror&form=like
값으로 바뀐다.
이 시점에서 URL에서 장르 부분에
<script>document.write(document.cookie)</script>
를 넣고 전송하기 전에 burp suite를 켜고 어떤 패킷 정보가 전송되는지 확인해보자

장르 부분에 사용자가 넣은 스크립트 코드가 들어간 채로 전송된 것을 확인한 후에 패킷을 놔주고
Session Management - Cookies(HttpOnly) 에 들어가서 cookie 값을 확인하면

movie_genre 부분에 쿠키 값이 노출되는 것을 확인할 수 있다.

Referer 요청 헤더 검증

Anti-CSRF 토큰 : 사용자 세션을 추적하기 위해 기존의 세션 토큰 이외에 추가적인 임의의 토큰을 사용하는 방법. 사용자의 웹 브라우저와 서버만 알고 있으며 주로 사용자가 어떤 웹 페이지를 로딩할 때 숨겨진 폼 필드에 저장되었다가 폼이 제출될 때 서버로 다시 전송됨

흔한 비밀번호 변경 사이트다. 기존 비밀번호였던 bug 에서 1234로 바꾸고 패킷을 잡아보자.

우리는 여기서 ip와 GET 정보만을 활용해 Blog에 누르기만해도 사용자가 원하는 비밀번호로 바뀌는 하이퍼링크 버튼을 하나 만들 것이다. 마저 포워딩을 한 후
<a href = "http://192.168.184.132/bWAPP/csrf_1.php?password_new=1234&password_conf=1234&action=change">csrf</a>
코드를 블로그에 넣고 포스팅을 해보자.

이렇게 csrf라는 버튼이 생겼다. 비밀번호를 다시 bug로 바꾼 후 저 버튼을 눌렀을 때, 1234로 바뀌어 bug 라는 비밀번호로 로그인이 안되는 것을 확인할 수 있다.

