百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

红队测试之Linux提权小结(最新linux提权漏洞)

bigegpt 2025-01-26 21:14 6 浏览

前言

这是 酒仙桥六号部队 的第 14 篇文章。
全文共计2885个字,预计阅读时长8分钟

Ps.东北地区安全团队招人中...


提权背景

权限提升意味着用户获得不允许他使用的权限。比如从一个普通用户,通过“手段”让自己变为管理员用户,也可以理解为利用操作系统或软件应用程序中的错误,设计缺陷或配置错误来获得对更高访问权限的行为。

为什么需要提权

权限的提升可以让人“知道”更多的事情,特别是攻击者,一旦提权成功后果不堪设想。攻击者在提权主要有以下几点的考虑,分别是:

  • 读取/写入敏感文件
  • “隧道”权限维持
  • 插入恶意BackDoor
  • ….

基于以上几点是攻击者最为直观的考虑,所要达成的目的也是五花八门,如:数据的窃取与篡改、木马病毒的传播等。可以让整个计算机达到彻底“沦陷”的地步,非常之可怕。在专业的红队测试当中,权限提升作为了目前测试环节重要的环节之一。

Linux常见提权

攻击者们选择的下手点也是略有不同,以下列举了Linux权限提升攻击者最为常见的下手点,如:

1. 内核漏洞

2. 定时任务

3. Suid文件

4. Sudo 配置错误

5. NFS共享

6. 第三方服务

基于以上的下手点,在攻击者的视角下,可谓如“探囊取物”一般。但是在普通的IT运维人的视角中,这些“下手点”功能显得非常普通。下面将基于这些下手点逐一进行安全漏洞的介绍与还原。

漏洞介绍

Linux目前是最为常见的操作系统,该系统是处于源代码开放状态,信息安全问题也会随之被世界各地的“体验者”揭露出来。

Linux操作系统的内核是该系列操作系统的“灵魂大脑”,一旦出现安全隐患情况下,攻击者会很对这些安全隐患加以恶意利用,其中Linux内核漏洞是目前攻击者最为热爱的漏洞之一,内核漏洞的利用通常会以“上帝视角”,也就是所谓的操作系统最高权限的形式为攻击者提供对目标系统的超级用户访问权限。

漏洞复现

以Linux内核提权漏洞-“脏牛”来做演示。

给大家介绍下检查linux提权辅助工具,les该工具主要帮助检测linux内核的安全缺陷。

下载地址:

https://github.com/mzet-/linux-exploit-suggester

1.将linux-exploit-suggester.sh下载到要检查的主机上,主要使用以下两条指令:

chmod +x linux-exploit-suggester.sh

./linux-exploit-suggester.sh

在执行上述命令之前,首先查看Linux内核版本。

查看脚本执行结果,可以使用脏牛来进行提权。

2.使用searchsploit 搜索dirty,使用40839.c,将漏洞利用代码上传到目标机器。

3.接下来编译并执行。

gcc -pthread 40839.c -o c -lcrypt

./c

4.该漏洞利用代码会加入一个uid为0的用户,切换到firefart用户,获取root权限。

定时任务

漏洞介绍

如果未正确配置Cron,则可以利用它获得root特权。

  1. cron作业中是否有可写的脚本或二进制文件?
  2. 我们可以覆盖cron文件本身吗?
  3. cron.d目录可写吗?

Cron通常以root特权运行。如果我们可以成功修改cron中的任何脚本或二进制文件,那么我们可以使用root权限执行任意代码。

漏洞复现

接下来使用pspy来监听进程。

pspy是一种命令行工具,无需root权限即可监听进程。可以查看其他用户执行的命令、cron作业等。

该工具的下载地址:

https://github.com/DominicBreuker/pspy

首先将pspy上传到目标机器:

1)chmod +x pspy64s

2)./pspy64

观察一段时间,发现test.py为root权限执行。

查看test.py权限为普通用户可写,然后执行如下命令,将/etc/passwd设置为所有用户可写。

echo 'import os,stat ;os.chmod("/etc/passwd", stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)' >> test.py

Linux操作系统下的passwd文件如果具备可写入权限情况下,可以新建UID为0的用户,或者替换root密码,则可以获取到root权限。

Suid 提权

漏洞介绍

SUID代表设置的用户ID,是一种Linux功能,允许用户在指定用户的许可下执行文件。例如,Linux ping命令通常需要root权限才能打开原始网络套接字。通过将ping程序标记为SUID(所有者为root),只要低特权用户执行ping程序,便会以root特权执行ping。

-rwsr-xr-x –用's'字符代替'x'表示SUID位被设置。

SUID是一项功能,如果使用得当,它实际上可以增强Linux的安全性。问题在于,管理员在安装第三方应用程序或进行逻辑配置更改时可能会在不知不觉中引入危险的SUID配置。

许多系统管理员不知道应该在什么情况设置SUID位,SUID位不应该设置在文件编辑器上,因为攻击者可以修改系统上存在的任何文件。

漏洞复现

使用LinEnum.sh来收集要提权的机器上的信息,该脚本主要用来收集Linux上的信息。

该脚本的下载地址:

https://github.com/rebootuser/LinEnum

执行LinEnum之后,发现/bin/screen-4.5.0这个应用有SUID权限,然后去搜索一下,发现screen 4.5版本存在本地提权漏洞。

该EXP下载地址如下:

https://www.exploit-db.com/exploits/41154

使用如下命令进行编译:

gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
gcc -o /tmp/rootshell /tmp/rootshell.c

将编译好的EXP上传到目标机器,并按以下步骤执行。

cd /etc

umask 000

/bin/screen-4.5.0 -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"

/bin/screen-4.5.0 -ls

/tmp/rootshell

执行之后成功获取root权限。

Sudo配置错误

漏洞介绍

如果攻击者无法通过其他任何方法直接获得root用户访问权限,则他可能会尝试损害具有SUDO访问权限的任何用户。一旦他可以访问任何sudo用户,他就可以基本上以root特权执行任何命令。

管理员可能只允许用户通过SUDO运行一些命令,可能在没有察觉的情况下中引入漏洞,这可能导致权限提升。

一个典型的例子是将SUDO权限分配给find命令,以便其他用户可以在系统中搜索特定的文件相关文件。尽管管理员可能不知道'find'命令包含用于执行命令的参数,但攻击者可以以root特权执行命令。

漏洞复现

拿到普通用户权限之后,使用sudo –l查看下, 查看当前是否存在当前用户可以调用sudo的命令,如下图,当前用户可以执行find命令,然后通过find命令获取root权限。

/usr/bin/find /home –exec sh –i \;

NFS提权

漏洞介绍

网络文件系统:网络文件系统允许客户端计算机上的用户通过网络挂载共享文件或目录。NFS使用远程过程调用(RPC)在客户端和服务器之间路由请求。

Root Squashing参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程root用户在连接时会分配一个用户“ nfsnobody ”,该用户具有最小的本地权限。如果 no_root_squash 选项开启的话的话”,并为远程用户授予root用户对所连接系统的访问权限。

如下图所示,该共享可以被远程root连接并读写,并且具有root权限,所以可以添加bash文件并赋予SUID权限,在目标机器的普通用户权限下可以执行bash文件,获取root权限。

漏洞复现

如下图所示,该机器开启了/home目录的共享。

使用本地root权限将远程共享挂载到本地,将/bin/sh上传到目标机器,并赋予SUID权限。

使用普通用户执行./sh –p 可以获取root权限。

第三方组件提权

漏洞介绍

某些程序使用root权限启动,如果第三方服务或者程序存在漏洞或者配置问题,可以被利用来获得root权限。

漏洞复现

如下图以tmux为例,通过查看进程,发现tmux以root权限启动。

(tmux是一个终端多路复用器:它使从单个屏幕创建,访问和控制多个终端成为可能。)

因为现在运行的这个tmux是root权限,只要连接到当前这个tmux,就可以获取到root权限。

通过查看历史命令记录可以发现,tmux 通过了-S参数指定了socket的路径。

使用相同的方式连接SOCKET就可以获取root权限。

tmux -S /.devs/dev_sess

技术小结

在测试项目中,测试人员通常会设法获取shell,然后再进行下一步的操作,本文旨在给大家提供一些从普通权限到root权限的思路,基本总结如下:

1.通过查看内核版本,寻找是否存在可以利用的提权EXP。

2.通过信息收集,查看定时任务,sudo配置,suid权限的文件,查看是否可以利用。

3.通过查看系统的应用,或者第三方应用,查找服务本身是否存在问题,或者是否配置存在问题,如大家常见的mysql udf提权。

相关推荐

【Docker 新手入门指南】第十章:Dockerfile

Dockerfile是Docker镜像构建的核心配置文件,通过预定义的指令集实现镜像的自动化构建。以下从核心概念、指令详解、最佳实践三方面展开说明,帮助你系统掌握Dockerfile的使用逻...

Windows下最简单的ESP8266_ROTS_ESP-IDF环境搭建与腾讯云SDK编译

前言其实也没啥可说的,只是我感觉ESP-IDF对新手来说很不友好,很容易踩坑,尤其是对业余DIY爱好者搭建环境非常困难,即使有官方文档,或者网上的其他文档,但是还是很容易踩坑,多研究,记住两点就行了,...

python虚拟环境迁移(python虚拟环境conda)

主机A的虚拟环境向主机B迁移。前提条件:主机A和主机B已经安装了virtualenv1.主机A操作如下虚拟环境目录:venv进入虚拟环境:sourcevenv/bin/active(1)记录虚拟环...

Python爬虫进阶教程(二):线程、协程

简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...

基于网络安全的Docker逃逸(docker)

如何判断当前机器是否为Docker容器环境Metasploit中的checkcontainer模块、(判断是否为虚拟机,checkvm模块)搭配学习教程1.检查根目录下是否存在.dockerenv文...

Python编程语言被纳入浙江高考,小学生都开始学了

今年9月份开始的新学期,浙江省三到九年级信息技术课将同步替换新教材。其中,新初二将新增Python编程课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材...

CentOS 7下安装Python 3.10的完整过程

1.安装相应的编译工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-develope...

如何在Ubuntu 20.04上部署Odoo 14

Odoo是世界上最受欢迎的多合一商务软件。它提供了一系列业务应用程序,包括CRM,网站,电子商务,计费,会计,制造,仓库,项目管理,库存等等,所有这些都无缝集成在一起。Odoo可以通过几种不同的方式进...

Ubuntu 系统安装 PyTorch 全流程指南

当前环境:Ubuntu22.04,显卡为GeForceRTX3080Ti1、下载显卡驱动驱动网站:https://www.nvidia.com/en-us/drivers/根据自己的显卡型号和...

spark+python环境搭建(python 环境搭建)

最近项目需要用到spark大数据相关技术,周末有空spark环境搭起来...目标spark,python运行环境部署在linux服务器个人通过vscode开发通过远程python解释器执行代码准备...

centos7.9安装最新python-3.11.1(centos安装python环境)

centos7.9安装最新python-3.11.1centos7.9默认安装的是python-2.7.5版本,安全扫描时会有很多漏洞,比如:Python命令注入漏洞(CVE-2015-2010...

Linux系统下,五大步骤安装Python

一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像http://npm.taobao.or...

centos7上安装python3(centos7安装python3.7.2一键脚本)

centos7上默认安装的是python2,要使用python3则需要自行下载源码编译安装。1.安装依赖yum-ygroupinstall"Developmenttools"...

利用本地数据通过微调方式训练 本地DeepSeek-R1 蒸馏模型

网络上相应的教程基本都基于LLaMA-Factory进行,本文章主要顺着相应的教程一步步实现大模型的微调和训练。训练环境:可自行定义,mac、linux或者window之类的均可以,本文以ma...

【法器篇】天啦噜,库崩了没备份(天啦噜是什么意思?)

背景数据库没有做备份,一天突然由于断电或其他原因导致无法启动了,且设置了innodb_force_recovery=6都无法启动,里面的数据怎么才能恢复出来?本例采用解析建表语句+表空间传输的方式进行...