본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 1-4. 인젝션 [iFrame 인젝션]

by Robert8478 2023. 12. 11.

IFrame 이란? > HTML 문서 안에 또 다른 HTML 문서를 출력하는 태그이다. 독립적으로 만들 수 있기 때문에 어느 위치던 상관 없이
인젝션 공격을 수행할 수 있는 태그이다.  주로 악성 URL을 삽입한 후 사이즈를 0으로 설정해서 숨기는 방법을 많이 쓴다.
악성 웹 사이트에 접속하거나 경고창을 띄울 수 있게된다.


[난이도 하]
iframe 페이지는 URL 창에 변수가 뜨는걸로 보아 GET 방식인것 같다.
?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
변수는 ParamUrl과 ParamWidth,Height 3개인것 같다.
URL은 연결할 주소 Width와 Height는 내용 출력 크기를 지정한다.

개발자 도구로 확인해보니 robots.txt 파일을 iframe으로 불러오는것 같다. 

디렉토리로 들어가보니 /bWAPP/robots.txt 를 불러오고 해당 내용이 존재한다.
이제 이 정보를 이용하여 iframe 인젝션을 시도해보자. 우선 이번에는 악성 html 페이지를 출력하도록 해볼 것이다.
html 페이지를 만들기 위해 beebox 가상머신으로 들어가서 터미널을 열자.

그 후 위처럼 입력해서 /var/www/bWAPP 으로 이동해 주자.
여기서 입력 시에 비박스의 기본 키보드 설정이 벨기에로 되어있어서 몇몇 키를 누르면 다른 키가 입력되는 현상이 발생할 수 있는데 키보드 설정을 통해 대한민국 키보드로 변경해 주어야 한다.

저기 Kor이 써져있는 부분(기본은 Bel 인가 그렇다)에 우클릭하고 Keyboard Preferences를 누른다.

그 후 Add를 누른다.

그다음 Layouts에서 Korea를 찾고 밑에는 Default로 한 뒤 Add 누르고 체크해서 Close 눌러주면 적용된다.
이제 이곳에 example.html을 만들것이다. 기본 vi 편집기를 이용해도 되는데 어렵다면 gedit이나 leafpad를 다운받아 사용하자.
vi 나 gedit 사용시 비번을 입력하라고 나오는데 bug 이다.
leafpad를 받으려면 sudo apt-get install leafpad를 쓰되 네트워크를 잠시동안 어댑터에 브리지로 변경해주어야 다운받을수 있다.

쓸때 반드시 sudo leafpad example.html이라 써야 저장이 가능하다.
저렇게 코드를 쓰고 저장해 준다. 이제 bWAPP으로 돌아가서 iframe으로 example.html을 불러오면 된다.

http://192.168.56.102/bWAPP/iframei.php?ParamUrl=robots.txt"></iframe><iframe src="example.html" width="250" height="250"></iframe>&ParamWidth=250&ParamHeight=250

주소를 넣어주었다. ParamUrl 변수의 값이 원래 페이지의 iframe 태그에 추가되는 형태이기 때문에 robots.txt"></iframe>으로 iframe을 닫아버리고 새로운 iframe 코드를 넣어서 /bWAPP/example.html 페이지를 불러온 것이다. script에 alert를 써두었으므로 알림창이 떴다.

그 후 페이지를 보면 왼쪽은 기존에 있던 iframe인 robots.txt가 보이고
오른쪽에 example.html에서 썼던 h1 태그의 글자와 250250 사이즈의 iframe 칸이 보인다.
기존에 있던 iframe을 강제로 닫아버렸기 때문에 우측에 저렇게 " height와 같은 글자가 iframe에 적용되지 않아 속성이 노출되었다.
robots.txt"> 이렇게 닫았으므로 " height="250"... 즉 " 로 시작하는 것이다. width가 가장 마지막에 있으므로
만약 ParamWidth 변수에서부터 강제로 닫고 악성 iframe을 넣었다면 > 만 노출이 될것이다.

개발자 도구를 보면 iframe을 강제로 닫은 부분이 보일것이다.
여기서 버프슈트를 사용해 iframe의 width와 height 사이즈를 0으로 줄여보자

이쪽에 250이 써져있을텐데 0으로 변경하자. height도 마찬가지다.

http://192.168.56.102/bWAPP/iframei.php?ParamUrl=robots.txt%22%3E%3C/iframe%3E%3Ciframe%20src=%22example.html%22%20width=%220%22%20height=%220%22%3E%3C/iframe%3E&ParamWidth=250&ParamHeight=250

주소는 이렇게 변경할 수 있겠다.

그렇게 forward 시키면 비었지만 공간을 차지하던 iframe 영역이 없어지고 노출된 속성만 보이는것을 볼 수 있다.
이것은 마치 정상적인 응답처럼 사용자를 속이는 것이다. 그런데 여기서 정상 페이지가 iframe때문에 눌려
악성 iframe과 크기가 같이 보이므로 여전히 이상해 보인다. 이럴때 기존 iframe의 크기에서 높이를 크게 올려준다.

http://192.168.56.102/bWAPP/iframei.php?ParamUrl=robots.txt" width="250" height="1000">%3C/iframe%3E%3Ciframe%20src=%22example.html%22%20width=%22250%22%20height=%22250%22%3E%3C/iframe%3E&ParamWidth=250&ParamHeight=250

이런식으로 robots.txt" 뒤에 width="250" height="1000"을 추가해준 코드가 되겠다.

그러면 보기에는 확실히 정상적인 사이트인데 주소창을 보면 그것이 아님을 알 수 있다.


[난이도 중]

우선 기본적인 코드에서 인코딩을 해서 넣어보자.

http://192.168.56.102/bWAPP/iframei.php?ParamUrl=robots.txt"></iframe><iframe src="example.html" width="0" height="0"></iframe>&ParamWidth=250&ParamHeight=250

이 코드를 변경해서 http://192.168.56.102/bWAPP/iframei.php?ParamUrl=robots.txt%22%3E%3C/iframe%3E%3Ciframe src=%22example.html%22 width=%220%22 height=%220%22%3E%3C/iframe%3E%26ParamWidth=250%26ParamHeight=250 코드로 넣었다.

그러나 그렇게 넣어도 되지 않았다. 버프슈트로 확인해 보아도 %25가 안붙는 형태가 나왔다.
그래서 코드를 확인해 보니 역시나 난이도 중의 코드에는 htmlspecialchars 함수가 필터링을 하고 있었다.


[난이도 상]
마찬가지로 htmlspecialchars 함수가 필터링을 하고 있다.