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
'Writeup' 카테고리의 다른 글
[Dreamhack] 리버싱 rev-basic-0 rev-basic-1 Writeup (0) | 2025.02.20 |
---|---|
[Hackthebox] Dancing Challenges Writeup (0) | 2025.02.20 |
[Hackthebox] Meow Challenges Writeup (0) | 2025.02.20 |
[Tryhackme] Crack the hash Writeup (0) | 2025.02.18 |
[Tryhackme] c4ptur3-th3-fl4g(CTF challenge walkthrough) (0) | 2025.02.17 |