Luv{Flag}
반응형

Client-Side Template Injection (이하 csti)는 Server-Side Template Injection(이하 ssti)와

웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 포함된 상태에서 공격자의 공격코드가 인젝션 되어진다는 것에서 같다.

말 그대로 server 와 client의 차이가 존재할 뿐이다.

Client Side에서 Javascript를 실행 할 수 있기 때문에,  XSS 취약점과 연계 가능하다는 것이 일감이다.

 

 

CSTI의 취약성은 클라이언트측 템플릿 프레임워크를 사용하는 응용프로그램이 웹 페이지에 사용자 입력을 동적으로 포함할 때 발생한다.

당연하게도 ssti와 같이 템플릿 엔진에 따라 사용할 수 있는 payload 와 공격 방식이 다르다.

대표적인 프론트엔드 프레임워크에는

Angular / React.js(typescript 기반 프레임워크), Vuejs(javascript 프레임 워크) 가 있다. 

이에 대한 자세한 설명은 링크에서 확인할 수 있다.

https://www.samsungsds.com/kr/insights/frameworks.html

 

웹 프론트엔드 프레임워크, 무엇을 쓸까?

웹 프론트엔드 프레임워크, 무엇을 쓸까?

www.samsungsds.com

 


 

Template Injection이 발생할 때 XSS공격과 연계하기 위해 js 코드 실행으로 연계하는 방법으로는 보통 constructor을 이용한다.

SSTI 와 비슷하게,

  • {{9*9}}
  • ${9*9}
  • ${{9*9}}
  • <%= 9*9 %>
  • #{9*9}

과 같은 간단한 연산들로 체크 해볼수 있다.

 

 

VueJS

vue.js에서 constructor에 접근하는 방법 중 하나인 {{_Vue.h.constructor}} 을 이용해 접근할 수 있다.

기본적으로는 다음과 같은 payload로 alert를 띄워 볼 수 있다.

{{_Vue.h.constructor("alert(1)")()}}   
{{_openBlock.constructor('alert(1)')()}} (v3)

- bypass payloads

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected

 

 


만약 페이지가 v-html 을 사용한다면 xss 를 시도해 볼수도 있다

v-html 이란
Vue 템플릿 문법을 처리하지 않고 일반 HTML 코드로 삽입.
따라서 XSS 공격에 사용될 수 있다.

 

 

아래는 공식 문서의 XSS 위협 경고이다

 

 

 

AngularJS

AngularJS template에서 constructor에 접근하는 방법으로는 {{ constructor.constructor }} 가 있다.

{{ constructor.constructor("alert(1)")() }}

 

또한, ng-app 함수로 해당 라인부터 AngularJS를 사용하겠고 선언 한다.

<html ng-app>{{ constructor.constructor("location='vuln?param='+document.cookie")() }}</html>

 

-payloads

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected
반응형

검색 태그

loading