Code::Security/비박스(BWAPP)

비박스(bWAPP) Server-Side Includes (SSI) Injection

태군 코드 2019. 5. 24. 16:24
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다. 

 

A1 - Server-Side Includes (SSI) Injection

 

SSI(Server-Side Includes)는 웹페이지 내에서 주로 방문자 수를 세거나 홈페이지의 로고를 수정하는 간단한 기능을 추가할 때 사용됩니다.

 

구분   HTML 문서 SSI가 포함된 HTML 문서 
 파일 구분(확장자)  *.html *.shtml 
 Tag (코드실행)  Client에서 Tag 번역 Server(웹서버,Apache)에서 SSI코드번역후 Client(웹브라우즈)로 전송 
 사용가능코드  html표준태그  웹브라우즈로 결과전송 html표준태그, SSI코드, CGI환경변수, 쉘변수등
 사용조건 없음   Web Server의 환경설정필요

 

SSI 인젝션 취약점이 있는 경우 페이지에 악의적인 코드를 주입하는 공격이 가능합니다. 그럼 해당 취약점에 대하여 살펴보도록 하겠습니다.

 

 

SSI Injection 페이지를 보시면 [First name] 과 [Last name] 입력 폼과 [Lookup] 버튼이 있는걸 확인할수 있습니다.

 

값을 입력후 [Lookup] 버튼을 눌렀을때의 페이지 입니다. 처음 URL주소를 보시면 'ssii.php' 라는 것을 알수 있고, [Lookup] 버튼을 클릭하면 'ssii.shtml' 페이지를 호출하는데, 이 페이지로 웹페이지에서 SSI 기능을 사용한다는 사실을 확인할수 있습니다. (위 표에서 파일구분(확장자) 참고)

 

해당 화면은 [Frist name]에 스크립트 코드를 입력한후 [Lookup] 버튼을 눌렀을때의 화면입니다.

취약점을 확인하기 위해서는 SSI 지시어를 First name이나 Last name 어느부분에 넣어도 상관이 없습니다. SSI 지시어는 HTML 주석과 비슷한 형태로 이루어져 있습니다.

 

테스트 코드

<script> alert("SSI Injection")</script>

<!--#echo var="DATE_LOCAL" --> 현재 시간 출력

<!--#exec cmd="명령어 입력" -->

 

해당 취약점을 확인하셨다면, 난이도를 바꿔가면서 테스트를 해보시고 각각 난이도의 코드들을 확인해 보시기 바랍니다. 난이도 상에서는 SSI 지시어를 입력하여 명령어가 실행되지 않고 그대로 문자열로 출력을 합니다. 코드를 확인하시면 xss_check_3함수를 통하여 필터링을 하는것을 확인할 수 있습니다. 

 

난이도 상에서는 xss_check_3 함수로 입력 데이터를 우회하고 있습니다. xss_check_3 함수는 functions_external.php에 정의 되어 있고, htmlspecialchars 함수로 입력값을 우회 합니다.

htmlspecialchars 함수는 PHP에서 제공하는 기본 함수로, HTML에서 사용하는 특수 문자를 UTF-8로 반환합니다.
htmlspecialchars 함수에서 반환하는 함수는 특수문자 &, ", ', <, > 입니다. 따라서 HTML 인젝션을 막으려면 htmlspecialchars 함수를 사용하여 HTML 태그에 사용되는 문자들을 인식하지 않게 인코딩 해줍니다.

 

 

반응형