pwn.college Kernel Security
前言
- 根据要求只贴前两个的WriteUp,后续只写思路
- 每个题的驱动都是跑在qemu虚拟机的,开启题目后需要
vm connect
连上qemu,此时lsmod
就可以看见安装好的驱动
level1.0
1 |
|
level1.1
1 |
|
level2.0
1 |
|
level2.1
1 |
|
level3.0
write写”xpmylzhkfevejscw”
level3.1
同 level3.0
level4.0
ioctl传递”emrbpgldsrexybrh”
level4.1
同 level4.0
level5.0
ioctl传递后门函数的地址即可
level5.1
同 level5.0
level6.0
直接传shellcode过去,它会自己执行
level6.1
同 level6.0
level7.0
需要传一个结构体,字段如下:
1 |
|
传入的shellcode会被复制到内核开辟的一段可执行地址内,该地址固定,将call_addr设置为该地址就可以跳过去执行shellcode
level7.1
同 level7.0
level8.0
这个卡了两天0.0,需要注意下面几个点:
- /proc/challenge只有root用户才有RW权限
- /challenge下除了babykernel_level8.1.ko还有带SUID的ELF程序babykernel_level8.1
- babykernel_level8.1可以执行任意shellcode,但是seccomp禁用了除了write外的所有系统调用;babykernel_level8.1.ko的write可以接收用户空间的shellcode以执行
- 因为babykernel_level8.1有SUID所以可以读写/proc/challenge
- 思路就是通过babykernel_level8.1向/proc/challenge写入shellcode在内核空间中关闭seccomp,然后在用户空间ORW读取flag
- 注意通过current_task_struct->thread_info.flags关闭seccomp只能作用于该进程,通过system(‘/bin/sh’)获取的shell是子进程,seccomp仍然生效
level8.1
同 level8.0
level9.0
可以控制第一个参数call任意函数,run_cmd(“chmod 777 /flag”)
level9.1
同 level9.0
level10.0
和level9一样,但是开启了KASLR,泄露printk地址后计算run_cmd偏移再通过溢出修改printk指针为run_cmd
level10.1
同 level10.0
level11.0
level11.1
pwn.college Kernel Security
https://www.w4y2sh3ll.top/2024/07/15/pwn-college-Kernel-Security/