CTF write_up/Hack CTF
[Misc] 달라란 침공
ws1004
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}