ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.