首页 > 系统相关 >Linux 提权指南

Linux 提权指南

时间:2025-01-16 17:46:41浏览次数:1  
标签:指南 容器 sudo 命令 etc 提权 利用 Linux root

知屋漏者在宇下,知政失者在草野,知经误者在诸子。


导航


壹 - 密码搜寻

  1. 在 /var/www/* 目录下查找 web 应用相关的 config/seting/install 配置文件,其中可能会包含连接 SQL 数据库的密码。
  2. 在 /home/* 目录下检查各用户家目录下的.*sh_history 命令历史文件、.ssh 目录、.* 隐藏文件、备注文档、其它程序/脚本。【命令 ls -Ral /home/ 可快速遍历家目录情况。】
  3. 遍历整个文件系统,查找特殊命名的文件。【 命令 ls -alR / | grep -iI "passw\|pwd" locate ‘passw’
  4. 遍历整个文件系统,查找包含特殊字串的文件。【命令 grep --color=auto -rnw -iIe "PASSW\|PASSWD\|PASSWORD\|PWD" --color=always / 2>/dev/null
  5. 若能够登录 SQL 数据库,则遍历 系统内置库/用户自建库 中的 user 表中的用户密码。
  6. 在 /var/backup/ 目录下检查可能的备份文件,例如 shadow.bak、passwd.bak、pwds.db 等。
  7. 更多详情...

贰 - Sudo 命令

  1. 枚举当前用户是否拥有可用的 sudo 命令,若无可用命令则直接跳过本节除步骤2以外的其他步骤。【命令 sudo -l
  2. 枚举其它用户是否处于 sudo 组中,用以提供可能的横向突破点。【命令 id user 的方式逐一查询 /etc/passwd 中的 bash 用户;或命令 for user in $(cat /etc/passwd | awk -F: '{print $1}');do echo "$user" ; id "$user" ;done | grep -B 1 "sudo" 快速查询。】
  3. sudo -l 查询到的命令在 GTFOBins 网站中查找对应的利用方法,查找不到的命令亦可在 Google 中进行最后的搜索;若这些命令中存在非系统标准命令,那么关于这些命令的利用方法同样可参考下面 SUID/SGID 特权部分 的步骤4中介绍的几种利用方法;若这些命令中存在 python 执行程序,则还可以尝试劫持上游依赖模块进行利用。
  4. 执行命令 sudo LD_PRELOAD=/null /bin/idsudo LD_LIBRARY_PATH=. /bin/id 后,若没有输出sorry, you are not allowed to set the following environment variables: LD_PRELOAD这样的提示,则可以进行 sudo 预加载注入利用,该方法适用于所有通过 sudo -l 查询得到的命令。【利用方法
  5. 使用 sudo -V 检查 sudo 版本,若 sudo 版本 ≤1.8.27 且满足 user ALL=(ALL,!root) /bin/bash 这样的条件,那么可以查看此利用方法;若 sudo 版本 ≤1.9.12p1 且满足 user ALL=(ALL:ALL) sudoedit 这样的条件,那么可以查看此利用方法
  6. 更多详情1更多详情2

叁 - SUID/SGID 特权

  1. 枚举系统中所有的 SUID 文件。【命令 find / -type f -perm -u=s 2>/dev/null | xargs ls -l
  2. 枚举系统中所有的 SGID 文件,此时还应该枚举对应的组能够读取的文件有哪些,这些文件中是否包含类似 /etc/passwd 或 /etc/shadow 这样的文件,然后依此来判断拥有 SGID 特权的命令是否可以进行有效的利用。【命令 find / -type f -perm -g=s 2>/dev/null | xargs ls -l;命令 find / -group root -type f
  3. 若步骤1枚举到的是系统标准命令,则可先在 GTFOBins 网站中查找对应的利用方法,查找不到时再到 Google 中进行最后的搜索。
  4. 若步骤1枚举到的是非系统标准命令(用户自定义命令、第三方程序打包的命令),则使用步骤3的办法可能无效,此时(1)需要先与其交互看看它做了什么,(2)再查找版本号或对应的安装包,(3)接着通过 strings 提取可疑的字符串,(4)最后通过 strace 进行调试检查。这类程序的利用方式通常如下:
    1. 根据程序加载的共享库,进行共享对象注入。【利用方法
    2. 根据程序调用的非绝对路径的命令,进行 PATH 环境变量注入。【利用方法
    3. 根据程序调用的绝对路径的命令,优先检查用户是否拥有对该绝对路径直接写入或删除覆盖的权限,若无此权限则可以检查步骤5中动作。
    4. 根据程序的版本或 help 信息确定其安装包程序,然后通过 Google 或 searchsploit 搜索其漏洞利用。【利用方法
    5. 使用 bash --version 检查 bash 的版本,若 bash 版本<4.2 则 bash 允许定义与程序中调用的绝对路径同名的函数,其执行优先级会高于程序中调用的绝对路径的命令;若 bash 版本<4.4 则可以利用调试模式生成调试语句的PS4提示能力。【利用方法
  5. 更多详情1更多详情2

注意:SUID 特权对于 sh 脚本不起作用,因此在进行上述 注入、写入/覆盖、同名函数 等利用时,切记要使用 C 语言编译的利用程序。

echo '#include <stdio.h>' > exploit.c
echo '#include <stdlib.h>' >> exploit.c
echo '' >> exploit.c
echo 'int main(){' >> exploit.c
echo '    system("cp /bin/bash /tmp && chmod +s /tmp/bash");' >> exploit.c
echo '  return 0;' >> exploit.c
echo '}' >> exploit.c

gcc exploit.c -o exploit

肆 - 计划任务

  1. 枚举系统 Cron 任务,通过检查 /etc/crontab、/etc/cron.d/* 文件内容,查看是否存在用户自定义的任务。

  2. 枚举用户 Cron 任务,可通过命令 crontab -l 查看当前用户的自定义任务,而需要查看其它用户的自定义任务,则需借助 PsPy 这个工具进行。

  3. 有关计划任务的利用方式,通常如下:

    1. 任务命令非绝对路径,则可能存在 PATH 路径劫持。【利用方法
    2. 任务命令是绝对路径,则检查命令自身的文件权限是否可写入,命令所在的目录权限是否可写入。【利用方法
    3. 任务命令自身的用法是否存在漏洞,如 find 命令的通配符注入漏洞。【参考方法
  4. 更多详情

伍 - 文件/目录

find /etc -maxdepth 1 -writable -type f 2> /dev/null

find /etc -maxdepth 1 -readable -type f 2> /dev/null

find / -executable -writable -type d 2> /dev/null

重点文件:/etc/passwd、/etc/shadow、/etc/sudoers、

重点目录:/tmp/、/var/backups/、/etc/init.d/、/usr/lib/systemd/system/、/etc/update-motd.d/、

陆 - Linux 内核

  1. 检查内核版本。【命令 uname -r;或命令 cat /proc/version;或命令 dpkg -l 中搜索 linux-image 关键字;或命令 ls /boot/vmlinuz* ;】
  2. 搜索内核漏洞利用,使用命令 searchsploit linux kernel *.* 查找漏洞,或在本地借助 linux-exploit-suggester 工具 ./linux-exploit-suggester.sh -k *.* 查看漏洞建议。【linux-exploit-suggester 工具建议 git 本地拉取定时更新,因为其脚本中的漏洞编号在不断的添加。】
  3. 优质内核漏洞利用推荐
    1. [Kernels:2.6.0~2.6.37] Half-Nelson/Full-Nelson [获取方式:命令searchsploit nelson,id15704、id17787。]
    2. [Kernels:2.6.39~3.1.0] Memodipper [获取方式:命令searchsploit dipper,id35161。]
    3. [Kernels:2.6.22~3.9] DirtyCow/DirtyCow2 [获取方式:命令searchsploit dirty cow,id40839、id40611。其它变种。]
    4. [Kernels:4.4.0~4.13.x] eBPF Verifier [获取方式:命令searchsploit 4.13.9,id45010。]
    5. 其它已编译的内核漏洞
  4. 更多详情

注意:Linux 内核漏洞的利用容易造成系统的崩溃,建议仅在黔驴技穷的情况下使用。

柒 - 服务程序

在此之前,首先通过命令 ps auxnetstat -antp 确定在此系统中有哪些运行的服务可能是我们感兴趣的。

1、MySQL UDF

  1. 利用条件:(1) mysqld 进程以 root 身份运行。【命令 ps aux | grep mysql 】(2) 拥有高权限的数据库登录账户,如 root。(3) mysql 版本符合 4.x/5.x/[6.x?]。【命令 mysql -V
  2. 利用方法:参考链接1参考链接2
  3. 获取方式:命令 ``searchsploit mysql udf`,id1518。

2、NFS 共享

  1. 利用条件:(1) nfs 进程正在运行。【命令 ps aux | grep nfs】(2) 共享文件夹启用了 no_root_squash 权限,命令 cat /etc/exports 可检查共享文件夹是否存在 no_root_squash 权限。 (3) 远端攻击机可挂载共享并写入 SUID 权限的程序。
  2. 利用方法:参考链接
  3. 获取方式:无需

3、Docker 容器

  1. 处于容器外部的利用条件:(1) dockerd 进程以 root 身份运行。【命令 ps aux | grep dockerd】(2) 用户可以使用 docker images 命令枚举镜像。【非 root 用户只要加入 docker 组便拥有操作 docker 容器的权限。】(3) dockerd 进程以 root 身份运行。(4) 容器内用户以 root 身份运行。【命令 docker run --rm -it alpine sh -c "id"
  2. 处于容器内部的利用条件1:(1) 当前容器身份是 root 。(2) 该容器是特权容器。【命令 fdisk -l | grep -A 10 -i "device" 输出的结果中存在/dev/sda* 这样的文件系统。】
  3. 处于容器内部的利用条件2:(1) 当前容器身份是 root 。(2) 该容器非特权容器。(3) 容器启用 CAP_SYS_ADMIN 功能。【命令 capsh --print | grep cap_sys_admin 有输出信息。】(3) 容器中的 AppArmor 功能停止或未加载。【命令 cat /sys/kernel/security/apparmor/profiles 文件不存在。】
  4. 利用方法:参考链接
  5. 获取方式:无需

4、LXD 容器

  1. 利用条件:(1) lxd 进程以 root 身份运行。【命令 ps aux | grep -i lxd\|lxc】(2) 用户可以使用 lxc list 命令枚举镜像。【非 root 用户只要加入 lxd 组便拥有操作 lxd 容器的权限。】
  2. 利用方法:参考链接
  3. 获取方式:https://github.com/saghul/lxd-alpine-builder

捌 - 自动化工具(辅助)

  1. PEASS-ng:https://github.com/peass-ng/PEASS-ng
  2. LinEnum:https://github.com/rebootuser/LinEnum
  3. linux-smart-enumeration:https://github.com/diego-treitos/linux-smart-enumeration
  4. SUID3NUM:https://github.com/Anon-Exploiter/SUID3NUM

标签:指南,容器,sudo,命令,etc,提权,利用,Linux,root
From: https://www.cnblogs.com/kqdssheng/p/18675446

相关文章

  • linux设置ssh免密登录
    在Linux系统中设置SSH免密登录是一个常见的需求,它能够提高自动化脚本和日常工作的便捷性。下面我将根据您提供的提示,分步骤详细解释如何设置SSH免密登录:1.在客户端生成SSH密钥对首先,在客户端机器上生成SSH密钥对。这通常包括一个私钥(id_rsa)和一个公钥(id_rsa.pub)。私钥应妥善保......
  • Linux---(2)---用户和组(用户)
    用户前言用户一、理解Linux多用户、多任务的特性二、用户分类三、用户配置文件用户账户信息文件用户账户密码文件四、添加用户五、给用户添加密码六、删除用户七、修改用户小实验:用VIM创建用户1.创建用户2.切换用户3.创建家目录4.查看用户5.创建组6.切换用户结语......
  • Linux驱动开发:处理空指针错误,ERR_PTR、IS_ERR、PTR_ERR用法
    免责声明:本文内容摘自《Linux设备驱动开发》一书,作者为JohnMadieu,译者为袁鹏飞、刘寿永,由人民邮电出版社出版。本文仅为分享知识和讨论之用,非商业用途。书籍版权归原作者及出版社所有。本人及本博客不对因使用或误用本文内容而产生的任何后果负责。请读者尊重版权,合理使用内容。......
  • 实战指南:优化采购流程,实现高效采购管理
    在当今这个充满激烈竞争的商业舞台上,节约成本已然成为企业和个人推动可持续发展的重要战略手段之一。通过实施有效的成本节约措施,不仅能够显著拓宽利润空间,还能大幅提升资源的有效利用率,进而在市场中获得更强的竞争优势。优化采购流程是提高企业运营效率、降低成本、增强竞争力的......
  • 在Linux系统上创建一个200GB的交换空间
    步骤1:创建交换文件选择新的磁盘位置:假设你希望将交换空间放置在/mnt/data目录下(可以是任何其他挂载的磁盘分区)。首先确保该目录或挂载点存在。bashsudomkdir-p/mnt/data创建200GB的交换文件:使用dd命令创建一个200GB的交换文件。200GB=204800MB,因此需要指定文......
  • 利用Python按关键字搜索阿里巴巴商品:代码示例与实践指南
    在电商领域,能够快速获取商品信息对于市场分析、选品上架、库存管理和价格策略制定等至关重要。阿里巴巴作为全球最大的电商平台之一,提供了丰富的商品数据。虽然阿里巴巴开放平台提供了官方API来获取商品信息,但有时使用爬虫技术来抓取数据也是一种有效的手段。本文将介绍如何利......
  • 用Python管理Docker容器:从`docker-py`到自动化部署的全面指南
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在现代软件开发和运维过程中,Docker容器化技术因其高效、轻量和可移植性而被广泛应用。Python作为一种灵活且功能强大的编程语言,通过docker-py......
  • Kubernetes (K8s) 入门指南
    Kubernetes(K8s)入门指南什么是Kubernetes?Kubernetes,通常简称为K8s(因为从“K”到“s”之间有八个字符),是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌设计,并在2014年捐赠给了云原生计算基金会(CNCF)。Kubernetes建立在谷歌多年来......
  • Linux开启服务器审计
    Linux开启服务器审计在Linux服务器上启用auditd(LinuxAuditFramework的守护进程)可以帮助记录系统活动,例如文件访问、用户登录等,为安全审计提供支持。以下是详细的步骤: 安装 auditd在大多数Linux发行版中,auditd 通常是默认安装的。如果未安装,可以通过包管理器安装......
  • Linux互联网主机代理内网主机访问互联网
    互联网主机1、安装squidsquid代理内网主机访问互联网yum-yinstallsquidcat/etc/squid/squid.conf##Recommendedminimumconfiguration:##Exampleruleallowingaccessfromyourlocalnetworks.#Adapttolistyour(internal)IPnetworksfromwherebrows......