SSTI in Smarty
이번 문제는 SSTI(Server Side Template Injection) 문제이다.
어떤 템플릿인지 확인할 때에는 아래의 사진대로 진행하면 확인할 수 있다.
출처 - https://portswigger.net/blog/server-side-template-injection
먼저 어떤 템플릿을 사용하고 있는지 확인하기 위해 ${7*7}를 입력해보았다.
그 결과 $49가 떴다.
일단 7*7인 결과가 출력되어서 취약하다고 판단하여 a{*rootable*}b를 입력하였는데 ab가 출력되었다.
여기서 난 Smarty Template를 쓰는구나 판단하여 이에 대한 SSTI 기법을 찾아보았다.
가장 기본적으로 Smarty일 경우 php 태그를 이용하여 명령어를 실행시킬 수 있다.
그래서 아래와 같이 id를 출력시켜보았다.
{php}echo `id`;{/php}
하지만 다음과 같이 에러가 발생하였다.
일단 에러메시지를 통해 smarty임이 확실해졌지만 {php} 태그를 허용되지 않는다고 한다.
이에 따라 알아본 결과 php 태그를 허용하지 않는 옵션이 존재한다고 한다.
상세한 것은 다음 링크를 참고하자.
https://www.smarty.net/docs/en/advanced.features.tpl#advanced.features.security
그래서 다른 방식으로 진행을 해보았다.
아래의 링크를 참고하여 {include_php} 태그를 이용해보았지만, 이 경우는 다음과 같이 deprecated 되었다고 한다.
https://www.smarty.net/docsv2/en/language.function.include.php.tpl
그래서 다음으로 이와 비슷한 {include} 태그를 이용해보았는데 이를 통해 취약점이 leak되었다.
이를 통해 다음과 같이 FLAG를 획득할 수 있었다.
참고)
https://portswigger.net/blog/server-side-template-injection
https://www.smarty.net/docsv2/en/language.function.include.tpl