Linux系统如何通过技巧实现安全提权?
摘要:知屋漏者在宇下,知政失者在草野,知经误者在诸子。 导航 壹 - 密码搜寻 贰 - Sudo 命令 叁 - SUIDSGID 特权 肆 - 计划任务 伍 - 文件目录 陆 - Linux 内核 柒 - 服务程序 MySQL UDF NFS
知屋漏者在宇下,知政失者在草野,知经误者在诸子。
导航
壹 - 密码搜寻
贰 - Sudo 命令
叁 - SUID/SGID 特权
肆 - 计划任务
伍 - 文件/目录
陆 - Linux 内核
柒 - 服务程序
MySQL UDF
NFS 共享
Docker 容器
LXD 容器
捌 - 自动化工具
壹 - 密码搜寻
在 /var/www/* 目录下查找 web 应用相关的 config/seting/install 配置文件,其中可能会包含连接 SQL 数据库的密码。
在 /home/* 目录下检查各用户家目录下的.*sh_history 命令历史文件、.ssh 目录、.* 隐藏文件、备注文档、其它程序/脚本。【命令 ls -Ral /home/ 可快速遍历家目录情况。】
遍历整个文件系统,查找特殊命名的文件。【 命令 ls -alR / | grep -iI "passw\|pwd" 或 locate ‘passw’】
遍历整个文件系统,查找包含特殊字串的文件。【命令 grep --color=auto -rnw -iIe "PASSW\|PASSWD\|PASSWORD\|PWD" --color=always / 2>/dev/null 】
若能够登录 SQL 数据库,则遍历 系统内置库/用户自建库 中的 user 表中的用户密码。
在 /var/backup/ 目录下检查可能的备份文件,例如 shadow.bak、passwd.bak、pwds.db 等。
更多详情...
贰 - Sudo 命令
枚举当前用户是否拥有可用的 sudo 命令,若无可用命令则直接跳过本节除步骤2以外的其他步骤。【命令 sudo -l 】
枚举其它用户是否处于 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" 快速查询。】
将 sudo -l 查询到的命令在 GTFOBins 网站中查找对应的利用方法,查找不到的命令亦可在 Google 中进行最后的搜索;若这些命令中存在非系统标准命令,那么关于这些命令的利用方法同样可参考下面 SUID/SGID 特权部分 的步骤4中介绍的几种利用方法;若这些命令中存在 python 执行程序,则还可以尝试劫持上游依赖模块进行利用。
执行命令 sudo LD_PRELOAD=/null /bin/id 或sudo LD_LIBRARY_PATH=. /bin/id 后,若没有输出sorry, you are not allowed to set the following environment variables: LD_PRELOAD这样的提示,则可以进行 sudo 预加载注入利用,该方法适用于所有通过 sudo -l 查询得到的命令。【利用方法】
使用 sudo -V 检查 sudo 版本,若 sudo 版本 ≤1.8.27 且满足 user ALL=(ALL,!root) /bin/bash 这样的条件,那么可以查看此利用方法;若 sudo 版本 ≤1.9.12p1 且满足 user ALL=(ALL:ALL) sudoedit 这样的条件,那么可以查看此利用方法;
更多详情1、更多详情2。
叁 - SUID/SGID 特权
枚举系统中所有的 SUID 文件。【命令 find / -type f -perm -u=s 2>/dev/null | xargs ls -l】
枚举系统中所有的 SGID 文件,此时还应该枚举对应的组能够读取的文件有哪些,这些文件中是否包含类似 /etc/passwd 或 /etc/shadow 这样的文件,然后依此来判断拥有 SGID 特权的命令是否可以进行有效的利用。【命令 find / -type f -perm -g=s 2>/dev/null | xargs ls -l;命令 find / -group root -type f】
若步骤1枚举到的是系统标准命令,则可先在 GTFOBins 网站中查找对应的利用方法,查找不到时再到 Google 中进行最后的搜索。
