XSS 공격 기법
OWASP Top 10에 드는 웹 해킹 기법에 대한 복습
OWASP Top 10
- 3-4년에 한번씩 갱신되는 보안 위험 표준 가이드라인
- 바뀌는 이유? > 환경과 취약점은 변화되므로 업데이트가 필요. 있다가 없어지는 것은 빈도가 서서히 줄어듦을 의미한다.
🔍 Cross Site Scripting(XSS)

- 웹 사이트에 악의적인 스크립트를 삽입하는 공격 기법
- 스크립트가 있는 게시글을 열람하면, 스크립트 발생 -> 사용자 쿠키가 해커에게 전송 -> 세션ID가 포함된 쿠키를 탈취하여 해당 계정으로 로그인
<script>alert(0)</script>와 같은 간단한 스크립트로 XSS 취약한지 확인- 웹 서버에 띄워진 사이트에 악의적인 스크립트가 담긴 글 작성
- 관리자/사용자 접근 -> 아무런 반응(action)이 없음
- 스크립트 작동하여 세션이 해커의 서버로 들어오게 됨
- 서버를 모니터링하여 들어온 세션을 copy
- 해커의 웹 브라우저에 쿠키를 구워 정상 웹 서버에 사용함
- 사용자 권한 등 탈취
직접 실습해보았다.
1. Stored XSS(지속형 공격)
stored XSS를 통해 확인해보았다.
stored XSS는 지속형 공격. 등록한 글이 DB에 저장되어 지속적으로 공격하므로, 한번의 공격으로 수많은 피해를 입힐 수 있다는 특징이 있다.
2. Reflected XSS(반사형 공격)
reflected XSS로도 해보았다.(취약점 발견완료)
Reflected XSS는 반사형 공격.
사용자에게 입력받은 값을 서버에서 되돌려주는 곳에서 발생한다.
검색창에 검색어(입력값)이 그대로 드러나는 곳 등에 삽입되면 서버가 응답할 때 스크립트가 실해된다.
악의적인 스크립트를 살펴보면 검색 인자로 작성한 스크립트를 넘겨준다.
DOM(Document Object Model) XSS
DOM?
- HTML 및 XML 문서에 접근하는 방법을 표준으로 정의하는 문서 객체 모델
- 즉, 구조화된 문서를 표현하는 방식(W3C 공식 표준)
DOM XSS

- 접속하면 스크립트가 실행되도록 하는 URL을 사용자에게 전달
- 클릭
- 서버로부터 HTML 문서를 전달 받게 됨
- 사용자 브라우저가 받은 HTML 문서를 읽으면서 필요한 스크립트를 실행하는 중에 악성스크립트 동작(사용자가 요청한 브라우저 해석단계에서 동작)
- 정보 탈취
보안에 취약한 js 코드 사용X 클라이언트 입력 값 검증 로직 추가 필요!!
aaaa 값 대신 악의적 스크립트를 넣으면 충분히 Dom Based XSS가 가능해짐.
정리
1. Stored XSS
- 스크립트가 서버에 저장
- 악성 코드가 서버측 저장소(DB)에 저장
- 스크립트 서버 저장 -> 방문하는 모든 사용자는 피해를 봄
2. Reflected XSS
- 악성 스크립트가 요청으로 전달되고, 서버가 반사하여 응답함
- URL 쿼리 파라미터, 요청 헤더, POST 데이터 등에 실려 전달됨
- 악성 URL을 클릭하면 서버는 URL의 데이터를 포함한 응답을 보내어 스크립트 실행됨
- 직접 URL 클릭, 악성코드 복사하여 실행할 때 발생
3. DOM-based XSS
- 스크립트가 클라이언트 측에서 처리
- 웹 페이지의 DOM을 조작하여 실행 됨.
- 서버는 악성 코드를 포함한 응답을 반환하지 않음
- 서버 응답에 의존하지 않기 때문에 서버 측 수정 없이 클라이언트 측에서만 해결해야 하는 공격기법
Stored XSS ➡️ 스크립트가 서버에 저장되어 나중에 다른 사용자에게도 전달
Reflected XSS ➡️ 스크립트가 요청의 일부분으로 반사되어 즉시 실행
DOM-based XSS ➡️ 클라이언트 측에서 DOM을 통해 스크립트 실행
🛡️ XSS 보안 대책
- 특정 문자열 제거 및 치환
- 불필요한 태그/스크립트 제거
- DOM object 재구성
- html5 등 주기적인 패턴 업데이트
- HttpOnly 권장
Written on July 16, 2024