PWN Linux Kernel--初探以及环境搭建

前言(刚开始学,这篇文章会慢慢写。)

关于Linux kernel的知识点我不想写了,自己可以去看CTF Wiki。或者大佬的博客

环境搭建:

  1. Ubuntu20,我这里用的是ctfshow的Ubuntu。
  2. busybox,我用的是 busybox-1.36.1.tar.bz2
  3. Linux内核, 这里更具自己的pwn题下载对应版本的就行了。
  4. qemu, apt install qemu qemu-system qemu-user

对于busybox。下载解压完后进入busybox文件夹。

(无关内容: 我kali busybox编译安装一直失败,只能换Ubuntu了)

make menuconfig

然后配置busybox。

Busybox Settings--->
	Build Options--->
		[*]Build BusyBox as a static binary(no shared libs)

之后退出保存就行。然后编译安装就完事了。

make install

芜湖
出现这个说明成功。然后在文件下面有个 _install 文件夹。这样就成功了。
芜湖
之后可以在 _install 目录下打包整个文件系统

find . | cpio -o --format=newc > ../../rootfs.img
或者
find . | cpio -o --format=newc > ../../rootfs.cpio

芜湖

对于LInux 内核 下载地址是:Linux 内核下载地址
我下载的是linux-4.4.72.tar.gz

实战分析(部分)

准备

这里以CISCN_2017_babydriver为例

下载地址为: CISCN_2017_babydriver,例题在Kernel专题中。

把压缩包文件复制到虚拟机。
芜湖
解压

tar -xvf babydriver.tar

解压,提取文件系统:

mv ./rootfs.cpio ./rootfs.cpio.gz
gunzip rootfs.cpio.gz
cpio -idmv < rootfs.cpio

然后更改init使其方便以root运行。芜湖

strings bzImage |grep gcc
file bzImage

之后下载Linux内核
芜湖
这里选择的Linux 内核版本就是 4.4.72gcc对应的版本是ubuntu16.04。等一下编译时就要用这个版本。

芜湖
进入linux-4.4.72文件夹

make menuconfig

这里不需要配置,直接退出就行。如果报错或者依赖包有问题可以自己百度,我还没遇到过。就不写了

之后make bzImage

如果报错 canonical-certs.pem:

make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

执行scripts/config --disable SYSTEM_TRUSTED_KEYS
如果报错 canonical-revoked-certs.pem:

make[1]: *** No rule to make target 'debian/canonical-revoked-certs.pem', needed by 'certs/x509_revocation_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

执行

scripts/config --disable SYSTEM_REVOCATION_KEYS

这里编译完后主要关注以下两个文件:
:
bzImagearch/x86/boot/bzImage

vmlinux:源码所在的根目录下

启动内核

因为之前我们已经下载好了CISCN2017_Pwn_babydriver这个题目,然后我们进入这个题目文件夹。编辑一个start.sh来启动内核

#!/bin/sh
qemu-system-x86_64 \
    -m 64M \
    -nographic \
    -kernel ./bzImage \
    -initrd  ./rootfs.cpio \
    -append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 kaslr" \
    -smp cores=2,threads=1 \
    -cpu kvm64

然后给一个执行权限.

chmod +x ./start.sh

运行之后如下图:
芜湖
如果想关闭内核地址随机化的话如下改start.sh

#!/bin/sh
qemu-system-x86_64 \
    -m 64M \
    -nographic \
    -kernel ./bzImage \
    -initrd  ./rootfs.cpio \
    -append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 nokaslr" \
    -smp cores=2,threads=1 \
    -cpu kvm64

手动安装符号表

运行我们的start.sh

find /sys/ | grep babydriver

芜湖
大部分函数都可以在 .text 中找到
然后运行下面命令就可以查看.text的基地址(这里要关闭内核地址随机化。)

/ $ cat /sys/module/babydriver/sections/.text
0xffffffffc0000000
/ $
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

saulgoodman-q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值