HTML 인젝션이란?
HTML 인젝션은 일종의 코드 인젝션 공격입니다.
HTML 인젝션의 기법은 크게 두가지로 나뉩니다.
- 반사(Reflected) 기법
- 저장(Stored) 기법
반사(Reflected) 기법
HTML 인젝션 - 반사기법은 URL에 악의적인 HTML 태그를 삽입해서
링크를 클릭한 사용자의 PC에서 HTML 태그가 실행되게 하는 공격입니다.
저장(Stored) 기법
HTML 인젝션 -저장기법은 악의적인 HTML 태그를 데이터베이스에 저장해서
저장된 태그 내용을 확인한 사용자의 PC에 HTML태그가 실행되게 하는 공격입니다.
반사기법 vs 저장기법
반사기법과 저장기법의 가장 큰 차이점은 악의적인 HTML 태그의 삽입 위치입니다.
반사기법은 URL에 태그를 삽입하고, 저장기법은 데이터베이스에 삽입합니다.
이제 직접 비박스에서 실습을 해봅시다!
호스트에서 비박스를 실행하는 방법을 모른다면 앞전의 포스팅을 보고오시는 것을 추천드립니다 ㅎㅅㅎ
아이디에 bee, 비밀번호에 bug를 쳐서 로그인합니다.
HTML Injection (GET) 항목을 선택하고 HACK 을 누릅니다.
HTML Injection - Reflected(GET) low(하) 단계
이 페이지는 가장 낮은 단계로 사용자가 입력한 값을 그대로 출력하는데,
입력값을 검증하는 코드가 누락되어 있어 관리자가 의도하지 않은 내용을 출력할 수 있는 취약점이 존재합니다.
h1 태그를 이용해서 확인해보도록하겠습니다.
h1 태그가 인식되는 것을 알 수 있는데요,
url에서도 firstname, lastname 이라는 취약한 변수가 노출되는 것을 확인할 수 있습니다.
공격자는 이러한 주소의 형태로 사용자들에게 유도할 수 있고,
저 링크를 클릭한 사용자는 서버가 의도하지 않은 내용을 출력하게 됩니다.
HTML Injection - Reflected(GET) medium(중) 단계
우측 상단의 Set your security level을 medium으로 세팅을 해서
난이도 중을 선택해보도록 하겠습니다.
초반에 했던대로, h1 태그를 이용해서 확인해보도록 하겠습니다.
난이도 중은 <h1></h1> 을 html 태그가 아닌 문자로 인식하는군요.
우회과정을 확인하기 위해서 서버에서 코드를 찾아보도록하겠습니다.
소스파일은 /var/www/bWAPP 경로에 존재합니다.
터미널창을 열어서
cd /var/www/bWAPP
vim htmli_get.php
명령어를 입력합니다.
그럼 htmli_get.php 파일을 볼 수 있습니다.
소스코드를 살펴보니
low 난이도는 no_check() 라는 함수를 통해서,
medium 난이도는 xss_check_1() 라는 함수를 통해서,
high 난이도는 xss_check_3() 라는 함수를 통해서 data를 받는 것을 알 수 있습니다.
저 함수들은 functions_external.php 에 정의되어 있기때문에
functions_external.php 파일을 살펴보도록 하겠습니다.
난이도 low의 no_check() 함수입니다.
데이터를 받으면 그 데이터를 그대로 return 해주고 있는 것을 확인할 수 있습니다.
난이도 medium의 xss_check_1() 함수입니다.
받은 데이터에 < 또는 > 가 있으면 각각 <와 > 로 변환하고,
한번 디코딩을 해서 데이터를 리턴해줍니다.
기본적으로 브라우저는 <와 같은 특수문자를 인코딩해서 서버측에 보내게 되고,
서버측은 받을때 디코딩해서 받게 됩니다.
xss_check_1() 함수는 디코딩을 해주는 urldecode() 함수를 사용하고 있으니
<와 >를 인코딩한 값을 넣어주면 우회가 가능할 듯 합니다.
참고로 url인코딩을 행할 시 < 는 %3c ,>는 %3e, /는 %2f 로 변환됩니다.
hello
%3ch1%3eworld%3c%2fh1%3e
의 형태로 넣어주면 우회가 가능한 것을 확인할 수 있습니다.
HTML Injection - Reflected(GET) high(상) 단계
난이도 상으로 가볼까요?
난이도를 high로 선택하고 Set을 눌러봅니다.
일반적인 html태그는 문자로 인식합니다.
medium 방식에서 시도했던 인코딩 우회도 막히네요.
난이도 상의 코드를 살펴볼까요?
난이도 상은 xss_check_3() 함수로 데이터를 우회하고 있습니다.
이 함수는 htmlspecialchars라는 기본함수를 이용해서 입력값을 우회하고 있습니다.
htmlspecialchats?
PHP에서 제공하는 기본함수로, HTML에서 사용하는 특수문자를 UTF-8로 변경하는 역할을 합니다.
htmlspecialchars에서 바꾸는 특수문자는 &,",',<,> 가 있습니다.
HTML Injection 대응방안
HTML Injection 공격을 방지하려면 htmlspecialchars 함수를 사용해
태그에 사용하는 특수문자들을 인식할 수 없도록 인코딩해줍니다.
'Archive > Hacking' 카테고리의 다른 글
[ Bee-Box ] HTML Injection - Reflected (URL) (0) | 2020.03.29 |
---|---|
[ Bee-Box ] HTML Injection - Reflected(POST) (0) | 2020.03.27 |
[ Bee-Box ] 비박스란? + Bee-Box 설치하기 (1) | 2020.03.23 |
Lord of SQL Injection 4단계, orc 풀이 + Python code (1) | 2020.03.22 |
[ Message Hooking ] Windows Message 처리 방법 (0) | 2020.03.21 |