Reflected XSS
개념
보낸 페이로드가 곧바로 Rseponse에 반사되어 실행되는 종류의 XSS이다.
Impact
일반적으로 공격 당한 사용자를 완전히 손상시킬 수 있다. 또한 다음과 같은 작업을 수행할 수 있다.
- 해당 유저가 어플리케이션에서 할 수 있는 작업
- 해당 유저가 볼 수 있는 정보를 훔쳐보기
- 해당 유저가 수정할 수 있는 정보를 수정하기
- 다른 사용자에게 공격 퍼트리기
악의적 페이로드는 링크를 이용해 퍼트리거나, 컨텐츠를 올릴 수 있는 다른 웹사이트를 이용해 퍼트린다. 공격을 하기 위해 외부 전달 방법(링크 등을 클릭하게 하는 등)이 필요하므로 일반적으로 Stored XSS보다는 덜 심각하다.
종류
반사되는 데이터에 따라 분류할 수 있다. 자세한 설명은 xss 참고, 여기서는 참고 문제 링크만 따로 정리했다.
HTML tags 사이에 XSS
참고 문제
- Portswigger-Reflected XSS into HTML context with nothing encoded
- Portswigger-Reflected XSS into HTML context with most tags and attributes blocked
- Portswigger-Reflected XSS into HTML context with all tags blocked except custom ones
- Portswigger-Reflected XSS with event handlers and href attributes blocked
- Portswigger-Reflected XSS with some SVG markup allowed
HTML 태그 속성에 XSS
참고 문제
- Portswigger-Reflected XSS into attribute with angle brackets HTML-encoded
- Portswigger-Reflected XSS in canonical link tag
Javascript에 XSS
기존 코드 종료시키기
참고 문제
Javascript string 부수기
참고 문제
- Portswigger-Reflected XSS into a JavaScript string with angle brackets HTML encoded
- Portswigger-Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped
- Portswigger-Reflected XSS in a JavaScript URL with some characters blocked
Javascript 템플릿 리터럴에 XSS
참고 문제
찾는 법
모든 Entry point를 테스트한다
모든 HTTP 리퀘스트 Entry point를 테스트한다. URL 쿼리 문자열과 body, URL 파일 경로, HTTP 헤더 등을 체크한다. 어떤 XSS는 특정 HTTP 헤더를 포함할 때만 트리거되므로, 이 또한 조사한다.
임의의 알파벳-숫자를 입력한다
각 Entry point에 대해 고유한 랜덤값을 입력하고, 입력값이 반사되는지 확인한다. 값은 대부분 입력 유효성 검사를 견딜 수 있어야 하므로, 짧은 알파벳과 숫자 조합을 이용한다. 하지만 응답 내에서 우연히 일치하지는 않을 만큼의 길이어야 한다. 일반적으로 8자의 알파벳-숫자 조합이 이상적이다.
Burp Intruder의 grep 페이로드 옵션을 이용하면 반사된 값이 있는지 자동으로 표시할 수 있다.
반사되는 곳의 context를 파악한다
값이 반사되는 위치를 보고, 어떤 용도인지 등을 파악한다. HTML 태그 안의 텍스트이거나, 따옴표로 묶일 수 있는 태그 속성, 자바스크립트 문자열 등이 될 수 있다.
후보 페이로드 테스트
반사값이 context를 기반으로 가능성이 있는 페이로드를 테스트한다. 효율적인 작업 방법은 요청의 원래 임의 값을 그대로 두고, 후보 XSS 페이로드를 그 전후에 배치하는 것이다.
Burp Repeater를 이용하면 편하다.
대체 페이로드 테스트
페이로드가 수정되거나 필터링 될 경우, 입력 유효성 검사를 우회하는 페이로드를 테스트한다.
브라우저에서 테스트
찾은 페이로드를 실제 브라우저에서 테스트한다.
기타
self XSS
self XSS는 reflected XSS와 유사하지만, URL로 접근한다고 트리거되지 않거나, cross-domain를 통해 트리거될 수 없다. 피해자가 브라우저에서 XSS 페이로드를 제출하는 경우에만 취약점이 트리거된다. 일반적으로 공격자가 제공한 입력을 브라우저에 붙여 넣도록 사회공학적으로 설계해야 한다. self XSS만 가능한 취약점의 경우 바운티를 잘 주지 않기도 한다.
참고
- portswigger academy
- portswigger academy - reflected
- portswigger academy - context에 따라 분류
- portswigger academy - cheatsheet
tags: xss, web hacking