<aside> 💡
2주차에 이은 https://dreamhack.io/lecture/paths/web-hacking-fundamental 나머지 코스 진행
</aside>
| Stored XSS | 악성 스크립트가 서버에 저장되고, 서버의 응답에 담겨오는 XSS |
|---|---|
| Reflected XSS | 악성 스크립트가 URL에 삽입되고, 서버의 응답에 담겨오는 XSS |
| DOM-based XSS | 악성 스크립트가 URL Fragment에 삽입되는 XSS (Fragment는 서버 요청/응답에 포함 X) |
| Universal XSS | 클라이언트 브라우저 혹은 브라우저 플러그인에서 발생하는 취약점, SOP 정책 우회 가능 |
자바스크립트(JS)는 웹 문서의 동작을 정의하기에, 단순한 이벤트 구현뿐만이 아니라 웹 브라우저에 저장된 세션 및 쿠키 등을 통해 상호작용 없이도 이용자 권한으로 정보 조회 및 변경 등이 가능하다.
즉 웹 페이지 조작과 웹 브라우저의 위치를 임의 주소로 옮기는 등의 행위도 가능하다.
xss-2 문제를 풀다가 정리가 필요할 것 같아 정리를 해 둔다.
DOM은 브라우저가 HTML 문서를 트리 구조로 표현해 놓은 객체 모델, 브라우저의 프로그래밍 인터페이스이다. 자바스크립트는 이 DOM 트리를 통해 요소 추가·삭제, 속성 변경, 텍스트 변경 등을 수행하며 화면을 동적우로 바꾼다.
DOM-based XSS에서 말하는 DOM은 해당 트리와 그 위에서 동작하는 Client Script 환경을 뜻한다. 즉 공격 페이로드가 서버 응답 HTML이 아닌, 브라우저 안의 DOM 환경이 조작되면서 실행되는 유형의 페이로드인 것이다.
HTTP 응답 자체는 변하지 않지만, 클라이언트 측 JS가 URL, 해시, LocalStorage 같은 값을 읽어 DOM에 쓸 때 필터링이 없으면 공격자가 넣은 스크립트가 DOM 내부에서 실행되는 형식이다.