博客
关于我
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/

    你可能感兴趣的文章
    我用wxPython搭建GUI量化系统之最小架构的运行
    查看>>
    我用wxPython搭建GUI量化系统之多只股票走势对比界面
    查看>>
    selenium+python之切换窗口
    查看>>
    重载和重写的区别:
    查看>>
    搭建Vue项目步骤
    查看>>
    账号转账演示事务
    查看>>
    idea创建工程时错误提醒的是architectCatalog=internal
    查看>>
    SpringBoot找不到@EnableRety注解
    查看>>
    简易计算器案例
    查看>>
    在Vue中使用样式——使用内联样式
    查看>>
    Find Familiar Service Features in Lightning Experience
    查看>>
    Explore Optimization
    查看>>
    Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
    查看>>
    2020Java程序设计基础(华东交通大学)章节测试免费满分答案
    查看>>
    连接Oracle数据库经常报错?关于listener.ora和tnsnames.ora文件的配置
    查看>>
    解决数据库报ORA-02289:序列不存在错误
    查看>>
    map[]和map.at()取值之间的区别
    查看>>
    成功解决升级virtualenv报错问题
    查看>>
    【SQLI-Lab】靶场搭建
    查看>>
    【Bootstrap5】精细学习记录
    查看>>