XSS(Cross-Site Scripting)
※ XSS(Cross-site Scripting)란?
XSS(Cross Site Scripting)는 공격자에 의해 작성된 스크립트가 다른 사용자에게 전달되는 것이다.
다른 사용자의 웹 브라우저 내에서 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나,
웹 사이트를 변조하거나 혹은 악의적인 사이트로 사용자를 이동시킬 수 있다
2. 발생 가능한 위치
파라미터 데이터가 응답에 포함되는 모든 곳(사용자의 입력이 응답에 포함되는 곳)
3. 취약점 찾는 단계
1) 사용자 입력에 따른 응답이 출력되는지 확인한다.
2) < ' " > 4가지 특수문자를 사용할 수 있는지 확인한다.
위 특수문자를 입력에 넣었을 때 그대로 출력된다면, 해당 문자들을 사용하여 공격에 활용할 수 있다.
하지만 위 특수문자들이 공격에 사용되는 것을 방지하기 위해 html editor를 이용하여 html 특수문자를
html entity로 치환하는 경우, 공격에 활용할 수 없게 된다. 예로 <가 <, >가 >로 치환된다면 우리는
<와 > 특수문자를 공격에 사용할 수 없고, ' " 이 2가지 특수문자만을 사용하여 공격을 할 수 있게 된다.
3) POC(Proof Of Concept) 코드 삽입
브라우저에서 웹 페이지를 불러올 때 삽입한 POC를 통해 경고문을 띄울 수 있다면 XSS 취약점이
있다는것을 알 수 있다. 회신된 웹 페이지에 우리가 입력한 javascript가 삽입됐다는 것이다.
<HTML Entity>
4. 스크립트 삽입 전략에 따른 종류
1) Stored XSS : 서버에 스크립트 저장
- 보통 게시판, 마이페이지, 닉네임 변경 페이지를 사용하여 공격
- 서버에 스크립트를 저장하기 때문에 해당 페이지를 열람하는 모든 사용자가 공격 대상
2) Reflected XSS : 서버에서 스크립트 반사
- 응답되는 페이지에 삽입한 스크립트가 포함됨
- 보통 검색창에서 공격
- URL를 변조하여 특정 유저를 피싱(Phishing)하여 저격하는 것이 가능
3) DOM Based XSS : 클라이언트에서 스크립트 조립
- document.write() 함수 내에서 조립됨