SSTI 와 관련된 웹해킹 문제
SSTI란 Server Side Template Injection의 약자로
템플릿 엔진으로 웹 어플리케이션을 구동하는 경우, 공격자가 템플릿 구문을 악용하여
삽입할 수 있는 취약점이다.
이렇게 템플릿 구문이 삽입되게 되면, 원격 명령어 실행도 가능하게 되는 위험한 취약점이다.
문제 페이지에 접속하면 이런 화면이 나온다.
아직 완성되지 않은 웹 서버를 묘사해놓은것 같은데
Site still under construction 이라고 되어있고
아래쪽에 Proudly powered by Flask/Jinja2 라고 적혀있다.
이 부분이 아주 큰 힌트이다.
일단 공격 벡터를 찾기 위해 이것저것 시도해봤다.
URL에 없는 경로를 입력할 경우
404 Error 페이지로 이동하게 되는데,
404 페이지에서 나오는 안내문구에 URL에서 입력한 경로가 그대로 찍혀서 나오는 것을 볼 수 있다.
이 부분이 공격 벡터라고 의심했다.
이 부분이 벡터가 맞는지 확인하는 방법은 아주 쉽다.
사전에 웹서버가 Jinja2 를 사용한다는것을 알고있었기 때문에,
이 그림에서 Jinja2 에 해당하는 {{7*7}} 을 입력해보면 된다.
URL에 /{{7*7}} 이라고 입력하면
URL 인코딩이 되어서 %7B%7B7*7%7D%7D 라고 보이게 된다.
아래쪽 안내메세지에는 당연히 {{7*7}} 이 출력되어야 하지만,
7*7 계산이 되어서 49가 출력되는것을 볼 수 있다.
이렇게 되면 SSTI 취약점이 존재하는 것이다.
이 문제는 아무런 필터링을 하고 있지 않기 때문에 아주 쉽다.
일단 SSTI 문제는 보통 SSTI 취약점을 통해 서버의 운영체제 명령어를 실행시키는것을 목표로 한다.
운영체제 명령어를 사용하기 위해 os 라이브러리를 불러와야 하는데,
/{{config.__class__.__init__.__globals__['os']}}
라고 입력하면 os 라이브러리가 있는것을 확인할 수 있다.
/{{config.__class__.__init__.__globals__['os'].popen('ls').read()}} 라고 입력하면
웹을 통해 ls 명령어를 실행시킬 수 있다.
실행결과를 보면 현재경로에 flag.txt 파일이 있는것을 확인할 수 있다.
읽어야할 파일이 무엇인지 알았으니
/{{config.__class__.__init__.__globals__['os'].popen('cat flag.txt').read()}}
라고 입력하면 flag.txt 파일을 읽을 수 있고, 플래그를 획득할 수 있게된다.
'워게임 > HackTheBox' 카테고리의 다른 글
[HackTheBox] baby CachedView - 웹해킹 / Flask (59) | 2022.10.31 |
---|---|
[HackTheBox] misDIRection - MISC / Shell script (43) | 2022.10.21 |
[HackTheBox] Phonebook - 웹해킹 / LDAP Injection / Python (67) | 2022.10.10 |
[HackTheBox] Pusheen Loves Graphs - MISC / IDA (46) | 2022.10.05 |
[HackTheBox] Emdee five for life - 웹해킹 / Requests / BeautifulSoup (48) | 2022.09.29 |