Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

[Web Hacking] Bee - Box -HTML Injection- 본문

정보보안/BWAPP Bee-box

[Web Hacking] Bee - Box -HTML Injection-

프로앱등이 2020. 5. 3. 18:09

1.A1 – INJECTION

 

 

OWASP TOP 10 의 A1의 항목은 INJECTION 이다 A1항목은 가장 많이 공격되고 보안위협 수

준이 높고 발생빈도 가 잦은 취약점 이라는 것이다.

 

1-1 INJECTION

인젝션은 공격자가 악의적으로 주입한 데이터를 웹 어플리케이션에서 데이터베이스의 정상

적인 쿼리를 일부로 인식하고 실행할 때에 발생하는 취약점으로,데이터를 입력받거나 데이터

베이스 정보를 요청하는 곳에서 인젝션 공격이 가능하다.

 

공격 방법이나 사용 언어에 따라 인젝션의 종류가 달라지는데, 대표적인 유형으로 SQL

injection , HTML injection , OS command injection , LDAP injection 등 이 있다. 인젝션 공격 중

SQL injection은 데이터베이스 언어인 SQL문을 사용하기 때문에 데이터베이스 내의 정보를

유출 또는 수정하거나 데이터베이스 악성코드를 주입하여 사용자의 컴퓨터를 공격할수 있다.

[A1-(1)]–Refleted HTML INJECTION

HTML injection은 코드 인젝션 공격의 하위 개념으로 , 취약한 매개변수에 악이적인 HTML

코드를 삽입하는 공격이다. 공격자는 사용자가 연결을 요청한 페이지에 HTML 태그를 삽입

하여 의도하지 않은 내용을 보게 하거나 악의적인 사이트에 연결한다.

 

HTML INJECTION 중에서 반사(Refleted) 기법은 URL에 악의적인 HTML 태그를 삽입하여 링

크를 클릭한 사용자의 PC에서 HTML 태그가 실행되게 하는 공격이다. 특히 GET 방식으로

데이터를 전송할 경우 URL에 변수명과 입력 값을 노출한다.

 

 

HTML INJECTION 중에서 저장(Stored) 기법은 악의적인 HTML 태그를 데이터 베이스에 저장

하여 저장된 태그 내용을 확인한 사용자의 PC에 HTML 태그가 실행되게 하는 공격이다.

특히 공개적인 게시판에 악의적인 HTML태그를 올리면 많은 사용자를 대상으로 공격할 수

있다.

1-1 HTML INJECTION 공격 (난이도 하)

 

 

HTML injection – Refleted (GET) 페이지는 사용자가 입력한 값을 그대로 출력시키는

페이지이다. 이때 사용자의 입력값을 검증하지 않으면 웹 브라우저는 공격자가 입력한 HTM

L 태그를 해석하고 관리자가 의도하지 않은 내용을 출력한다.

 

 

 

입력

내용

<h1>Succes</h1>

헤딩(Heading) 태그 , 제목 표기에 사용

<a href=http://www.naver.com/ target=”_blank>

<a href> 웹페이지 링크 이동 태그

입력 항목에 테스트하면 위 와 같이 입력하고 [GO] 버튼을 클릭한다 공격자는 다음

주소 형태로 사용자들에게 유도한다. 그러면 사용자는 HTML태그가 삽입된 페이지를 정상

페이지로 오해하게 된다.

 

 

GET 메서드로 요청하기 때문에 웹 브라우저의 URL 입력 부분에 변수가 노출

된다. 따라서 URL 입력간의 ‘firstname’과 ‘lastname’이라는 변수에 입력한 HTML태그가 보인

다.

 

HTML인젝션 결과로 웹 브라우저에서 ‘Welcome’ 메시지 밑에 삽입한 헤딩 태그와 이미지 태

그 내용을 출력한다. HTML 형식으로 두 가지 모두 정상적으로 나온것이다.

 

 

성공적으로 HTML태그가 실행된 모습이다 위의 <a href>태그를 사용하여 새창으로 네이버

의 페이지를 띄었다 지금은 네이버 창을 띄었지만 HTML Reflted 공격은 비정상적인 사이트

를 만들고 악성사이트 연결 , 악성코드 배포 등 다양한 공격으로 이루어질수 있다.

1-2 HTML INJECTION 공격 (난이도 중)

중으로 단계를 올리고 페이지의 HTML 인젝션 취약점 여부를 확인한다.

 

 

난이도를 조절하는 드롭다운 메뉴에서 medium 단계 (중) 으로 올리고 공격을 시도해보겠다.

 

 

위의 [그림2-9]의 모습은 HTML인젝션 결과 입력한 태그가 실행되지 않고 화면에 문자열이

그대로 출력된다. 이는 중 단계에서 태그를 필터링당하기 때문이다.

 

 

위의 코드는 function_external.php에 정의되어 있는 소스코드이다. 위의 [그림2-9]에서 HTML태

그를 필터링 우회하는 부분이 바로 이 부분인것이다. 위의 코드는 PHP 내장함수 str_replace

를 사용하여 사용자의 입력값에 ’< ‘, ‘>’ 와 같은 문자가 들어오면 HTML ENCODING 하여 스 크립트 구문을 우회한다.

입력

내용

%3Ch1%3ESucces%3C/h1%3E

헤딩(Heading) 태그 , 제목 표기에 사용

%3Cahref=http://www.naver.com/ target=”_blank%3E

<a href> 웹페이지 링크 이동 태그

따라서 태그에 사용되는 ‘<’ 와 ‘>’ 문자를 URL 인코딩하여 입력한다. URL 인코딩은 ASCII(

아스키) 코드의 HEX값에서 %를 붙인 값으로 , 두 문자를 URL인코딩하면 ‘<’ 는 %3C . ‘>’는

%3E로 변환된다. 다음 표와 같이 인코딩한 값을 다시 변수에 입력한다.

입력

내용

%3Ch1%3ESucces%3C/h1%3E

헤딩(Heading) 태그 , 제목 표기에 사용

%3Cahref=http://www.naver.com/ target=”_blank%3E

<a href> 웹페이지 링크 이동 태그

[그림 2-11]

따라서 태그에 사용되는 ‘<’ 와 ‘>’ 문자를 URL 인코딩하여 입력한다. URL 인코딩은 ASCII(

아스키) 코드의 HEX값에서 %를 붙인 값으로 , 두 문자를 URL인코딩하면 ‘<’ 는 %3C . ‘>’는

%3E로 변환된다. 다음 표와 같이 인코딩한 값을 다시 변수에 입력한다.

URL INCODING 한 태그를 삽입하여 공격에 성공한 모습이다 위의 그림

은 str_replace()함수를 우회한것이다. 이 우회공격의 원리는 아주 간단하다 str_replace() 함수의

경우는 사용자가 지정한 특정한 문자 에 대한 필터링을 하기 때문에 ‘<’ 와 ‘%3C’ 는 웹 홈

페이지에서 동일한 결과값을 나타내지만 문자 자체는 다르기 때문에 손쉽게 우회할수 있었

다.

1-3 HTML INJECTION 공격 (난이도 상)

 

 

HTML INJECTION의 난이도를 상으로 조절한다.

 

 

URL ENCODING 한 값으로 HTML 태그를 삽입하였지만 이 마저도 우회 , 필

터링을 한 모습이다. 입력한 HTML 태그 구문이 그대로 문자열로 출력된다. 과연 어떤 함

수로 공격구문을 보안 하고 있는지 확인해보겠다.

 

 

위의 코드는 function_external.php에 정의되어 있는 소스코드이다. 위의 코드는 PHP 내장함수

htmlspeciolchars() 함수를 이용하여 사용자의 악의적인 입력값에 대한 방어를 하고있다. PHP

에서 제공하는 보안내장함수 중에서는 가장 강력하다고 할수있다 htmlspeciolchars() 는 특수

문자를 HTML 엔티티로 변환하는 함수이다. 따라서 URL ENCODING 된 값이라도 DECODIN

G을 거치고 htmlspecolchars 함수로 들어가 공격구문을 방어한다.

.

[A1-(2)]–Stored HTML INJECTION

HTML INJECTION (Stroed) 는 단어 그대로 저장 방법의 HTML INJECTION 공격이다. Refleted

와의 차이점은 Refleted 는 반사 방법으로 저장되지 않고 URL을 클릭하였을 때 발생하는 Ac

tion이다 하지만 Stroed는 데이터베이스 에 사용자가 입력한 공격구문이 저장되므로 일시적이

아니라 지속적인 공격이라고 할수있다. 쿠키값 절취 , 악성코드 다운로드 , 악성코드 실행 등

악의적인 공격을 수행한다.

 

 

HTML INJECTION(Stroed) 페이지로 이동하기 위한 화면이다.

 

 

블로그 형식의 사용자 입력값이 저장되기 때문에 <SCRIPT> 태그를 이용

하여 게시판 열람시 사용자의 Cookie 값이 출력되는 코드를 작성하였다.

 

 

사용자가 게시글을 열람하였을때 해당 사용자의 Cookie값이 출력되는 것

을 알수있다.

HTML INJECTION 대응방안

HTML INJECTION 의 대응방안 은 사용자의 입력값에 대한 검증을 확실하게 해야한다 모든

INJECTION공격 기법들이 “사용자의 입력값은 무조건 신뢰할수 없다” 라는 원칙하에 모든

입력값에 대한 검증 을 해야 한다 PHP 의 경우 내장함수 htmlspeciolchars함수로 (<.>’,”) 등

특수문자를 필터링 해야하고 로직에 의한 우회기법 (Encoding , Decoding) 을 철저히 해야한다.