KASLR绕过及提权利用(CVE-2023-35001)

KASLR绕过及提权利用(CVE-2023-35001)
最新回答
软耳兔兔

2026-07-12 05:38:12

KASLR绕过及提权利用(CVE-2023-35001)

  • KASLR绕过:利用byteorder操作和netlink组订阅泄露rule中的handle字段,进而泄露内核基地址。通过伪造range表达式(总大小0x23,对齐后0x28字节),在data_from和data_to区域伪造表达式。
  • 伪造表达式:选用byteorder表达式(8字节)和meta表达式(3字节),利用meta表达式非法值不终止执行的特性,实现连续伪造。
  • 提权利用:伪造payload表达式,将提权payload注入nft_do_chain函数返回地址下方。采用commit_creds(prepare_kernel_cred(0))构造root凭证,切换命名空间,最后通过蹦床返回用户空间完成提权。

KASLR绕过

  • 泄露内核基地址:通过byteorder操作和netlink组订阅,泄露rule中的handle字段,进而获取内核基地址。
  • 伪造表达式:利用已泄露的模块基地址,伪造range表达式(结构体大小0x23,对齐后0x28字节),在data_from和data_to区域伪造其他表达式。
  • 选择伪造表达式:

    byteorder表达式:占用8字节,用于初步伪造。

    meta表达式:占用3字节(sreg、len、op),即使meta->key为非法值,也不会终止后续规则表达式的执行。

  • 伪造规则头:设置len为0x20,islast为0,确保伪造规则的有效性。
  • 泄露效果:即使内核抛出异常,后续表达式仍能正常执行,成功泄露内核地址。

提权利用

  • 伪造payload表达式:利用伪造的range表达式空间,伪造payload表达式(结构体大小见代码片段),将提权payload注入到nft_do_chain函数返回地址下方。
  • 提权payload构造:

    使用commit_creds(prepare_kernel_cred(0))构造root凭证。

    通过find_task_by_vpid、init_nsproxy和switch_task_namespaces切换命名空间。

    利用蹦床swapgs_restore_regs_and_return_to_usermode返回到用户空间,完成提权。

  • 完整EXP:参考GitHub链接获取完整EXP代码。

关键点总结

  • KASLR绕过:通过特定操作泄露内核地址,为后续提权提供基础。
  • 表达式伪造:精心选择并伪造表达式,确保既能泄露信息又不影响系统稳定性。
  • 提权执行:利用伪造的payload表达式,将提权代码注入内核并执行,最终获得root权限。

注意事项

  • 在进行此类操作时,需确保充分理解系统机制和潜在风险。
  • 提权操作可能违反系统安全策略,应在合法授权范围内进行。
  • 参考提供的EXP代码时,需根据实际环境进行调整和优化。