XSS/XSS

XSS

ragdo11 2024. 6. 20. 00:32

Cross-Site Script, 즉 XSS는 클라이언트 측 스크립트를 삽입하는 공격이다. (Cross인데 X를 쓰는 이유는 css하고 헷갈리기 때문!) 이 취약점이 발생하는 이유는 공격자의 입력값(파라미터)이 그대로 서버에 응답되기 때문이다.

사용자의 입력이 응답에 포함되는 모든 곳에 발생할 수 있으며 웹 브라우저에서 실행되는 공격이기 때문에 크게 신경쓰지 않아 하는 것 같다.

 

하지만 웹 애플리케이션이 XSS에 취약하다면 악의적인 사용자는 URL 요청문에 악성 스크립트를 담아서 정당한 사용자한테 보낸다. 사용자가 링크를 누르면 그 요청은 애플리케이션으로 전달되고 악성 스크립트가 포함된 응답을 사용자에게 회신한다. 이는 강력한 공격이 될 수 있다.

위와 같은 공격의 예시는 Reflected XSS의 공격 방법으로 사회공학적 기법이 같이 병행되서 일어난다. 매력적인 내용으로 사용자에게 보낸 악성 링크를 누르게 만드는 것이다.

 

XSS 취약점을 찾는 방법

1. 우선 사용자의 입력이 응답에 출력되는지 확인한다.

 

2. 사용자의 입력이 응답에 출력이 되는 것을 확인했으면 특수문자를 사용해 본다.

XSS 취약점에서 자주 쓰이는 특수문자 < > ' " 이 4가지를 입력에 넣어본다. 입력에 넣었을 때 < > ' " 그대로 나온다면 이 4가지를 활용할 수 있을 것이고 &lt; &gt; ' " 이런 식으로 나온다면 ' 와 " 만을 이용해서 스크립트를 작성할 수 있다.

&lt와 &gt는 <와 >f를 html editor를 이용하여 html 특수문자를 html entity로 치환해 준 것이다. 브라우저가 문자열 해석에 혼동을 겪지 않도록 변환을 해주는 것인데 이렇게 특수문자를 전부 치환해주면 특수문자를 공격에 활용할 수 없게 된다.

 

3. POC 코드를 삽입해본다.

XSS를 증명하는 방법으로 브라우저에서 코드가 실행될 때 자바스크립트로 경고 박스를 띄운다.

위와 같이 경고창으로 XSS 취약점이 있다는 것을 알 수가 있다. 이 경고창 자체가 악성이라기보다 웹 애플리케이션이 사용자 브라우저로 회신할 때 자바스크립트가 삽입되었음을 나타내는 것이다. 이를 POC(Proof Of Concept) 코드라고 한다.

 

XSS로 가능한 공격들

  • 세션 아이디 가로채기
  • 피해자 브라우저를 악의적인 URL로 리다이렉션
  • 키로거 설치
  • 암호화폐 채굴
  • 리버스 쉘 호출

 

XSS의 종류

  • Stored XSS -> 서버에 저장
  • Reflected XSS -> 서버가 아닌 URL에 저장. 피싱
  • DOM Based XSS -> URL Fragment. 조립