3학년1학기 2주차_웹해킹 과제(simple-ssti)

2025. 4. 26. 01:23hacking : p_study/webhack

simple-ssti | 워게임 | Dreamhack | 워게임 | Dreamhack

 

simple-ssti

존재하지 않는 페이지 방문시 404 에러를 출력하는 서비스입니다. SSTI 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference Server-side Basic

dreamhack.io

✅ 내 풀이

 

SSTI 취약점을 이용해 flag를 획득하라고 하는데 나는 해당 취약점을 잘 몰라서 공부를 먼저해봤다.

Server-Side Template Injection 으로  SSTI로도 불리는데, 어플리케이션에 적용되어 있는 웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 포함된 상태에서 서버 측에서 템플릿 인젝션이 발현되는 공격 의미한다.

 

 

SSTI 취약점은 서버 측에 Template이 구성되어 있고 사용자 입력 값이 기존 Template에 삽입되는 경우 공격자는 Template 구문을 이용해 악성 페이로드를 삽입해 공격자가 원하는 액션을 수행하도록 하는 공격이다. 

위 그림은 공격자가 kw 코드에 {{2*2}}라는 구문을 입력해 결과인 4가 회신되며 공격자가 삽입한 구문이 실행되는 과정이다.

 

SSTI 취약점은 웹 문서 로드 시 동작하는 렌더링에 관여할 수 있어 Client-Side와 Server-Side 취약점으로 연결될 수 있어 위험도가 높다. 

 

[ 참고한 공부자료 ]

Server-Side Template Injection: SSTI 정리

 

Server-Side Template Injection: SSTI 정리

SSTI 취약점이란 웹 어플리케이션에 적용되어 있는 웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 포함된 상태에서 서버 측에서 템플릿 인젝션이 발현되는 공격을 의미한다. 웹 템플릿 엔진

hi-sojeong.tistory.com

 

일단 서버를 생성해서 들어가봤다.

 

 

 

각각의 페이지에 들어갔더니 위와 같이 되어있었다.

 

 

flag.txt에 있다고 해서 위와 같이 시도해봤지만,, 이렇게 풀리면 너무 간단하겠지? 다른 방법을 시도해보기위해 파일을 확인해보았다.

#!/usr/bin/python3
from flask import Flask, request, render_template, render_template_string, make_response, redirect, url_for
import socket

app = Flask(__name__)

try:
    FLAG = open('./flag.txt', 'r').read()
except:
    FLAG = '[**FLAG**]'

app.secret_key = FLAG


@app.route('/')
def index():
    return render_template('index.html')

@app.errorhandler(404)
def Error404(e):
    template = '''
    <div class="center">
        <h1>Page Not Found.</h1>
        <h3>%s</h3>
    </div>
''' % (request.path)
    return render_template_string(template), 404

app.run(host='0.0.0.0', port=8000)

 

코드를 살펴보니, app.secret.key로 FLAG값이 들어가고, /는 누르면 그냥 index.html을 랜더링해서 보여준다. 그리고 errorhandler(404)를 쓰는데 저부분도 확인을 해봐야겠다.

 

접근 자체는 나쁘지 않았던것 같은데, 문제 푸는 방법을 좀 더 공부하고 고민해봐야할 것 같아서 풀이한 내용을 찾아봤다.

 

 

웹 템플릿이란?

웹 템플릿 엔진은 웹 템플릿과 웹 컨텐츠 정보를 처리하는 목적으로 설계된 소프트웨어

웹 서버를 구축할 때 코드에 보이는 {{content}}, {%content%} 이러한 형식으로 되어있는 대부분이 템플릿 엔진을 사용하기 위해 작성된 템플릿 구문을 의미한다.

→ SSTI (Server Side Template Injection) 취약점은 공격자가 서버측의 기본 템플릿 구문을 이용하여 악성 페이로드를 삽입한 다음 서버 측에 실행되면서 생기는 취약점. (웹 템플릿 엔진마다 사용되는 페이로드 다를 수 있다.)

→ 만약 사용자가 입력한 값이 템플릿 구문으로 인식하게 할 수 있다면 해당 템플릿 구문을 이용하여  SSTI 취약점을 발생시켜 RCE(Remote Code Execure) 취약점으로 연계될 수 있다.

 

 

 

[Dreamhack] Level1: simple-ssti

 

[Dreamhack] Level1: simple-ssti

🛎️ Access 존재하지 않는 페이지 방문시 404 에러를 출력하는 서비스입니다.SSTI 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.   👾 Exploit Algorithm & Payload> app.py

yun-2.tistory.com

 

/{{8*8}}  요청을 보냈을 때 아래와 같이 출력되었다.

 

 

이제 플래그 값을 찾아보자.

 

따라란 Ssti를 좀더 심도 있게 공부해보면 좋을듯..!