iframe 은 HTML 문서 안에서 또 다른 HTML 문서를 출력하는 태그입니다.
그중에서도 iframe 인젝션은 독립적이여서 자주 사용되는 html injection 입니다.
악성 URL을 삽입해 사이즈를 0으로 설정하는 등으로 숨기는 방법으로 사용합니다.
iframe.php 페이지는 url에 변수가 노출되어 있습니다.
파라미터는 ParamUrl, ParamWidth, ParamHeight 으로 ParamUrl은 주소를 받아오고,
ParamWidth와 ParamHeight은 내용을 출력한 크기를 지정합니다.
기타 Injection - iframe injection low(하) 단계
iframe 인젝션 공격 페이지에서 F12를 눌러 개발자 도구를 열겠습니다.
iframe 태그를 사용해서 robots.txt 파일을 출력하고 있는 것을 확인 할 수 있습니다.
URL에서 ParamUrl 변수의 값은 robot.txt입니다.
이 변수에 입력한 내용이 iframe 태그에 추가되어 기존에 존재하던 iframe태그를 강제로 닫고,
URL에 노출된 변수에 공격자가 의도한 iframe 태그를 주입하는 방법을 사용하는 것입니다.
먼저 html 페이지를 만들어보겠습니다.
저는 웹 서버가 없기 때문에 비박스의 웹 서버에 html확장자를 가진 파일을 생성할 예정입니다.
먼저 비박스 서버로 가서 터미널 창을 열어보겠습니다.
우리가 접근할 수 있는 디렉터리에 html 파일을 생성해야 iframe 태그로
호출이 가능합니다.
cd 명령어를 사용하여 우리가 접근할 수 있는,
/var/www/bWAPP 에 들어가서 파일을 만들어주겠습니다.
웹 페이지들이 모여있는 곳입니다.
vim 을 사용해서 code.html 파일을 생성해보겠습니다.
<html>
<head>
<h1>Hello World!</h1>
<script>alert(document.cookie);</script>
</head>
</html>
이렇게 h1 태그와 alert를 출력시키는 코드를 입력한 후
esc 를 누르고 : wq! 를 통해 저장하고 나가줍니다.
wq!를 입력한 후 엔터를 입력하시면 저장후 자동으로 나가게 됩니다.
제대로 저장이 되었는지 ls 명령어를 통해 살펴봅시다.
ls 명령어를 치면 code.html 이 보입니다. 성공적으로 파일이 저장되었네요.
그럼 url을 건드려보도록 하겠습니다.
원래 본인의 url창에서 ParameUrl=robots.txt 뒤에 iframe 태그를 닫고
방금 만든 악성 코드를 iframe 태그안에 넣어서 실행시켜줍니다.
그럼 url은 이렇게 나옵니다.
실행시켜보도록 하겠습니다.
쿠키값이 노출되고,
h1 태그가 실행된 것을 알 수 있습니다.
Hello World! 하단에
정상 irame 태그에 들어가는 넓이와 높이 속성이 문자열로 출력됩니다.
원래 있었던 iframe 태그를 강제로 닫았기 때문에 속성이 그대로 노출되었다고 볼 수 있습니다.
사용자 몰래 iframe 인젝션 공격을 해볼까요?
iframe의 width 속성과 height 속성을 0으로 수정해보도록하겠습니다.
높이와 넓이를 0으로 만들어도 alert 창은 출력됩니다.
정상 iframe 태그의 높이와 넓이가 같이 출력된다면 의심스러우므로
높이 속성을 아주 크게 줘서 눈에 잘 띄지 않도록 해줍니다.
스크롤을 조금 내린 상태입니다.
기타 Injection - iframe injection hight(상) 단계
난이도 상에서는 URL의 ParamUrl 변수에 iframe 태그를 입력해도
태그를 제대로 인식하지 않습니다.
서버에서 코드를 살펴봅시다.
iframei.php 페이지의 소스를 보면 xss_check_3로 우회하고 있는 것을 확인할 수 있습니다.
xss_check_3는 계속 나왔듯이
htmlspecailchars 함수로 입력값을 우회하는 것을 쓰고 있습니다.
htmlspecialchats?
PHP에서 제공하는 기본함수로, HTML에서 사용하는 특수문자를 UTF-8로 변경하는 역할을 합니다.
htmlspecialchars에서 바꾸는 특수문자는 &,",',<,> 가 있습니다.
iframe Injection 대응방안
iframe Injection 공격을 방지하려면 htmlspecialchars 함수를 사용해
태그에 사용하는 특수문자들을 인식할 수 없도록 인코딩해줍니다.
'Archive > Hacking' 카테고리의 다른 글
[ Assemble ] 어셈블리어 개요 & SASM 설치 (2) | 2020.03.31 |
---|---|
[ Bee-Box ] 기타 Injection - OS 커맨드 injection (1) | 2020.03.30 |
[ Bee-Box ] HTML Injection - Stored(Blog) (0) | 2020.03.29 |
[ Bee-Box ] HTML Injection - Reflected (URL) (0) | 2020.03.29 |
[ Bee-Box ] HTML Injection - Reflected(POST) (0) | 2020.03.27 |