Python Error Detector Write up
난이도 : 2~3
본 포스팅은 드림핵 워게임 - Python Error Detector 의 풀이 입니다.
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 |