본문 바로가기

Kitri_NCS3기 보안과정/Web Hack

170608 크로스사이트 스크립트(XSS) 취약점

사용자는 기본적으로 브라우저를 써서 웹사이트에 요청하는데 그 관계는 신뢰된다. 그렇기 때문에 관련된 애플리케이션이 취약하다면 요청문등에 악성코드를 심어 공격하는 XSS에 취약하다면 심각한 상황이 될것.


XSS는 다른 사용자에게 악성코드를 보낼때 사용한다. 해커는 흔히 URL 요청문에 악성 스크립트를 담아서 정당한 사용자에게 보낸다.

악성코드를 숨겨논 사이트에서 취약점을 찾는다면 사용자가 링크를 눌럿을 때 스크립트는 일단 신뢰할수있는 사이트(사용자가 이용중이던)로 보내진 다음 응답문에 실려진 악성스크립트문이 돌와서 실행이 된다. 기본적으로 사용자 브라우저가 신뢰하는 사이트에서부터 공격이 시작되는셈이다.


공격의 종류 

저장형 XSS공격(stored attack) : 게시판,로그정보,주석등 에 악성코드가 숨어있어서 그 게시판을 이용하면 발동 (영구적으로 저장된 자료로 공격)

반사형 XSS공격(reflected attack) : 에러메세지, 검색결과등 서핑하다가 요청을 하여 응답을 받는 과정을 공격 , 응답메세지에 악성코드를 숨겨놈 


XSS는 입력값의 유효성을 검증하는 루틴에서 집중적으로 사용하는 부호화 및 복호화를 연습하기 좋다.

(공격자는 여러 부호화, 복호화방법을 통해 악성스크립트를 주입하고 방어자는 그에 대한 필터링을 해야하기 때문)

대표적인 복호화 부호화 종류


Base64, URL, HTML, ASCII 16진수, UTF-8, Long UTF-8, 이진수 ,UTF-7, UTF-16



xss 페이로드중에는 다음과 같은것들이 있다.

- 팝업경고창

- SW download and setup

- 브라우저를 다른 url로 돌리기

- 키로거 설치

- 리버스 쉘 호출

- 클라이언트 공격


반사형 XSS 공격 ( reflected attack ) 


두가지 요건

1. 링크를 누르거나, 검색하거나, 또는 애플리케이션에 특정한 어떤 행위를 할 수 있어야함

2. 악성링크를 누르는 시점에 취약한 애플리케이션에 이미 로그인상태





저장형 XSS 공격 ( stored attack ) 


저장형공격은 반사형보다 파괴적이라고 하는데 사회공학적 요건이 갖춰져야 하는 반사형에 비해 순전히 애플리케이션과 상호작용으로의 효과를 볼 수 있기 때문에다. 


1. 링크를 누르는등의 조건부행동이 필요 없다.

2. 인증된 사용자만 접근 할 수 있기 때문에 공격이 일어나기전에 인증이 완료되어있다.

3. 방문하는 모든사람에게 벌어진다. 또한 일회성이아닌 페이지가 호출될때마다 실행되는 특징이 있다.



글쓰기에 악성 스크립트 문을 심었을때 그 페이지를 리프레쉬할때마다 악성 스크립트가 실행되는걸 확인.




공격자는 일반적인 텍스트박스같은곳에 악성스크립트를 주입해놓거나 서버에서 보내는 요청이나 응답에 악성 스크립트를 끼워넣는 방식으로 공격을 하게 된다. 일반적인 텍스트 박스에서 스크립트문을 입력할 시 그 스크립트가 실행이 되는 모습을 확인 할 수있는데. 보호대책으로 필터링등을 걸어놓는 경우에는 <sCRIpt>alert(1)</sCRIpt>등으로 우회하는 방식을 사용한다. 이런 필터링과 우회법이 많이 나와있으니 검색해보자.



document.cookie 를 이용하면 세션식별자를 확인 할 수 있다. 이 식별자를 이용하면 공격자는 피해자인척 가장하며 애플리케이션으로 악성 코드를 보낼 수 도있다. 





download 공격


Burpshuit로 다운로드 할때의 헤더를 인터셉터 해보았다.

main.php?download= 파일 형식으로 작성해서 요청을 던져주면 다운로드파일을 되돌려 주는것같다. 

URL을 조작해서 던져보았다.

서버에 저장되어있던 test파일이 다운받아진다.



upload 공격 


웹쉘을 이용한 공격


<?php echo system($_GET[cmd], $retval;?>을 php파일로 만들어서 업로드 한다.


더미서버에 웹쉘 파일을 올려놓고 cmd 값을 변경해서 요청을 보내보았다.


ls 명령을 날려주니 해당 서버의 upload 디렉토리에 있는 파일들의 리스트를 보여준다.