CTF中内核类题目附件说明
CTF比赛中的内核题目通常会由以下几部分组成:
- qemu-system 启动脚本(通常叫start.sh或者boot.sh)
- rootfs.cpio 虚拟机的文件系统
- bzImage 内核镜像
qemu-system 启动脚本
用于启动内核虚拟机的shell脚本,因为qemu是通过参数控制配置信息的,参数较多,所以会提供脚本。下面来分析一每个参数的意义:
1 | #!/bin/bash |
rootfs.cpio 虚拟文件系统
由cpio打包而成的文件,通常还会用gzip压缩一次。下面介绍一下cpio命令:
打包
1 | find . | cpio --null -ov --format=newc > rootfs.cpio |
参数说明:
- –null 解析空字符串’’\0’
- -o:(–create)指定运行为copy-out模式,即归档模式
- -v:给出详细信息
- -H FORMAT, –format=FORMAT 使用归档格式 FORMAT。
解包
1 | cpio -idmv < core.cpio |
参数说明:
- -i:(–extract)指定运行为copy-in模式,即提取模式
- -d:(-make-directories)当需要的时候自动创建目录
- -m:(–preserve-modification-time)保留文件的原始mtime
- -v:给出详细信息
解包出来的文件会包含一个”.ko”格式的文件,这个文件就是我们需要pwn掉的内核模块!
还会包含一个init文件,是系统开机时的初始化文件。我们可以关掉poweroff命令的定时关机,否则可能会影响到我们调试,在有必要时还可以将权限改成root方便调试。
bzImage内核镜像
里面包含了编译好的内核 vmlinux,可用extract-vmlinux 脚本进行提取
1 | ssta@E4x:/pwn/kernel/ciscn2017_babydriver/test$ ls |
vmlinux中可以提取出解题需要的gadgets