pwn.college Kernel Security

前言

  • 根据要求只贴前两个的WriteUp,后续只写思路
  • 每个题的驱动都是跑在qemu虚拟机的,开启题目后需要vm connect连上qemu,此时lsmod就可以看见安装好的驱动

level1.0

1
echo pwvrvqitxoodqbxa > /proc/pwncollege | head /proc/pwncollege

level1.1

1
echo ufyqfbjmxahuzqzi > /proc/pwncollege | head /proc/pwncollege

level2.0

1
echo clxyrfcckjpuexis > /proc/pwncollege | dmesg

level2.1

1
echo ccvqignnvespgtyp > /proc/pwncollege | dmesg

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
2
3
4
5
struct buf{
long size;
char shellcode[4096];
long call_addr;
};

传入的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/
作者
W4y2Sh3ll
发布于
2024年7月15日
许可协议