文章目录
第一章 写在前面
本篇是老表带你学linux kernel pwn
入门系列的第五篇,也是入门系列的最后一篇。选取的是xman成都营中的level5,暂时没有在网上找到相关的思路介绍文章,通过前面四篇的积累,尝试解决level5
给出解决过程。最后打算从不同kernel pwn
的漏洞类型和cve
的分析与利用入手。或者积累别的东西去,再说啦。
第二章 基础知识
第三章 目标准备与分析
3.1 逆向分析baby.ko
本小节逆向baby.ko
,梳理驱动执行逻辑,解决分析时遇到的问题,为寻找漏洞位置做好准备
3.1.1 IDA
中堆栈不平衡的解决方法
一上来按F5
就报错,查了一下获得解决方案
出现此错误消息的原因是由于指定的地址大于初始栈指针的地址,如果只是为了F5
通过,可以按如下方式解决
-
打开栈指针检查
O p t i o n → G e n e r a l → D i s a s s e m b l y 下 勾 选 S t a c k p o i n t e r Option\to General\to Disassembly下勾选Stackpointer Option→General→Disassembly下勾选Stackpointer
-
调整栈指针便宜
地址后出现的绿色数字表示栈指针和初始栈的偏移,再出现问题的
0x5A
那一行使用Alt+K
,中间把偏移量减回来即可
3.1.2 init_moule
函数
注册了一个杂项设备,没什么问题
__int64 __fastcall init_module(__int64 a1, __int64 a2)
{
_fentry__(a1, a2);
return misc_register(&off_200);
}
3.1.3 free_get_preaddr
函数
a 1 → i s _ e m p t y , a 3 → f p a1\to is\_empty,a3\to fp a1