security/포너블 - pwnable.kr

pwnable.kr - [Toddler's Bottle] coin1

민사민서 2023. 2. 5. 05:02
#-*- coding:utf-8 -*-
# SyntaxError: Non-ASCII character '\xeb' 발생하므로 맨 앞에 추가
from pwn import *
# time expired 뜨네,, (인터넷 연결 문제?)
# 이전에 썼던 pwnable.kr의 ssh 계정 하나 사용해서 내부에서 스크립트 실행해보자
# nc ip port = remote(IP, PORT)
# s = ssh(user="shellshock", host="pwnable.kr", port=2222, password="guest")
# p = s.remote("localhost", 9007)
# 이래도 시간부족 -> 아예 /tmp 아래 폴더 하나 만들고 python 파일 만들어서 실행시키자

p = remote("localhost", 9007)
def binSearch(l, r):
    if l>=r:
        return l
    m = (l+r)//2
    pay = ""
    for i in range(l, m+1):
        pay += str(i)+" "
    p.sendline(pay)
    #print(pay+"\n")
    res = int(p.recvline()[:-1])
    if res%10==0:
        return binSearch(m+1,r)
    else:
        return binSearch(l,m)

p.recvuntil("- Ready? starting in 3 sec... -")
p.recvline()
p.recvline()
p.recvuntil("N=")

while True:
    N = int(p.recvuntil(" ")[:-1])
    p.recvuntil("C=")
    C = int(p.recvline()[:-1])

    # print("N="+str(N)+", C="+str(C))
    idx = binSearch(0, N-1)
    p.sendline(str(idx))
    tmp = p.recvline()
    while tmp==b"9\n": # 다 구해도 기회 남는 경우 있음 -> 정답 다시 보낸다
        p.sendline(str(idx))
        tmp = p.recvline()
    print(tmp)
    flg = p.recvn(2)
    if flg!=b"N=":
        break
print(str(flg))
p.interactive()