Alictf linux exploit解题

1.加载模块

sudo insmod module
dmesg看到有hook字样,猜测可能是模块劫持了系统调用,或者也可能是增加了系统调用

图片1
然后自己写了个程序来遍历系统调用,确认了没有增加系统调用
然后自己又写了个模块来遍历sys_call_table和sys_ia32_call_table数组,确认是改动了系统调用.而且系统调用号是184

图片2

同时/proc/kallsyms中的符号表和sys_call_table[184],看到了new_kbof_test函数,也就是说,syscall(184),会执行到new_kbof_test函数

图片3

于是就分析new_kbof_test函数的功能和参数.
2.反汇编rootme.ko,分析函数功能和参数
(附件有详细的反汇编报告)

图片4
objdump -d rootme.ko > 1.txt  反编译代码段
readelf -r rootme.ko > 2.txt     读重定位段的信息
根据重定位段的信息2.txt和反汇编代码的结果1.txt,分析出了这两个函数的功能.
new_kbof_test函数,接收两个参数,第一个是字符串地址,第二个是一个整数类型.
从用户空间拷贝字符串到内核空间,然后调用了buffer_overflow_test函数.
在buffer_overflow_test函数中,又复制相同的字符串到buffer_overflow_test的栈中,不过这个时候没有检测复制的长度,导致可以覆盖rip,函数返回时就会跳到我们覆盖的rip,利用开始.
3.编写exploit
计算rip的偏移地址:0x100+8*3  0x100是buffer_overflow_test函数的栈大小,8*3是因为push了三个8字节的寄存器.
将rip覆盖成exploit中用户态中kernel_code函数的地址.

图片5
编译方法:

来张提权成功的截图:

图片6

 

Exp.c:

Test.c:

Myopen.c:(编译Myopen.c的Makefile在下面)

编译Myopen.c的Makefile:

all:

反汇编的结果(用ida看很简单就能看出来,不过当时不清楚ida):

【via@91Ri.org团队】