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}