달라란 침공은 Pwntool이 아직 익숙하지 않을 때 시도하면 좋은 문제이다.
만약 문제를 못 풀어 보신분은 삽질을 하더라도 혼자서 시도해보길 바란다.
Writeup
Information
nc를 접속하면 다음과 같은 화면이 나온다.
이 중 하나를 선택하여 입력해주면
다음과 같이 간단한 연산 문제가 나오고 문제를 맞히면 다음 문제가 나온다.
이 문제는 Pwntlool을 이용하여 데이터를 뽑아낸 후에 연산 후 결과 값을 보내주면 되는 문제이다.
Code
코드가 좀 개떡이라 죄송합니다..
문제는 달라란 은행, 보라빛 요새, 달라란 거리 3개의 챕터? 가 있으며 각 챕터는 다음과 같다.
- 달라란 은행
- '+', '-' 연산
- 20문제
- 보라빛 요새
- '*', '/' 연산
- 30문제
- 달라란 거리
- '+', '-', '*', '/' 연산
- 40문제
from pwn import *
context.log_level = 'debug'
p=remote("ctf.j0n9hyun.xyz",9003)
p.sendlineafter("input )",'1')
for i in range(20):
p.recvuntil("\x0a")
if (i!=0):
p.recvuntil("\x0a")
x = int("".join(p.recvuntil('\x20')[0:-1]),10)
A = p.recvn(1)
y = int(p.recvuntil('\x0a')[1:-1],10)
if (A == '+'):
p.sendline(str(int(x+y)))
if (A == '-'):
p.sendline(str(int(x-y)))
p.sendlineafter("input )",'2')
for i in range(30):
p.recvuntil("\x0a")
if (i!=0):
p.recvuntil("\x0a")
x = int("".join(p.recvuntil('\x20')[0:-1]),10)
A = p.recvn(1)
y = int(p.recvuntil('\x0a')[1:-1],10)
if (A == '*'):
p.sendline(str(int(x*y)))
if (A == '/'):
p.sendline(str(int(x/y)))
p.sendlineafter("input )",'3')
for i in range(40):
p.recvuntil("\x0a")
if (i!=0):
p.recvuntil("\x0a")
x = int("".join(p.recvuntil('\x20')[0:-1]),10)
A = p.recvn(1)
y = int(p.recvuntil('\x0a')[1:-1],10)
if (A == '*'):
p.sendline(str(int(x*y)))
if (A == '/'):
p.sendline(str(int(x/y)))
if (A == '+'):
p.sendline(str(int(x+y)))
if (A == '-'):
p.sendline(str(int(x-y)))
p.interactive()