Sechack
HackCTF - 달라란 침공 풀이 본문
반응형
nc서버 하나 주길래 접속해보니까 3개의 메뉴가 있다. 1번을 선택해보니까 간단한 사칙연산이 나온다. 계산기로 계산하고 보내보니까 1차 침공 성공이라면서 2차 침공을 하라고 또다시 수식을 준다. 사칙연산 노가다 문제로 추측해볼 수 있다. 3개의 메뉴 전부 봤는데 전부 계산 노가다였다. 그래서 바로 pwntools를 이용해서 자동화 스크립트 짜줬다.
from pwn import *
def parser(data):
if b"+" in data:
arr = data.split(b"+")
first = int(arr[0])
second = int(arr[1])
r.sendlineafter(": ", str(first + second))
elif b"-" in data:
arr = data.split(b"-")
first = int(arr[0])
second = int(arr[1])
r.sendlineafter(": ", str(first - second))
elif b"*" in data:
arr = data.split(b"*")
first = int(arr[0])
second = int(arr[1])
r.sendlineafter(": ", str(first * second))
elif b"/" in data:
arr = data.split(b"/")
first = int(arr[0])
second = int(arr[1])
r.sendlineafter(": ", str(int(first / second)))
else:
print("error")
r = remote("ctf.j0n9hyun.xyz", 9003)
r.sendlineafter("input ) ", "1")
r.recvline()
data = r.recvuntil("\n").strip()
parser(data)
for i in range(19):
r.recvline()
r.recvline()
data = r.recvuntil("\n").strip()
parser(data)
print(i)
r.sendlineafter("input ) ", "2")
r.recvline()
data = r.recvuntil("\n").strip()
parser(data)
for i in range(29):
r.recvline()
r.recvline()
data = r.recvuntil("\n").strip()
parser(data)
print(i)
r.sendlineafter("input ) ", "3")
r.recvline()
data = r.recvuntil("\n").strip()
parser(data)
for i in range(39):
r.recvline()
r.recvline()
data = r.recvuntil("\n").strip()
parser(data)
print(i)
r.interactive()
주의할점이 나눗셈도 정수로 보내야 하므로 연산결과를 int함수로 감싸줘야한다. 이거 캐치 못해서 삽질 꽤 했다.
보니까 1, 2, 3번 메뉴의 문제 수도 다르고 연산하는것도 다르다.
1번은 +, -가 나오고 2번은 *, /가 나오고 3번은 사칙연산이 전부 나온다. 근데 뭐 어차피 parser함수에 전부 때려박아서 크게 상관은 없었다. 각각 메뉴마다 문제 수가 다른데 이거는 그냥 for문에다가 1000같이 큰 숫자 주고 터질때 출력되는 i를 보면 몇문제인지 알 수 있다.
pwntools에 익숙하지 않은 분들에게는 많은 도움이 되는 문제인것같다.
모든 연산을 마치면 플래그가 나온다.
플래그는 직접 푸시고 얻으시길 바랍니다.
반응형
'Wargame' 카테고리의 다른 글
김민욱님이 주신 웹해킹 문제 풀이 (0) | 2021.05.28 |
---|---|
LOS - iron_golem 풀이 (0) | 2021.05.22 |
HackCTF - 훈폰정음 풀이 (0) | 2021.05.12 |
HackCTF - wishlist풀이 (0) | 2021.05.11 |
HackCTF - babyfsb 풀이 (0) | 2021.05.11 |
Comments