对KernelPwn中的ns逃逸的理解


思维导图

怎么搞的:

pid隔离:

user隔离:

mnt隔离:

完整的结构就是:

一个有趣的现象

有一个内核,笔者首先使用如下命令创建一个新的namespace:

然后使用借助漏洞实现任意地址读写,将当前task的cred的前0x28个字节修改成0,之后查看uid是65534,但是却能读特权文件flag:

对这个问题的解释是,首先看下面关于user_namespace的结构图:

我们查询id,通过current->cred->uid读出来的是全局的id,但是我们创建了新的user_ns,此时from_kuid就会通过cred找对应的user_namespace进行解析,然后到uid_map中寻找映射,但是此时这个全局id根本就没有映射过,所以在下面这段代码中就会匹配失败,返回NULL:

那么到了这里就会返回-1:

看一下65534是多少,是-2?:


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