네 안녕하세요. Godhaword입니다.
이번에 쓸 글은 SSTI, Server-Side Template Injection 입니다.
목차는
1. Server-Side Template 을 사용하는 이유
2. Server-Side Template 의 취약점
3. Server-Side Template Injection 을 하는 방법
4. 예제 문제 풀이
순으로 쓰겠습니다.
1. Server-Side Template 을 사용하는 이유
2. Server-Side Template 의 취약점
위와 같은 장점을 갖고 있기 때문에 많은 페이지에서 템플릿을 사용합니다. CTF를 풀다보면 FLASK 에서 주로 SSTI 관련 문제가 나오고, 이외에도 DJANGO, ASP, JSP 같은 페이지에서도 자주 사용됩니다.
하지만 Server-Side Template을 사용하게 되면, 치명적인 단점이 생기는데, 만약 RCE(Remote Code Excute) 가 템플릿의 문제열이나 파일위치에 들어가게 되면 공격자가 원하는 대로 인젝션을 할 수 있게됩니다. whoami를 사용하거나 CTF에선 주로 cat flag.txt 와 같은 형식으로 사용합니다. 이러한 취약점은 eval 함수를 쓴 페이지 요소와 매우 흡사합니다.
동적데이터를 템플릿으로 저장할 때 템플릿 내에서 처리하지 않고, 템플릿 엔진의 기능을 사용하여 쓰는 것도 이 취약점을 방어하는데 큰 도움이 됩니다.
3. Server-Side Template Injection을 하는 방법
CTF 기준으로 설명하자면, 구문을 입력하는 곳에 {{config}}나 주어진 단서를 활용하여 File.open('/etc/passwd')를 인젝션하여 디렉토리를 확인하거나, 위에 언급한 것과 같이 cat flag.txt 같은 코드를 rce하여 flag 값을 뽑아오는 방법 등이 있습니다. 자료를 찾던 중에 페이지 마다 구문을 정리하여 나열해둔 사이트도 있다 하는데 지금은 그 사이트가 열리지 않아 나중에 찾는 대로 추가하겠습니다.(버프슈트의 플러그 인이나 tqlmap 으로도 어떤 템플릿 엔진을 쓰는지 구분 가능하다 합니다. 페이지마다 그에 맞는 구문을 인젝션해야합니다.)
추가적인 정보나 활용은 CTF에 관련 문제가 나오면 Write up 하는 식으로 해서 추가설명하겠습니다.
4. 예제 문제풀이
일단 문제 이름이 java server side template injection 이기 때문에 ssti 관련 문제겠구나 하고 입력창에 몇 가지 쳐봅니다.
중괄호 안에 간단한 식을 넣으면 계산이 되어 나올 줄 알았는데 그냥 받은 그대로 출력을 하네요.
찡긋
원래 테스트 해보기 위해서 저 안에 아무런 계산식이나 넣어도 되는데... 처음에 공부할때 많은 분이 7*7 을 사용하셔서 저도 사용하게 됬습니다..(국룰인가..?)
위에선 ${xxx} 안에 계산식을 넣으면 실행이 되어 간단한 명령어를 쳐봤는데 작동을 하지 않았습니다.
https://portswigger.net/blog/server-side-template-injection
그래서 위 사이트의 문장을 참고해 그 문장 안에 명령어를 넣어봤습니다.
whoami 와 같은 간단한 명령어는 이제 작동하기 시작했고.
크으...
Exploit the vulnerability in order to retrieve the validation password in the file SECRET_FLAG.txt.
문제 취지에 맞게 SECRET_FLAG.txt를 불러오자 flag값이 떴습니다
'web_security > web info' 카테고리의 다른 글
[WebHacking] XSS (Cross Site Scripting) 란?(New) (2) | 2022.05.29 |
---|---|
XSS (Cross Site Scripting) 란? (0) | 2019.09.27 |
파일 업로드(File-Upload) 취약점이란? (0) | 2019.09.21 |
RFI(Remote File Inclusion) 란? (0) | 2019.09.14 |
LFI(Local File Inclusion)란? (3) | 2019.09.13 |