오래 못 할 짓 하지 않기
[ 보안 기초 ] 3. Sever side template injection 본문
728x90
Server side에서 사용자의 입력을 받아서 만들어지는 템플릿에
공격자가 원하는 정보를 얻기 위한 입력을 Injection 하는 것을 말한다.
다음과 같이 python 파일을 만들어보자
이를 실행했을 때 주소창에 ssti arguments로 들어오는 값을 template에 렌더링 해주는 결과가 나온다.
이는 우리가 보내는 정보를 바탕으로
명령어로 처리한 결과를 렌더링 해주는 것이기 때문에
아래와 같이 연산같은 기능도 해준다.
그렇다면 저기에 들어가는 게 연산이든 뭐든 명령을 넣으면 템플릿 엔진 stage에서 실행해준다는 의미가 된다.
공격자들은 분명히 이 점을 취약점으로 사용할 수 있다는 것이다.
configuration을 가져오기 위해 config를 인자로 넣어보면
이렇게 웬만한 정보들을 뱉어준다.
해결법
템플릿 엔진의 문법을 활성화시키는 {{ }} 를 필터링한다.
대표적인 방법으로는 args를 실행한 걸 바로 render하는 게 아니라
args가 들어오면 그걸 바로 html파일로 보내고 그 파일을 렌더하는 것이다.
< 이전 방식 (취약점 O) >
< 방어 >
결과
명령어들이 필터링된다.
안전하게 사용하기 위해서는
Template 파일을 별도로 분리하여 template 을 호출/render한다.
'웹 보안 > 웹 개발자가 알아야하는 보안 기초' 카테고리의 다른 글
[ 보안 기초 ] 4. XSS = Cross Side Scripting (0) | 2024.03.07 |
---|---|
[ 보안 기초 ] 2. SQL Injection (1) | 2024.03.05 |
[ 보안 기초 ] 1. 보안이란? (0) | 2024.03.04 |