이번 문제는 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
'Hacking > Web' 카테고리의 다른 글
[번역] Encoding Web Shells in PNG IDAT chunks (0) | 2019.09.25 |
---|---|
XXE Injection (0) | 2019.08.31 |
Time Based SQLI payload (0) | 2019.08.30 |
SQLI Payload with python [post 방식] (0) | 2019.08.29 |
OS Command Injection Trick (0) | 2019.08.21 |