Reflected XSS

개념

보낸 페이로드가 곧바로 Rseponse에 반사되어 실행되는 종류의 XSS이다.

Impact

일반적으로 공격 당한 사용자를 완전히 손상시킬 수 있다. 또한 다음과 같은 작업을 수행할 수 있다.

  • 해당 유저가 어플리케이션에서 할 수 있는 작업
  • 해당 유저가 볼 수 있는 정보를 훔쳐보기
  • 해당 유저가 수정할 수 있는 정보를 수정하기
  • 다른 사용자에게 공격 퍼트리기

악의적 페이로드는 링크를 이용해 퍼트리거나, 컨텐츠를 올릴 수 있는 다른 웹사이트를 이용해 퍼트린다. 공격을 하기 위해 외부 전달 방법(링크 등을 클릭하게 하는 등)이 필요하므로 일반적으로 Stored XSS보다는 덜 심각하다.

종류

반사되는 데이터에 따라 분류할 수 있다. 자세한 설명은 xss 참고, 여기서는 참고 문제 링크만 따로 정리했다.

HTML tags 사이에 XSS

참고 문제

HTML 태그 속성에 XSS

참고 문제

Javascript에 XSS

기존 코드 종료시키기

참고 문제

Javascript string 부수기

참고 문제

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만 가능한 취약점의 경우 바운티를 잘 주지 않기도 한다.

참고


tags: xss, web hacking