본문 바로가기

bWAPP

[비박스] iFrame Injection

iframe은 HTML 문서 안에서 또 다른 HTML 문서를 출력하는 태그를 말한다.

악성URL을 삽입한 후 사이즈를 0으로 설정하여 숨기는 방법을 사용하여 사용자가 의도하지 않은 악성 웹 사이트에 접속하거나 경고창을 띄울 수 있다.

 

들어가기에 앞서 robots.txt란 무엇인지 알아보자.

robots.txt는 웹사이트에 웹 크롤러같은 로봇들의 접근을 제어하기 위한 규약을 말한다. (검색엔진에서도 마찬가지)

여기서 웹 크롤러란 웹페이지의 정보들을 자동으로 수집하는 프로그램을 말하며 일종의 매크로라고 말할 수 있다.

이러한 웹 크롤러들을 특정 디렉토리 혹은 모든 디렉토리에 접근을 허용할것인지 차단할것인지를 robots.txt를 이용해 결정할 수 있다.

robots.txt를 확인하는 방법은 최상위경로url에 /robots.txt를 붙이면 확인가능하다.


↓Low level

 

비박스 iframe injection 페이지이다. 먼저 소스코드를 통해 url의 파라미터가 각각 무엇을 의미하는지 알아보자.

<iframei.php소스코드 중 일부>

iframei.php는 ParamUrl, ParamHeight, ParamWidth를 GET방식으로 데이터를 전송받는 것을 알 수 있다.

ParamUrl은 연결할 주소를 의미하며

ParamHeight와 ParamWidth는 내용을 출력할 크기를 의미한다.

 

추가로 iframe injection페이지의 HTML소스코드를 통해 iframe 태그가 사용됐다는 것을 확인할 수 있다.

 

먼저 우리가 iframe태그로 출력할 HTML 페이지를 만들어보자.

위 빨간박스안에 명령어를 실행하면 경로가 바뀌게 된다.

cd명령어는 change directory의 줄임말이다.

경로를 바꾼 위와 같이 바꾼 이유는 iframe태그로 페이지를 호출하기 위해서는 웹 어플리케이션에서 접근이 가능해야 하기 때문이다.

위 명령어를 실행하면 파일 편집기가 실행된다.

sudo는 루트권한으로 실행한다는 것을 의미한다. vi는 편집기를 사용할 수 있는 명령어이다.

즉, 루트권한으로 sad.html이라는 파일을 생성하겠다는 의미이다.

편집기가 열리면 위 사진과 같이 입력하자.

그전에 입력하려면 i키를 눌러야 입력이 가능하다.

입력이 끝났다면 esc를 누르고 :wq!를 입력하면 저장 후 편집기가 종료된다.

(메모장에서 친 다음 복사 붙여넣기 기능을 이용하는 것을 추천)

ls 명령어를 통해 sad.html 파일이 생성되었는지 확인할 수 있다.

 

다 만들었다면 우리가 만든 HTML 페이지를 호출해보자.

위 사진과 같이 url에 iframe태그와 그에 대한 속성을 입력한다.

자세히 살펴보면 robots.txt"></iframe>으로 태그를 닫아주는 것이 보인다.

이는 위 iframe페이지의 HTML 소스코드에서 봤듯이 iframe태그가 이미 존재하므로 정상적인 iframe태그를 닫아주고 우리가 생성한 sad.html 파일의 iframe태그를 삽입한다. 만약 태그를 안 닫아주었다면, ParamUrl변수에 우리가 쓴 url입력값이 연결되어 원래 페이지의 정상 iframe태그에 추가될 것이다.

그리고 정상 iframe태그에 들어가는 height와 width 속성이 출력되는 것을 확인할 수 있는데 이 또한 우리가 정상 iframe태그를 강제로 닫아주었기 때문에 확인가능한 결과이다.

iframei.php 페이지의 HTML소스코드를 통해 우리가 삽입한 iframe태그를 확인할 수 있다.

 

다음은 사용자에게 정상적인 페이지처럼 보이도록 해보자.

sad.html의 width와 height 속성의 값을 0으로 주어서 헤딩 태그가 출력되지 않는 것을 확인할 수 있다.

하지만 정상 iframe태그의 width와 height 속성은 그대로 출력된다.

그렇다면 robots.txt의 height 속성의 값을 크게 해보자.

robots.txt의 height 속성의 값을 크게 하여 웹스크롤을 내리지 않으면 정상적인 웹 페이지로 보이게 된다.

 

Medium level, High level

난이도 하에서 입력한 그대로 입력해보았지만 아무런 반응이 일어나지 않는다. 왜 그런지 살펴보자.

 

iframei.php 소스코드에서 난이도가 중이거나 상이면 다음과 같은 조건문이 실행된다. xss() 함수를 살펴보자.

위 조건문으로 부터 매개변수를 받아오는데 난이도에 따라 switch문이 실행된다.

먼저 난이도 중부터 살펴보자.

난이도 중은 addslashes() 함수를 거치게 되는데 addslashes() 함수란 ', '', \, NULL과 같은 문자앞에 \(역슬래쉬)를 붙이는 함수를 말한다.

 

이어서 난이도 상을 살펴보자.

난이도 상은 우리가 공부했었던 htmlspecialchars() 함수를 사용하여 인젝션을 막는 것을 확인할 수 있다.

반응형