qwb2018_core kernel_rop

qwb 2018 core


年轻人的第一个内核题目。

环境搭建

基础

解包:

# /bin/sh

mv core.cpio core/core.cpio.gz
cd core
gunzip core.cpio.gz
cpio -idm < core.cpio
rm core.cpio

重打包:

# /bin/sh
find . -print0 \
| cpio --null -ov --format=newc \
| gzip -9 > core.cpio

mv core.cpio ../core.cpio

注意修改启动脚本,内存给的大一点才能启动

qemu-system-x86_64 \
-m 128M \
-kernel ./bzImage \
-initrd  ./core.cpio \
-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet kaslr" \
-s  \
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
-nographic  \

修改init脚本

由于默认是chal权限,内核地址信息等看不到,所以还要修改脚本进入root进行调试。

修改这两个位置,第一个是取消定时关机,第二个是设置默认权限为root。

重新打包以后才生效。

调试

启动脚本里已经有了-s选项。于是可以直接使用gdb去连上去。

target remote :1234

在内核中我们使用 lsmod可以查看到模块加载地址,于是可以直接下断点, 进行调试。也可以使用符号, 通过以下指令载入符号即可。

add-symbol-file module_path base_address

因为基本是在驱动模块的漏洞利用,这样也差不多了。

漏洞

从文件中拖出来 core.ko文件,逆向, 可以看到通过ioctl如何操作。

整数截断-栈溢出

这个位置存在一个整数截断导致的栈溢出。

而name这个数据在这个位置, 我们可以通过write直接写入。

image.png

数据泄漏

这里可以向用户态写入数据,

image.png

通过ioctl可以直接修改这个off,

image.png

利用

利用也比较简单,

image.png

程序内有canary, 运行有kaslr, 于是我们要先泄漏canary、内核地址、驱动地址。

#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值