beebox

HTML 인젝션

sheow13 2023. 9. 19. 14:11
728x90

HTML 인젝션

 

개요

- 취약한 매개변수에 악의적인 HTML 코드를 삽입하는 공격

- HTML 태그로 악의적인 사이트에 연결하거나 악성 파일을 다운로드 하도록 유도

- XSS(Cross Site Script) 취약점 일부에 포함되는 취약점

 

 

사전 지식

- HTML은 하이퍼텍스트를 활용한 마크업 언어로 WWW(World Wide Web) 페이지를 구성하기 위한 하이퍼링크의 표현하는 규약

- 클라이언트 사이드 스크립트(Client Side Script) : 클라이언트(사용자) 측에서 처리하는 것으로, 클라이언트가 입력한 것을 수신하여 HTML로 만들어서 크롬과 같은 어플리케이션에 해석해서 표시. 대표적으로 자바스크립트가 있다.

- 서버 사이드 스크립트(Server-Side Script) : 서버 측에서 즉시 처리하는 것으로 서버 사이드는 클라이언트로 보낼 웹 페이지(HTML, JavaScript 등이 담긴)를 만들며, 서버 동작에 중요한 업무(사용자 유효성, DB 관련 업무)을 수행한다. 대표적인 언어로 Java, PHP, Python, Node.js, ASP 등이 있다.

 

HTML Injection Cheat Sheat

예시
<script src=“/assets/some-script.js”></script>
<iframe src = http://[URL]></iframe>
<meta name="language" content="0;data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" http-equiv="refresh"/>
<meta name="language" content="5;http://[URL]" http-equiv="refresh"/>

HTML 테그

HTML 태그 설명
<html></html> html의 시작과 끝을 표현
<head></head> 웹 페이지에서 직접적으로 표현되지 않는 태그의 집합을 표현
<title>, <link> <style> ..
<body></body> 페이지가 브라우저에 실제로 표한할 것들
<a><img><table><br><p><b><form> ..
<title></title> 제목 표시줄
<meta> 태그 안에 웹 페이지의 정보를 표현
이 정보는 웹 페이지에 보이지 않음
charset, http-equiv, content, name ..
<div></div> 임의의 레이아웃 구분을 표현
<a></a> 하이퍼링크 태그
<script></script> 코드 삽입
<iframe></iframe> 페이지 내부에 새로운 페이지 삽입 가능
<link></link> 외부 파일과의 연결 표현
<span></span> 임읭의 레이아웃 구분을 표현
<p></p> 하나의 문단을 표현
<li></li> 목록을 표현
<style></style> 해당 문서의 적용되는 css 표현
<footer></footer> 저자, 저작권, 연관 페이지 등을 표현

 

실습1 (난이도 : )

1. html injection 클릭 후 난이도는 하로 설정

2. html 태그를 삽입 시 html 태그가 정상 동작 확인

3. 페이지 소스 보기를 통해 확인한 결과 입력값 제한을 하지 않아 html 태그가 업로드 되는 것을 확인

4. 자바스크립트 명령어인 alert(document.cookie)를 입력 시 쿠키 정보 획득 확인


실습3 (난이도 : )

1. 입력란에 html 태그 입력 시 정상 동작하지 않고 문자 그대로 출력 확인

2. 페이지 소스 보기를 통해 확인 결과, ‘<’, ‘>’와 같은 특수문자가 치환된 것으로 확인

 

3. URL 인코딩을 하여 html 태그 및 명령어 입력 시 정상 동작 확인

실습3 (난이도 : )

1. 입력란에 URL 인코딩한 값을 입력 시, 문자열 그대로 찍히는 것을 확인

2. bee-box 홈페이지 코드를 확인했을 때, htmlspecialchars() 함수를 사용하여 특수문자를 HTML 엔티티로 변환시켜 HTML 태크를 사용할 수 없도록 조치한 것으로 확인

 

 실습4  iframe injection (난이도 : )

1. iframe Injection 탭으로 이동했을 때 URL iframe 태그를 통해 ‘robots.txt’ 파일을 불러오는 것을 확인

2. URL iframe 태그를 사용 시, 정상적으로 새로운 페이지를 불러오는 것을 확인

 입력 구문 : https://192.168.30.130/bWAPP/iframei.php?ParamUrl=robots.txt" width="250"></iframe><iframe src=https://192.168.30.130/bWAPP/htmli_get.php width="250"></iframe>&ParamWidth=250&ParamHeight=250

조치 방법

1. PHP Secure Coding

- ‘<’, ‘>’와 같은 메타문자(특수문자)를 일반문자로 치환

2. HTML에서 htmlspecialchars() 함수를 사용하여 특수문자를 이스케이프 처리

function a($var) // 입력 받은 특수문자를 이스케이프 처리
{
if (is_array($var)) {
return array_map(‘a’, $var);
} else {
return htmlspecialchars($var, ENT_QUOTES, ‘UTF-8’);
}