iframe 인젝션
iframe은 HTML 문서 안에서 또 다른 HTML 문서르 출력하는 태그로 어느 위치든 상관없이 인젝션 공격을 할 수 있다.
HTML 인젝션 중에서도 공격에 자주 사용된다. HTML 인젝션에서 사용하는 태그와 마친가지로 페이지 내에 iframe태그를 주입하는데 주로 악성 URL을 삽입한 후 사이즈를 0으로 설정하여 숨기는 방법을 사용한다.
1). iframe 인젝션 공객
위 페이지는 GET 방식으로 데이터를 전송받음으로 URL에 변수를 노출한다
변수는 'ParamUrl' 'ParamWidth' 'ParamHeight' 총 세 가지로 이루어져 있다 'ParamUrl' 은 연결할 주소를 받아오고 'ParamWidth' 'ParamHeight 내용과 출력할 크기를 지정한다
소스를 확인해 보니까 iframe 태그를 사용하여 bWAPP 디렉토리에 있는 robots.txt 파일의 내용을 추출한다
'ParamUrl' 변수의 값은 robots.txt 이다 이 변수에 입력한 내용이 iframe태그에 추가되어 기존 iframe 태그를 강제로 닫고 URL에 노출된 변수에 악의적인 iframe 태그를 주입하는 방법을 사용한다
iframe 태그로 사용자 모르게 악의적인 HTML 페이지를 출력하는 공격을 하기위해서는
우선 웹서버에서 HTML 파일이 하나 있어야한다
비박스에서 /var/www/bWAPP 경로를 들어가서 bad.html 을 생성한다
생성권한은 루트에만 있으니 루트권한으로 들어가서 파일을 생성한다
bad.html
HTML 페이지를 만들고 나면
'ParamUrl' 변수에 악의적인 HTML 페이지를 호출하는 iframe 태그를 입력한다.
http://192.168.43.22/bWAPP/iframei.php?ParamUrl=robots.txt"></iframe><iframe src="bad.html" width="250" heigth="250"></iframe>&ParamWidth=250&ParamHeight=250
중간에 </iframe> 을 닫아주고 내가 공격하고 싶은 악의적인 주소를 다시 입력해주는 방식으로 공격하였다
bad.html 이 호출되어서 아까 만들어둔 alert 창이 출력이 되었고
개발자 도구로 소스를 확인해보면
정상적인 iframe태그는 닫히고 내가 입력한 iframe 태그가 추가되었다
사용자 몰래 공격하기 위해 width 속성과 heigth 속성을 0으로 수정하였다
http://192.168.43.22/bWAPP/iframei.php?ParamUrl=robots.txt"></iframe><iframe src="bad.html" width="0" heigth="0"></iframe>&ParamWidth=250&ParamHeight=250
그럼 위에 출력되던 iframe injection 이 없어질 것이다 그래도 아직 남은 height와 width 속성을 없애기 위해
깊게 관찰하지 않으면 알수 없도록 스크롤의 크기를 크게 두는 방법으로 없애보면
192.168.43.22/bWAPP/iframei.php?ParamUrl=robots.txt" width="250" height="1000"></iframe><iframe src="bad.html" width="0" heigth="0"></iframe>&ParamWidth=250&ParamHeight=250
iframe 공격에 성공하였다
대응방안
난이도 상에서는 URL의 'ParamUrl' 변수에 iframe 태그를 입력하여 아무 반응이 없다.
이는 결과를 출력하기 전에 우회 단계를 거치기 때문에 웹 브라우저에서 입력 데이터를 태그로 해석하지 않아서다
1-2) 대응방안
난이도 상에서는 난이도 중에서 입력한 값들 역시 문자열로 추가한다
이렇게 출력되는 이유는 우회단계를 거치기 때문이다
html_get.php 코드를 확인하면
여기서 보면 case "2" 인 경우는 xss_check_3의 단계를 거쳐서 출력되는데
xss_check_3의 함수를 찾아보면
function xss_check_3($data, $encoding = "UTF-8"){
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}
htmlspecialchars함수로 입력값을 우회한다.
htmlspecialchars함수는 php에서 제공하는 기본 함수로,HTML에서 사용하는 특수문자를 UTF-8로 변환한다
htmlspecialchars에서 반환하는 특수문자는 &,",',<,> 이다
따라서 htmlspecialchars 함수를 사용하여 태그에 사용되는 문자들을 인식하지 않게 인코딩하면 대응방안으로 사용할수있다
'OWASP top 10 ' 카테고리의 다른 글
[A1] SSI 코드 인젝션 (0) | 2017.12.02 |
---|---|
[A1] PHP 코드 인젝션 (0) | 2017.12.02 |
[A1] OS 커맨드 인젝션(다시 공부하기) (0) | 2017.12.02 |
[A1] HTML 인젝션 (0) | 2017.12.02 |
[OWASP] 비박스 환경 구성하기 (0) | 2017.12.01 |