본문 바로가기

모의해킹

[BeeBox]웹해킹 HTML 인젝션 - Reflected(GET &POST)

*가상환경 구축 후 실습을 진행할 것을 권고드리며 대외 서버 및 홈페이지에 해킹 시도는 불법입니다.

 

SQL 인젝션 개요

SQL 인젝션(SQL 삽입, SQL 주입으로도 불린다)은 코드 인젝션의 한 기법으로 클라이언트의 입력값을 조작하여 서버의 데이터베이스를 공격할 수 있는 공격방식을 말한다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑하지 못했을 경우에 발생한다. 공격의 쉬운 난이도에 비해 파괴력이 어마어마하기 때문에 시큐어 코딩을 하는 개발자라면 가장 먼저 배우게 되는 내용이다. 이러한 injection 계열의 취약점들은 테스트를 통해 발견하기는 힘들지만 스캐닝툴이나 코드 검증절차를 거치면 보통 쉽게 발견되기 때문에 탐지하기는 쉬운 편이다.  OWASP에서도 수년 동안 인젝션 기법이 보안 위협 1순위로 분류되는 만큼 보안에 각별한 주의가 필요하다.

XSS Reflected GET

XSS Reflected 공격은 악성 스크립트가 웹 애플리케이션에서 피해자의 브라우저에 반사될 경우 발생 됩니다. 공격자가 삽입한 악성 스크립트는 링크를 통해 활성화되어 취약성이 있는 웹 사이트에 요청을 보냅니다. 취약점은 일반적으로 수신 요청이 충분히 검증되지 않아 웹 애플리케이션의 기능을 조작하고 악성 스크립트를 활성화 할 수 있기 때문에 발생합니다.

 

imperva XSS Reflected 공격

공격 방법

1. 공격자는 취약점이 있는 웹 사이트를 발견하고 사용 가능한 위협적인 악성 스크립트가 확인한다.

2. 공격자는 다른 사용자의 쿠키 및 세션을 탈취할 수 있는 악성스크립트를 웹 사이트에 삽입한다.

3. 희생자는 취약한 웹 사이트를 이용하면서 공격자가 삽입한 악성 스크립트 활성화를 한다.

4. 희생자는 공격자가 지정한 서버에 자신의 쿠키 및 세션을 전송한다.

 

실습환경 BeeBox(Ubuntu)

BeeBox의 보안 레벨에서 가장 최하인 Low레벨에서 악성 스크립트 활성화 후 악성 스크립트를 실행 

보안레벨 Low는 기본적인 악성 스크립트의 실행이 가능하며 레벨을 올릴 수록 특수문자 교체 및 보안 함수 사용으로 인한 악성스크립트의 실행을 방지한다.

Beebox XSS Reflected

<script>alert("test")</script>

javascript alert 동작 확인

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

사용자 쿠키 확인

 

보안 레벨 Low 상태에서는 스크립트의 입력값에 대한 필터를 수행하지 않고 있으므로 악성 스크립트의 활성화를 확인할 수 있다. 이제 보안레벨을 높여서 어떤 방식으로 악성 스크립트의 활성화를 방지하는지 확인하자.

보안레벨을 Low에서 Medium으로 변경하면 실행 함수에서 입력값 필터링을 하는 것을 확인할 수 있다.

/var/www/bWAPP/funtions.exturnal.php

 - 위의 코드는 XSS Reflected 예제 사이트의 코드로서 보안레벨을 Medium으로 변경한 것에 대한 입력값 필터링을 확인할 수 있다. 입력값 필터로서 ['<', '>'] 특수문자를 ['&lt', '&gt']로 변환한 것을 확인할 수 있다. 필터링을 한 후에 URL디코딩을 수행하여 코드를 실행한다.

- 필터링을 우회하기 위해 악성 스크립트를 URL 인코딩을 한 후에 실행 시키면 우회가 가능하다.

URL인코딩: %3Cscript%3Ealert(document.cookie)%3C%2Fscript%3E

실습 환경 BeeBox High Security

=> htmlspecialchars 함수 사용하여 인코딩해서 입력하는 악성 스크립트도 예방이 가능하다.

XSS Reflected(POST)

POST는 GET과 다르게 입력값이 URI에 표시가 안되고 body에 출력되는 것을 확인할 수 있다. 입력 값에서 악성 스크립트를 실행하는 것은 예방하지만 body값을 수정 후 실행하면 GET방식과 동일하게 악성 스크립트가 실행된다.

 

결론: XSS Reflected를 방지하기 위해 서버 홈페이지에서 입력값을 검증하는 과정이 중요하며 이에 대한 방법으로는 특수문자 필터링, 보안함수 사용, 화이트/블랙 리스트 사용하여 검증된 스크립트만 허용 등이 있다. 또한, XSS Reflected 공격은 해커들이 악성 스크립트를 사용자에게 이메일 등 피싱을 사용하여 하이퍼링크에 숨겨서 클릭을 유도하여 실행을 하게 하므로 사용자의 주의를 통한 예방이된다.