본문 바로가기
Misc

[HackCTF] 달라란 침공

by L3m0n S0ju 2021. 9. 15.

 

 

 

 

문제에 접속하면 아래와 같은 문구가 출력됩니다.

 

 

 

우리 악당들이 모여 달라란을 차지하자!

1) 달라란 은행
2) 보랏빛 요새
3) 달라란 거리
input ) 

 

 

실험 결과

input 1 -> 덧셈, 뺄셈 20 문제

input 2 -> 곱하기, 나누기 30 문제

input 3 -> 사칙연산 40 문제

 

 

사실상 노가다 문제입니다. 개념은 간단하지만 생각보다 푸는데 오래 걸렸습니다. 그 이유는 다음과 같습니다.

 

첫번째는 recvuntil과 sendline에서 작은따옴표 ' ' 를 이용해서 문자를 송수신하려 했으나 여러가지 오류들로 인해 큰따옴표" "를 사용하는게 안정적입니다. 그리고 앞에 b를 붙여서 b" "와 같은 형식으로 작성해야 에러메시지가 발생하지 않습니다.

 

두번째는 나눗셈 결과를 int형으로 변환해야합니다. 변환하지 않아도 4번 문제 정도까지는 문제없이 진행되다가 중간에 어떤 오류로 인해 멈추게 되는데 처음부터 오류가 생기는게 아닌 랜덤으로 1~5 번 문제에서 멈추기 때문에 원인을 찾기 힘들었습니다. 익스플로잇 코드는 아래와 같습니다.

 

 

 

 

 

 


from pwn import *
 
r=remote("ctf.j0n9hyun.xyz",9003)
#context.log_level='debug'

 

#stage 1
r.recvuntil(b"input ) ")
r.sendline(b"1")

for i in range(20):
    print("[+] " + str(i+1) + "'th trial")
    if(i != 0):
        r.recvuntil(b"\n")
    r.recvuntil(b"\n")
    num1 = int(r.recvuntil(b" ")[0:-1])
    sign = r.recv(1)
    num2 = int(r.recvuntil(b"\n")[1:-1])
    if(sign == b'+'):
        print(str(num1) + " + " + str(num2))
        num3 = num1 + num2
    if(sign == b'-'):
        print(str(num1) + " - " + str(num2))
        num3 = num1 - num2
    print(num3)
    r.sendline(str(num3))

 

 

#stage 2
r.recvuntil(b"input ) ")
r.sendline(b"2")

for i in range(30):
    print("[+] " + str(i+1) + "'th trial")
    if(i != 0):
        r.recvuntil(b"\n")
    r.recvuntil(b"\n")
    num1 = int(r.recvuntil(b" ")[0:-1])
    sign = r.recv(1)
    num2 = int(r.recvuntil(b"\n")[1:-1])
    if(sign == b'*'):
        print(str(num1) + " * " + str(num2))
        num3 = num1*num2
        print(num3)
    if(sign == b'/'):
        print(str(num1) + " / " + str(num2))
        num3 = int(num1/num2)
        print(num3)
    r.sendline(str(num3))

 

#stage 3
r.recvuntil(b"input ) ")
r.sendline(b"3")

for i in range(40):
    print("[+] " + str(i+1) + "'th trial")
    if(i != 0):
        r.recvuntil(b"\n")
    r.recvuntil(b"\n")
    num1 = int(r.recvuntil(b" ")[0:-1])
    sign = r.recv(1)
    num2 = int(r.recvuntil(b"\n")[1:-1])
    
    if(sign == b'+'):
        print(str(num1) + " + " + str(num2))
        num3 = num1 + num2
        print(num3)
    if(sign == b'-'):
        print(str(num1) + " - " + str(num2))
        num3 = num1 - num2
        print(num3)
    if(sign == b'*'):
        print(str(num1) + " * " + str(num2))
        num3 = num1*num2
        print(num3)
    if(sign == b'/'):
        print(str(num1) + " / " + str(num2))
        num3 = int(num1/num2)
        print(num3)
    r.sendline(str(num3))

r.interactive()

 

 

 

 


플래그

'Misc' 카테고리의 다른 글

[HackCTF] DNA  (0) 2021.10.09
[HackCTF] QRCODE  (0) 2021.09.10
[HackCTF] Who am I  (0) 2021.09.10
[HackCTF] BF  (0) 2021.09.10
[HackCTF] Baseball Price  (0) 2021.09.10

댓글