Writeup

[Hackthebox] Spookifier Challenges Writeup

이둥둥 2025. 2. 20. 14:31

hackthebox ctf에서 출제되었던 웹 챌린지 문제다

주어진 IP에 들어가면 이렇게 사용자에게 인풋 텍스트를 받는다

 

 

테스트로 hello를 입력해보면 이렇게 4가지 폰트로 변환해준다

 

 

인풋 영역에 5+1을 입력해보니 그대로 출력된다

인풋을 검증이나 필터링하는 부분이 있는지 소스코드를 살펴보자

 

routes.py

get 요청에서 전달한 'text' 파라미터를 받아서  spookify 함수로 변환하고

index.html에 렌더링하는 함수임을 알 수 있다

 

 

spookify 함수를 살펴보면 text를 change_font 함수로 바로 전달하는데

사용자가 입력한 텍스트를 검증하는 부분이 전혀 없어 이 점을 이용하면 될 것 같다.

 

 

Server-Side Template Injection(SSTI) 취약점
: 공격자가 악의적인 페이로드를 템플릿에 주입해서 서버 사이드에서 실행되도록 하는 취약점

 

 

 

 

Mako syntax를 검색해보니까 ${} 이런 형식으로 입력해야 하는 것 같다

${1+5} 를 입력해보니까 결과가 6이라고 출력해준다

 

 

 

위와 같은 방식으로 flag.txt을 열어서 내용을 읽게 시도해보자

처음에는 ${cat /flag.txt}을 시도했는데 실패했음

파이썬으로 작성되었으니 파이썬에서 사용하는 방식으로 작성해보면

 

 

HTB{Flag} 이렇게 플래그 값을 찾아냈다!

 


 

hackthebox에서 제공되는 공식 Writeup을 보니 다른 방식도 가능한것 같다

$ curl ip:port/static/css/flag.txt