kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

Cyber Security

비박스 환경을 활용한 웹 모의해킹 완벽 실습 - iframe 인젝션

까마기 2020. 1. 22. 18:32
728x90
반응형
- iframe 인젝션
 
- iframe 인젝션을 막으려면 htmlspecialchars 함수를 사용하여 웹 브라우저에서 iframe 태그에 사용되는 문자들을 HTML 태그로 해석하지 않게 입력 데이터를 UTF-8로 인코딩한다.
- iframe은 HTML 문서 안에서 또 다른 HTML 문서를 출력하는 태그로, 어느 위치든 상관없이 인젝션 공격이 가능하다.
- iframe 인젝션은 독립적으로 만들 수 있어서 HTML 인젝션 중에서도 공격에 자주 사용
- HTML 인젝션에서 사용하는 태그와 마찬가지로 페이지 내에 iframe 태그를 인젝션하는데, 주로 악성 URL을 삽입한 후 사이즈를 0으로 설정하여 숨기는 방법을 사용
 
따라서 사용자가 의도하지 않은 악성 웹 사이트에 접속하거나 경고창을 띄울 수 있다.
- 난이도 하
 
- iframei.php 페이지는 GET 방식으로 데이터를 전송받으므로 URL에 변수를 노출한다.
- 변수는 다음과 같다
 
- ParamUrl : 연결할 주소를 받아옴
- ParamWidth, ParamHeight : 내용을 출력할 크기 지정
 
- 개발자도구로 iframe 태그 확인 : iframei.php 페이지는 iframe 태그를 사용하여 bWAPP 디렉터리에 있는 robots.txt 파일의 내용을 출력
- URL에서 ParamUrl 변수의 값은 robot.txt이다. 이 변수에 입력한 내용이 iframe 태그에 추가되어 기존 iframe 태그를 강제로 닫고 URL에 노출된 변수에 악의적인 iframe 태그를 주입하는 방법을 사용
 
 
  • iframe 태그로 사용자 모르게 악의적인 HTML 페이지를 출력하는 공격을 하기 위하여 HTML 페이지를 먼저 만든다.
  • 웹 서버가 없는 경우 비박스의 웹 서버에 HTML 파일을 생성한다.
root@bee-box:~# cd /var/www/bWAPP
root@bee-box:/var/www/bWAPP# vi bad.html
<html>
<head>
<h1>Iframe Injection</h1>
<script>alert("Succeed")</script>
</head>
</html>
:wq
root@bee-box:/var/www/bWAPP# ll | grep bad.html
-rw-r--r--  1 root root        90 2017-01-02 19:22 bad.html
 
  • bad.html 파일을 생성하고 나면 iframei.php 페이지로 이동하여 상단 URL 부분에서 ParamUrl 변수에 악의적인 HTML 페이지를 호출하는 iframe 태그를 입력한다. 
  • ParamUrl 변수의 값이 원래 페이지의 iframe 태그에 추가되기 때문에 "></iframe> 을 입력하여 원래 페이지의 iframe 태그를 닫는다.
  • 그리고 /var/www/bWAPP 디렉터리 안에 생성한 bad.html 페이지를 iframe의 src 속성에 입력한다.
 
http://192.168.56.1:9999/bWAPP/iframei.php?ParamUrl=robots.txt"></iframe><iframe src="bad.html" width="250" height="250"></iframe>&ParamWidth=250&ParamHeight=250
 
- 변수에 iframe 태그를 입력하고 엔터를 누르면 웹 브라우저에서 bad.html 파일의 코드를 해석하고 iframe 인젝션 결과로 'Succeed'라는 메세지를 경고창으로  출력한다.
 
 
 
 
- 확인을 클릭하면 robots.txt 내용 옆에 bad.html에 입력한 헤딩 태그를 출력하고 그 옆에는 정상 iframe 태그에 들어가는 넓이와 높이 속성이 문자열로 출력한다. 정상 iframe 태그글 강제로 닫았기 때문에 속성이 노출된 것이다.
 
 
 
- 사용자 몰래 iframe 인젝션 공격을 하기 위하여 iframe의 'width' 속성과 'height' 속성을 0으로 수정한다.
- iframe 태그를 주입한 후 웹 개발자 도구로 iframei.php 페이지의 소스 코드를 확인하면 원래 있던 iframe 태그가 닫히고 악의적으로 주입한 iframe 태그가 추가된 것을 볼 수 있다.
 
 
http://192.168.56.1:9999/bWAPP/iframei.php?ParamUrl=robots.txt"></iframe><iframe src="bad.html" width="0" height="0"></iframe>&ParamWidth=250&ParamHeight=250
 
 
-> iframe의 넓이와 높이를 전부 0으로 만들어도 'Succeed'라는 경고창은 출력된다. 그러나 이전과는 다르게 'bad.html'에 입력한 헤딩 태그를 출력하지 않는다. 따라서 공격자는 iframe 인젝션으로 경고창을 출력하여 원래 사이트에서 정상적인 응답인 것처럼 사용자를 속일 수 있다.

 

 
- 그러나 정상 iframe 태그의 높이와 넓이가 위 그림 처럼 같이 출력된다면 페이지가 이상하다는 것을 발견할 수도 있다. 따라서 스크롤을 내리지 않으면 전혀 눈치 채지 못하도록 속성을 아주 큰 값으로 설정한다.
 
http://192.168.56.1:9999/bWAPP/iframei.php?ParamUrl=robots.txt"width="250"height="1000"></iframe><iframe src="bad.html" width="0" height="0"></iframe>&ParamWidth=250&ParamHeight=250
 
 
* 경고창을 닫아도 정상적인 웹페이지로 보인다.
 
 
 
  • 대응방안
난이도 상에서는 URL의 ParamUrl 변수에 iframe 태그를 입력하여도 아무 반응이 없다. 이는 결과를 출력하기 전에 우회단계를 거치기 때문에 웹 브라우저에서 입력 데이터를 태그로 해석하지 않아서이다.
htmlspecialchars 함수로 입력값을 우회하는 단계를 거치게 끔하여 URL에 입력 데이터를 태그로 해석하지 않게 한다.htmlspecialchars 함수는 html에서 사용하는 특수문자를 UTF-8로 반환한다.
 
반응형