CVE复现杂记


环境搭建

根据commit下载源码

到这个网站:https://web.git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=8357f6fb3d9a02ac55f0d758b9c79b4647c18bcb

将参数id换成你的commit即可下载;

调试

断点问题

当笔者用bulleye.img替换掉cpio后发现下了断点总是误报,即根本就没有运行到断点的时候,也给我停下来了,后来查资料发现:

原来是-enable-kvm这个启动选项的缘故,要用下面这种格式:

修改源码路径

在gdb中执行如下命令:

set substitute-path /absolute/server/source/path /your/local/path

编译内核

报错一:incomplete ORC unwind tables in file: vmlinux

这个错误本质上是 objtool 在生成 ORC unwind 表时,调用 libelf 的 elf_update 没有正确更新节头(section header),因而报出 “invalid section” 的警告并最终在排序 ORC 表时失败。

主要还是由于编译的内核版本过高(6.4),但是服务器的内核版本太低(4.15.0-213-generic),修改编译配置如下:

make olddefconfig                     # 确保已有 .config
scripts/config --disable CONFIG_UNWINDER_ORC
scripts/config --enable CONFIG_UNWINDER_FRAME_POINTER
make olddefconfig # 同步依赖关系
make -j$(nproc)
CONFIG_UNWINDER_ORC=n
CONFIG_UNWINDER_FRAME_POINTER=y

文章作者: q1ming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1ming !
  目录