학습개요

XSS(Cross-Site Scripting)은 유명한 공격기법 중의 하나로 웹 애플리케이션 등지에서 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우, 공격자가 입력이 가능한 폼에 악의적인 스크립트를 삽입하여 공격 대상자의 PC에서 악의적인 행위를 수행하도록 만든 취약점이다. 본 실습에서는 1차 텀 프로젝트의 수행 내용인 Fuzzing으로 생성된 결과를 이용해 XSS로 실제로 공격을 수행하여 악의적인 행위를 시행 가능하다는 것을 확인하는 것까지 진행한다.

학습내용

. XSS에 대해 이해한다.

. XSS를 위한 Dalfox 툴 사용법을 이해한다.

 

학습내용 1 XSS이란?

XSSCross-Site Scripting의 약자로 웹 응용에 존재하는 취약점을 기반으로 웹 서버와 클라이언트 간 통신 방식인 HTTP 프로토콜 동작 과정 중에 발생한다. XSS 공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에서 실행되면서 해킹을 하는 것이며, 이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS 취약점을 이용하여 서버 측 또는 URL에 미리 삽입을 해놓은 것을 의미한다.

 

XSS는 일반적으로 자바스크립트에서 발생하지만, VB 스크립트, ActiveX 등 클라이언트에서 실행되는 동적 데이터를 생성하는 모든 언어에서 발생이 가능하다. 전 세계 시스템 공격 방법 통계에서도 XSS4(6.2%)를 차지하며 여전히 강력한 해킹 방법으로 여겨지고 있을 뿐만 아니라 2011년에 발표된 SANS/CWE 가장 위험한 25대 소프트웨어 오류에서 4번째로 높은 위험(위험도 77.7)으로 기록되고 있다.

 

이와같이 XSS 취약점은 비교적 쉽게 공격할 수 있으며 웹 애플리케이션 개발 시 제거되지 않아 매우 광범위하게 분포되고 있다고 할 수 있다. 그래서 이 취약점을 이용한 악성 스크립트 배포 및 이를 통한 악성코드 배포 및 클라이언트 프로그램 해킹 등 현재도 개인 및 조직의 보안에 큰 위협이 되고 있다.

 

XSS 공격은 크게 3가지로 분류가 된다. 저장 XSS 공격은 접속자가 많은 웹 사이트를 대상으로 공격자가 XSS 취약점이 있는 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식, 반사 XSS 공격은 악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여 URL을 클릭하면 클라이언트를 공격하는 방식, 마지막으로 DOM 기반 XSS 공격DOM 환경에서 악성 URL을 통해 사용자의 브라우저를 공격하는 방식이다.

- 저장 XSS 공격

저장 XSS 공격 기법

저장 XSS 공격은 그림과 같이 웹 애플리케이션 취약점이 있는 웹 서버에 악성 스크립트를 영구적으로 저장해 놓는 방법이다. 이때 웹 사이트의 게시판, 사용자 프로필 및 코멘트 필드 등에 악성 스크립트를 삽입해 놓으면, 사용자가 사이트를 방문하여 저장되어 있는 페이지에 정보를 요청할 때, 서버는 악성 스크립트를 사용자에게 전달하여 사용자 브라우저에서 스크립트가 실행되면서 공격한다. 가장 일반적인 방법은 게시판 같은 곳에 HTML 문서에 <script>를 이용하여 이 스크립트 태그 안에 악성 스크립트를 저장하는 방식이다. , 텍스트만 표시되도록 설계된 어떤 게시판에<script> “악성 스크립트” </script>과 같은 태그를 포함한다. 이 경우에 게시판에는 태그가 나타나지 않으며 사용자는 확인할 수가 없다.

<script>alert(document.cookie)</script>
위는 브라우저의 쿠키 값을 보여주는 간단한 스크립트이며, 어떤 웹 페이지에 <script>alert(document.cookie)</script>가 포함되어 있는 어떤 페이지를 사용자가 읽을 때 마다, 브라우저는 이 스크립트를 실행하면서 쿠키값을 보여주게 된다. 공격자는 ‘alert(document.cookie)’ 스크립트 대신 정교한 공격용 코드를 포함하여 다양한 공격을 수행할 수 있다.

 

- 반사 XSS 공격

반사식 XSS 공격은 웹 애플리케이션의 지정된 변수를 이용할 때 발생하는 취약점을 이용하는 것으로, 검색 결과, 에러 메시지 등 서버가 외부에서 입력받은 값을 받아 브라우저에게 응답할 때 전송하는 과정에서 입력되는 변수의 위험한 문자를 사용자에게 그대로 돌려주면서 발생한다. 일반적으로 서버에 검색 내용을 입력하면, 검색 결과가 있는 경우에는 결과값을 사용자에게 전달하지만,

http://www.server.com/search/?q= &x=0&y=0

위와 같이 서버에서 정확한 결과가 없는 경우 서버는 브라우저에 입력한 값을

위와 같이 그대로 HTML 문서에 포함하여 응답한다. 이 경우 HTML 페이지에 포함된 악성 스크립트가 브라우저에서 실행이 된다.

, 사용자가 서버로 입력한 값을, 서버는 요청한 사용자의 브라우저로 악성 스크립트를 반사시킨다. 반사 XSS 공격은 주로 사용자에게 악성 URL을 배포하여 사용자가 클릭하도록 유도하여 클릭한 사용자를 바로 공격한다. 즉 사용자는 악성 스크립트가 포함된 링크를 클릭한 순간 바로 악성 스크립트가 사용자의 브라우저에서 실행된다. 반사 XSS 공격은 이메일 메시지 또는 다른 웹 사이트와 같이 다양한 경로로 피해자 시스템에게 전달된다.

일반적인 반사 XSS 공격 단계는 다음과 같다.

1) 공격자는 먼저 A 사이트에 XSS 취약점이 있는 것을 발견한다.

2) 민감한 정보를 획득할 수 있는 공격용 악성 URL을 생성한다.

3) 공격자는 이 URL을 이메일 메시지에 포함하여 배포한다.

4) 피해자가 URL을 클릭하면, 바로 공격 스크립트가 피해자로 반사되어 A 사이트에 관련된 민감한 정보(ID/패스워드, 세션 정보)를 공격자에게 전송한다.

 
 

반사 XSS 공격기법

- DOM 기반 XSS 공격

DOM(Document Object Model)이란 W3C 표준으로 HTML XML 문서에 접근방법을 표준으로 정의하는 문서객체모델이다. W3C9)에서는 DOM프로그램 및 스크립트가 문서의 컨텐츠, 구조 및 형식을 동적으로 접근 및 업데이트할 수 있도록 하는 언어 중립적인 인터페이스이다라고 정의되어 있다. DOMHTML 문서를 계층적으로 보면서 컨텐츠를 동적으로 변경할 수 있다. DOM 기반 XSS 공격은 2005년에 처음으로 아밋 클라인(Amit Klein)이 관련 취약점 논문을 발표하면서 알려졌다. 피해자의 브라우저가 HTML 페이지를 구문 분석할 때마다 공격 스크립트가 DOM 생성의 일부로 실행되면서 공격한다. 페이지 자체는 변하지 않으나, 페이지에 포함되어있는 브라우저 측 코드가 DOM 환경에서 악성코드로 실행된다. 앞에서 다룬 저장 XSS 및 반사 XSS 공격의 악성 페이로드가 서버 측 애플리케이션 취약점으로 인해, 응답 페이지에 악성 스크립트가 포함되어 브라우저로 전달되면서 공격하는 것인 반면, DOM 기반 XSS는 서버와 관계없이 브라우저에서 발생하는 것이 차이점이다.

DOM  기반  XSS  공격

일반적으로 DOM 기반 XSS 취약점 있는 브라우저를 대상으로 조작된 URL을 이메일을 통해 사용자에게 전송하면, 피해자는 이 URL 링크를 클릭하는 순간 공격 피해를 입게 된다.

DOM 스크립트
 

DOM 스크립트와 같이 개발된 DOM 페이지의 name 변수에 아래와 같이 변수를 입력하면 (http://www.server.com/page.html?name=David) 정상적으로 동작한다. 하지만, DOM 기반 XSS 공격을 위해서 [그림 11]와 같이 입력을 하면, 브라우저에서 <script>의 내용이 실행되게 된다.

DOM 기반 XSS 공격 URL

- XSS 공격의 피해

위에서 예시로 계속 사용된 alert(document.cookie) 스크립트 대신 다양한 공격용 코드로 대체하면 쿠키 정보 및 세션 정보 획득, 클라이언트 프로그램 해킹 등 다양한 방법으로 클라이언트 시스템을 공격할 수 있다.

 

1) 쿠키 정보/세션 ID 획득

쿠키란 웹 서버가 HTTP 헤더 중 Set-Cookie 필드로 브라우저에게 보내는 4KB 이하의 작은 텍스트 파일이며, 사용자가 웹 사이트를 이용하는 동안 사용자 브라우저에 저장된다. 사용자가 웹 사이트의 페이지를 클릭할 때마다 브라우저는 웹 서버에게 사용자의 상태를 다시 알려준다. 사용자 상태를 기록하기 위해 쿠키값에 로그인, 버튼 클릭 등에 대한 정보를 저장한다. 세션 쿠키는 사용자가 웹 사이트를 읽거나 방문하는 동안에만 임시로 메모리에 존재하는 쿠키이다. 쿠키 생성 시 쿠키 만료시기 또는 유효성 기간이 설정되어 있지 않은 경우에 세션 쿠키가 만들어진다. 브라우저에서는 사용자가 브라우저를 종료하면 세션 쿠키를 삭제한다. 웹 애플리케이션이 세션 ID를 쿠키에 포함하는 경우 XSS 공격을 통해, 클라이언트의 합법적인 세션 ID를 획득하여 불법적으로 정상 사용자로 가장할 수 있다.

 

2) 시스템 관리자 권한 획득

XSS 취약점을 이용하여 사용자 브라우저 취약점을 공격하여 PC를 완전히 통제할 수도 있다. 공격자는 XSS 취약점 있는 웹 서버에 다양한 악성 데이터를 포함시켜 놓은 후, 사용자의 브라우저가 악성 데이터를 실행하는 경우 자신의 브라우저 있는 제로데이 취약점 또는 패치되지 않은 취약점을 공격하는 공격 코드가 실행되면서 사용자 시스템을 완전히 통제할 수 있다. 회사 등 조직의 개인의 PC가 해킹되는 경우, 조직의 내부 시스템으로 이동하여 내부의 중요 정보를 탈취하는 공격으로 이어질 수 있다.

 

3) 악성코드 다운로드

XSS 공격은 악성 스크립트 자체만으로는 악성 프로그램을 다운로드 할 수 없지만, 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도하여 악성 프로그램을 다운로드 받는 사이트로 리다이렉트(redirect) 하거나, 트로이목마 프로그램을 다운로드하여 설치할 수 있다.

 

학습내용 2Dalfox를 이용한 Fuzzing 공격 실습

1. 실습 준비

1) 가상 머신에 칼리리눅스 설치

칼리리눅스

Kali-linux-2021.3-i386.iso(32비트)

Kali-linux-2021.3-amd64.iso(64비트)

 

2. ParamSpider 설치

1) 깃헙에서 ParamSpider 소스코드를 내려 받는다.

2) ParamSpider로 경로를 이동한 후 requirement,txt에서 명시된 사전에 필요한 라이브러리들을 설치한다.

3. ParamSpider 실행

해당 도구는 파이썬 스크립트로 작성되어 있으며 옵션으로 도메인 주소를 지정하여 공격을 수행한다. 이번 실습에서는 Dalfox 툴을 사용하기 위해 XSS를 테스트할 수 있는 testphp.vulnweb.com 주소로 지정하고 공격을 수행한 결과를 output.txt 파일에 저장한다.

python3 paramspider.py domain

http://testphp.vulnweb.com/ -o output.txt

 

공격을 진행한 결과 총 24개의 의심의 가는 url을 발견하였고 이는 취약점일 가능성이 존재하는 경로이다. 이는 위양성을 나타낼 가능성이 존재하므로 이를 고려하여 Dalfox 툴을 사용하여 공격을 수행하여 취약점을 점검할 것이다.

아래는 url을 담아놓은 파일을 확인한 것이다.

 

4. Dalfox 설치

Dalfox를 설치하는 방법은 두 가지가 존재한다.

1. 깃헙에서 Dalfox 소스코드를 내려받고 위치를 /go/bin으로 복사하여 사용하는 방법

2. snap을 사용하여 snap 안에 있는 dalfox를 다운받아 사용하는 방법

아래 사진은 깃헙을 통해 go 폴더 안으로 dalfox 툴을 넣는 과정이다.

 

5. Dalfox 실행

1) 설치한 방법 중 2번째 방법을 사용하여 실습을 진행하였다. Dalfox가 실행되는 경로로 이동한다.

cd /gome/kali/go/bin

2) Dalfox를 실행시키면 기본적인 사용법이 뜬다.

 

3) ParaSpider를 사용하여 취약한 url을 파일로 저장받았으니 Dalfox의 파일 모드를 사용하여 실행시켜보았다.

dalfox [mode] [flags] [data]

./dalfox file output.txt

 
 

3) Dalfox로 공격을 하여 output.txt 파일에 있는 URL 중에서 XSS 공격을 할 수 있는 URL을 발견하였고 그 URL을 열어보았다.

URL을 열어보았을 때 XSS 공격이 성공하여 위의 사진처럼 나온 것을 확인할 수 있었다.

 
 
복사했습니다!