Quest. HTML Injection stored이 무엇인지 간단하게 정리하시오.

 공격자가 보안이 취약한 포털 사이트나 블로그에 악의적인 스크립트가 포함된 게시물을 올린 경우 정상적인 사용자가 이 게시물을 클릭하면 해당 스크립트가 실행되는 취약점이다. HTML injection - Reflected와 달리 다수의 사용자가 게시물을 열람하면 모두 공격의 대상이 될 수 있으므로 위험하다.

 

Quest. 문제 페이지에 코드를 삽입하여 아래와 같이 이전 QUEST인 html injection - reflected (POST)를 해결하세요.

 

  ① level low

HTML Injection - Reflected(Post)의 form 태그 복사

네모 박스에 내용을 입력하고, Submit 버튼을 누르면 리스트가 하나 추가되면서 Entry에 입력한 내용이 출력된다. HTML Injection - Reflected (POST)의 화면이 HTML Injection - Stored (Blog)에 출력되게 하기 위해서 값을 입력 받는 부분인 form 태그를 복붙해서 Submit 했다. 그랬더니 Entry부분에 HTML Injection - Reflected (POST)의 입력창이 떴고, First name과 Last name에 각각 HTML코드를 작성했다.

 

level low 실행결과

그 결과 HTML Injection - Reflected (POST)과 똑같은 결과화면을 출력할 수 있었다.

 

  ② level medium

 

HTML Injection - Reflected (POST) 입력창 출력불가

level low와 동일한 방법으로 코드를 복사하면 Entry에 HTML Injection - Reflected (POST) 입력창이 아니라 단순 문자열만 출력되는 것을 볼 수 있었다.

 

htmli_stored.php

htmli_stored.php 파일을 열어보니 level medium에서는 sqli_check_3 함수를 사용한다. 그러나 나머지 low와 high일 때도 동일한 함수를 사용한다. 이 세 가지의 차이점을 찾지 못해서 주석에 달린 xss_check_4 함수로 과제를 진행했다.

 

xss_check_4 함수

xss_check_4 함수는 addslashes($data)를 반환한다. addslashes 함수는 ', ", \, NULL byte 앞에 백슬래시를 붙여서 다른 문자열들과 구분하게 해준다.(escape) 이처럼 xss_check_4 함수는 $data에 들어있는 일부 문자를 escape시키기 때문에 level medium에서 HTML Injection - Reflected (POST) 실행화면을 출력할 수 없다.

복사했습니다!