0x01 背景
栈溢出是最基本的一个漏洞,学习 pwn 从栈溢出开始学习是比较简单的入门方式。之前也研究过 linux 内核,但因为种种原因不得不放弃。现在跟着安卓版主学习了几天linux内核漏洞,收获了不少知识,开始自己梳理和分享自己的笔记,特此感谢版主老师的教导
0x02 内核基本知识
Canary: 是防止栈溢出的保护,一般在 ebp-0x8 的位置,学习 linux pwn 的基本知识,不细讲
KASLR:地址随机化,类似 ASLR
SMAP:内核保护机制,内核态不可使用用户态的数据
SMEP:内核保护机制,内核态不可执行用户的代码
commit_creds(prepare_kernel_cred(0)) :获得 root权限功能函数
file_opertion : Linux使用file_operations结构访问驱动程序的函数,这个结构的每一个成员的名字都对应着一个调用ioctl系统调用来控制设备
获取基址
vmlinux_base: 内核加载基址,有了这个可以绕过 kaslr 实现内核的其他函数
获取方式:head /proc/kallsyms 1,startup对应的地址就是基址
core_base:驱动加载基地址
查看基地址方式
cat /proc/modules
cat /proc/devices
cat /proc/kallsyms
lsmod
dmesg
0x03 分析代码
题目:2018 强网杯CTF pwncore
保护机制
从checksec我们可以知道开启canary和nx enable
在start.sh可以看到内核没有开启smep和smap,但开启kaslr
程序逻辑
ioctl
首先是ioctl,通过ioctl可以实现core_read和修改off和core_core_func三个功能,我们可以控制ioctl的三个参数,就是