-
[Misc] 달라란 침공CTF write_up/Hack CTF 2019. 6. 5. 13:44
해당 netcat에 들어가 보면 다음과같은 문자열이 나옵니다.
1 2 3 의 선택 항목이 있지만 달라란 은행을 선택하고 보니 덧뺄셈이 나오는 것을 확인했습니다.
2번을 선택하면 곱셈 나눗셈이 나오는걸 확인했습니다.
1번을 선택해서 다풀면 2,3 번을 선택하는 과정이 나오는 것을 보아
1 -> 2 -> 3 을 다푸는 것으로 생각이 됩니다.
사용자가 직접 모든 연산을 다 할수 없기에 from pwn import * 를 이용해서 한번 코드를 작성해 보겠습니다.
from pwn import * p = remote('ctf.j0n9hyun.xyz',3033) def stage1(): print(p.recvuntil('input )')) print(p.send("1\n")) for i in range(20): p.recvline() data = p.recvline() print(data.replace('\n','').split(' ')) data_list = data.replace('\n','').split(' ') num1 = int(data_list[0]) operator = data_list[1] num2 = int(data_list[2]) result = 0 if operator == '+': result = num1 + num2 elif operator == '-': result = num1 - num2 elif operator == '*': result = num1 * num2 elif operator == '/': result = num1 / num2 elif operator == '%': result = num1 % num2 print(p.recvuntil('? : ')) print(p.sendline(str(result))) print(p.recv()) def stage2(): print(p.recvuntil('input )')) print(p.send("2\n")) for i in range(30): p.recvline() data = p.recvline() print(data.replace('\n','').split(' ')) data_list = data.replace('\n','').split(' ') num1 = int(data_list[0]) operator = data_list[1] num2 = int(data_list[2]) result = 0 if operator == '+': result = num1 + num2 elif operator == '-': result = num1 - num2 elif operator == '*': result = num1 * num2 elif operator == '/': result = num1 / num2 elif operator == '%': result = num1 % num2 print(p.recvuntil('? : ')) print(p.sendline(str(result))) print(p.recv()) def stage3(): print(p.recvuntil('input )')) print(p.send("3\n")) for i in range(40): p.recvline() data = p.recvline() print(data.replace('\n','').split(' ')) data_list = data.replace('\n','').split(' ') num1 = int(data_list[0]) operator = data_list[1] num2 = int(data_list[2]) result = 0 if operator == '+': result = num1 + num2 elif operator == '-': result = num1 - num2 elif operator == '*': result = num1 * num2 elif operator == '/': result = num1 / num2 elif operator == '%': result = num1 % num2 print(p.recvuntil('? : ')) print(p.sendline(str(result))) print(p.recv()) if __name__ == '__main__': stage1() stage2() stage3() print(p.recv())
Flag : HackCTF{Lets_Enj0y_hearthst0ne_adventure_M0d3}
'CTF write_up > Hack CTF' 카테고리의 다른 글
[Reversing] Handray (0) 2019.06.27 [Forensics] Magic PNG (2) 2019.06.25 [Web] Hidden Flag (0) 2019.05.28 [Web] Time (0) 2019.05.22 [Web] Input Check (0) 2019.05.22