본문 바로가기

드림핵

[드림핵 워게임] simple-ssti

위의 문제를 다음과 같은 방법으로 풀어보았다.

 

• SSTI 취약점이란?

SSTI는 Server Side Template Injection의 약자로, 템플릿에 공격자의 공격코드를 실어보내 서버 측에서 template injection 이 일어나게 하는 공격을 할 수 있는 취약점이다.

 

1. 페이지의 기능을 확인한다.

페이지에 방문하면 처음으로 뜨는 화면이다.

 

 

My Pages 목록에서 404Error 를 클릭하면 에러화면이 출력된다.

 

 

My Pages 목록에서 robots.txt를 클릭하면 robots.txt 문구가 출력된다.

url을 확인해보면 host 뒤에 붙은 robots.txt가 출력된 값과 일치하는 것을 볼 수 있다.

 

 

url에 test123입력해보니 출력값이 test123으로 나온다.

이것으로 url이 공격벡터인 것을 확인할 수 있다.

 

 

url에 {{1+2}}를 입력해보니 {{1+2}}가 그대로 출력되는 것이 아니라 3이 출력되는 것을 확인할 수 있다.

이것으로 이 문제의 SSTI 취약점은 jinja2 템플릿을 이용해 공격할 수 있는 것을 알 수 있다.

jinja2 템플릿은 {{ 코드 }} 의 형식으로 Injection을 할 수 있고, 내부에 파이썬 코드를 입력하여 실행할 수 있다.

 

 

 

2. 코드를 확인한다.

app.secret_key = FLAG

코드를 확인해 보면 웹 어플리케이션에서 flag가 secret_key로 저장되어 있는 것을 확인할 수 있다.

secret_key로 저장되어 있는 flag 값을 출력하기 위해서 config 객체를 활용할 것이다.

 

flask에서 쓰이는 config객체는 dictionary의 서브 클래스로, 디버깅 모드를 변경하거나 secret key를 설정하는 등 환경에 관련된 값을 설정해놓은 객체이다.

 

 

 

3. 익스플로잇 코드를 작성하여 flag를 획득한다.

config 객체에서 SECRET_KEY를 출력하는 파이썬 코드 config.['SECRET_KEY'] 를 jinja2 템플릿 안에 작성한다.

 

 

url을 입력하면 flag 내용이 출력되는 것을 확인할 수 있다.

'드림핵' 카테고리의 다른 글

[드림핵 워게임] login-1  (0) 2022.11.18
[드림핵 워게임] session  (0) 2022.11.11
[드림핵 워게임] php-1  (0) 2022.11.11
[드림핵 워게임] proxy-1  (0) 2022.11.11
[드림핵 워게임] blind-command  (0) 2022.11.11