启动脚本
#!/bin/sh
stty intr ^]
qemu-system-x86_64 -enable-kvm -cpu kvm64,+smep,+smap -m 64M -kernel ./bzImage -initrd ./rootfs.cpio -append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet kaslr" -monitor /dev/null -nographic 2>/dev/null
init
#!/bin/sh
mknod -m 0666 /dev/null c 1 3
mknod -m 0660 /dev/ttyS0 c 4 64
mount -t proc proc /proc
mount -t sysfs sysfs /sys
cat /root/signature
echo 2 > /proc/sys/kernel/kptr_restrict
echo 1 > /proc/sys/kernel/dmesg_restrict
insmod /zerofs.ko
setsid cttyhack setuidgid 1000 sh
umount /proc
umount /sys
poweroff -f
主要就是凸显拒绝/proc/kallsymble泄露地址。
然后没有设置ptmx文件的权限
换言之就是能劫持tty结构体 能覆盖ptmx结构体。
看得出来逆向会非常的辛苦
看看函数我们应该能感受的出来
这显然长的很像一个文件系统。
我们要额外学习一些虚拟文件系统的知识。
我们知道一个文件系统的镜像,需要mount到目录上,才能使用。而mount是如何来识别这些文件系统的?这就靠驱动,register_filesystem将用户定义的文件系统注册,链接到系统维护的一个文件系统表上,mount遍历这张表,丛中取出对应的文件系统,并使用驱动里提供的一系列函数进行文件操作。
函数太多我们直接定位漏洞函数吧。
get_inode函数中是从文件系统镜像里去读取一个文件的inode,里面会记录文件大小等属性。
如果我们对文件里的size进行伪造,那么就可以造成溢出。
然后具体利用就跟klist那个题目一样。
利用溢出搜索到cred结构体
然后修改
提权。
exp写起来感觉好麻烦的样子
咕咕咕
大佬博客贴过来
可以去里面看看
ha1vk