오래 못 할 짓 하지 않기

[ 보안 기초 ] 3. Sever side template injection 본문

웹 보안/웹 개발자가 알아야하는 보안 기초

[ 보안 기초 ] 3. Sever side template injection

쫑알bot 2024. 3. 5. 20:44
728x90

Server side에서 사용자의 입력을 받아서 만들어지는 템플릿에

공격자가 원하는 정보를 얻기 위한 입력을 Injection 하는 것을 말한다.

 

 

 

 

다음과 같이 python 파일을 만들어보자

 

이를 실행했을 때 주소창에 ssti arguments로 들어오는 값을 template에 렌더링 해주는 결과가 나온다.

 

 

 

이는 우리가 보내는 정보를 바탕으로

명령어로 처리한 결과를 렌더링 해주는 것이기 때문에 

아래와 같이 연산같은 기능도 해준다.

 

 

그렇다면 저기에 들어가는 게 연산이든 뭐든 명령을 넣으면 템플릿 엔진 stage에서 실행해준다는 의미가 된다.

공격자들은 분명히 이 점을 취약점으로 사용할 수 있다는 것이다.

 

configuration을 가져오기 위해 config를 인자로 넣어보면

이렇게 웬만한 정보들을 뱉어준다.

 


 

해결법

템플릿 엔진의 문법을 활성화시키는 {{ }}  를 필터링한다.

 

 

대표적인 방법으로는 args를 실행한 걸 바로 render하는 게 아니라

args가 들어오면 그걸 바로 html파일로 보내고 그 파일을 렌더하는 것이다.

 

< 이전 방식 (취약점 O) >

 

 

< 방어 >

 

 

 

결과

 

 

 

명령어들이 필터링된다.

 


안전하게 사용하기 위해서는 

 

Template 파일을 별도로 분리하여 template 을 호출/render한다.

 

 

 

출처 :  https://www.inflearn.com/course/%EC%9B%B9-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-%EB%B3%B4%EC%95%88-%EA%B8%B0%EC%B4%88