본문 바로가기

Training/Dreamhack

[WEB] Python Error Detector 문제 풀이

Python Error Detector Write up

난이도 : 2~3

 

본 포스팅은 드림핵 워게임 - Python Error Detector 의 풀이 입니다.

출처 : Dreamhack ( https://dreamhack.io/wargame/challenges/1822 )

 


Code Overview

- app. py

157라인 : ast.parse(**request.json) 를 사용해서 정상적이면 에러가 발생하지 않고

160라인 : 문법오류 등으로 인해 exception이 발생하면 traceback.format_exc() 함수가 호출되어 에러메시지를 출력해줌

 

- secret.py

main() 함수가 실행되어 flag를 출력해주는 코드

 

 

- 문제 화면

print( 와 같이 입력하여 exception을 발생시키면 메시지가 출력됨

→ secret.py 코드를 실행한 것을 이 메시지에 출력되도록 해야할 듯

 

메시지에 ast.parse(**request.json), compile(source, filename, mode, flags, _feature_version=feature_version, optimize=optimize) 부분이 있음

 


The Exploit Technique

** : 딕셔너리 언패킹, 여러 개의 키워드 인자를 하나의 딕셔너리로 받아줌

 

ast.parse(**request.json) : **request.json은 딕셔너리의 키-값 쌍을 ast.parse() 함수의 인자로 언패킹함

requst.json = {"source":"print(", "filename":"secret.py"} → ast.parse(source="print(", filename="secret.py")

 

ast.parse() : Python 코드를 Abstract Syntax Tree(추상구문트리)로 변환함, 파이썬 코드 분석.

 

ast.parse(source, filename='<unknown>', mode='exec', *, type_comments=False, feature_version=None)

 

→ filename 파라미터에 secret.py 값을 주고, source 파라미터에서 에러를 유도하면 될듯

 

 

- Payload

{"source":"def main():\n    print(\"여기 chill chill맞은 flag야 chill guy!\")\n    print(REAL_FLAG) \n    \nREAL_FLAG =   ",
"filename":"secret.py"}

 

 

- flag 획득

'Training > Dreamhack' 카테고리의 다른 글

[WEB] Simple Note Manager 문제 풀이  (0) 2025.02.27
[WEB] Paginator v2 문제 풀이  (0) 2025.02.25
[WEB] baby-sqlite 문제 풀이  (0) 2024.11.19
[WEB] mongoboard 문제 풀이  (0) 2024.05.28
[WEB] Addition calculator 문제 풀이  (0) 2024.05.27