博客
关于我
Linux kernel pwn --- CSAW2015 StringIPC
阅读量:588 次
发布时间:2019-03-12

本文共 1597 字,大约阅读时间需要 5 分钟。

0x01 查看题目

题目要求我们从一个特定的操作系统环境中提取信息,完成一系列特定的操作。这些操作涉及到内核模块的分析、内核结构的修改以及利用特定漏洞进行提权。以下是详细的步骤和方法。

0x02 修改cred结构提升权限

在linux内核中,每个进程都有一个与其相关联的cred(Credential)结构体,这个结构体包含了进程的用户ID、组ID以及其他相关信息。通过修改cred结构,我们可以赋予进程root权限。

  • 找到cred结构体:在task_struct中可以找到cred指针。task_struct的结构中包含了多个字段,其中一个是const struct cred __rcu *cred;,这个字段指向了进程的有效(可覆盖)主观任务凭证。

  • 确定搜索范围:由于task_struct通常位于内核的动态分配区域,我们需要确定内核内存的分布情况。通过查看内核的内存布局图,我们可以缩小搜索范围。例如,根据提供的内存分布图,搜索范围可以从0xffff8800000000000xffffc80000000000

  • 修改cred中的uid和gids:找到cred结构体后,我们可以修改其uidgid字段,将其设置为0。这样,进程就获得了root权限。

  • 实现提权:修改完cred后,我们可以使用system("/bin/sh")来执行shell,获得root权限。

  • 0x03 劫持VDSO

    VDSO(Virtual Dynamic Shared Object)是内核中一个特殊的共享对象,其内容在内核中,而不是在磁盘上。通过劫持VDSO,我们可以修改其函数,实现提权。

  • 确定VDSO的位置:VDSO的位置通常位于0xffffffff800000000xffffffffffffefff之间。我们可以通过查找特定函数(如gettimeofday)的位置来确定VDSO的起始地址。

  • 覆盖gettimeofday函数:找到VDSO的起始地址后,我们可以覆盖gettimeofday函数,替换其为一个反弹shell代码。这样,当crontab或其他定期任务调用gettimeofday时,会触发我们的反弹shell。

  • 实现提权:反弹shell代码会连接到一个特定的端口(如127.0.0.1:3333),并以root权限启动一个新shell。

  • 0x04 劫持prctl

    prctl(Process Control)是linux内核中一个重要的系统调节函数,用于控制进程和线程的行为。通过劫持prctl函数,我们可以修改其行为,实现提权。

  • 找到prctl的实现prctl函数的实现通常位于内核的security模块中。我们可以使用工具(如gdb)来找到prctl的调用地址。

  • 修改prctl的行为:通过修改prctl的虚表,我们可以将其指向一个我们控制的函数(如call_usermodehelper)。这样,当prctl被调用时,会执行我们的函数。

  • 实现提权:我们可以设计一个函数,通过call_usermodehelper来执行一个用户传入的二进制文件,并以root权限运行。这样,我们就可以获得root权限。

  • 0x05 劫持modprobe_path

    modprobe_path是内核中一个用于执行模块加载命令的变量。当内核需要加载一个未知格式的模块时,它会执行存储在modprobe_path中的命令。

  • 修改modprobe_path的值:我们可以通过任意地址写来修改modprobe_path的值,将其指向我们自己的程序路径。

  • 触发模块加载:修改modprobe_path后,内核会执行我们指定的程序。当程序被执行时,我们可以通过它来获得root权限。

  • 总结

    通过以上方法,我们可以利用内核中的漏洞和特定结构,实现对系统的完全控制。这些方法需要深入的内核知识和对内核调试工具的熟悉。

    转载地址:http://qxcxz.baihongyu.com/

    你可能感兴趣的文章
    测试tensorflow是否安装成功 出现 SyntaxError: invalid syntax的错误
    查看>>
    pycharm使用(新建工程、字体修改、调试)
    查看>>
    Python学习笔记——元组
    查看>>
    异常声音检测
    查看>>
    无法打开文件“opencv_world330d.lib”的解决办法
    查看>>
    maven项目出现 Missing artifact jdk.tools:jdk.tools:jar:1.7
    查看>>
    算法训练 未名湖边的烦恼(递归,递推)
    查看>>
    什么是接口
    查看>>
    记录-基于springboot+vue.js实现的超大文件分片极速上传及流式下载
    查看>>
    JavaScript高级程序设计第四版学习记录-第九章代理与反射
    查看>>
    怎么解决Windows 10文件/文件夹正在使用无法删除
    查看>>
    matlab函数:fix 向0取整
    查看>>
    Allegro中如何消除器件本身Pin间距报错
    查看>>
    Flask--简介
    查看>>
    16 python基础-恺撒密码
    查看>>
    Frame--Api框架
    查看>>
    Boostrap技能点整理之【网格系统】
    查看>>
    新闻发布项目——业务逻辑层(UserService)
    查看>>
    hibernate正向生成数据库表以及配置——hibernate.cfg.xml
    查看>>
    javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
    查看>>