이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
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 태그에 사용되는 문자들을 인식하지 않게 인코딩 해줍니다.
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) SQL Injection (POST/Search) (0) | 2019.07.10 |
---|---|
비박스(bWAPP) SQL Injection (GET/Search) (0) | 2019.06.24 |
비박스(bWAPP) PHP Code Injection (0) | 2019.04.12 |
비박스(bWAPP) OS Command Injection (0) | 2019.01.23 |
비박스(bWAPP) iFrame Injection (0) | 2019.01.21 |