前言
之前 红队视角下Linux信息收集 中提到过提权的信息收集命令,但没有细讲。本篇文章将着重于各种linux提权手段,总结提权的条件和原理。
简单总结一下,红队的常规提权手段有:
系统信息
按照上面提权的手段,梳理一下需收集的系统信息:
- 内核和发行版信息
- 系统信息
- Hostname
- 网卡信息
- 路由信息
- DNS信息
- 用户信息
- 当前用户信息
- 最后登录用户
- 登录到主机的用户
- 所有用户信息
- 密码策略
- umask值
- 历史记录
- SSH配置检查
- 环境变量
- 启动项/任务
- 列出所有cron任务
- 所有可写的cron任务
- 其他用户的cron任务
- 活动或不活动的systemd timers
- 进程服务
- 列出所有建立的网络连接
- 正在运行的程序
- 查找并列出进程二进制文件和关联的权限
- 列出inetd.conf / xined.conf内容和关联的二进制文件权限
- 列出init.d二进制权限
信息的命令都可以在之前的 红队视角下Linux信息收集 一文中找到,这里不再重复,简单介绍下sudo和suid、sgid。
sudo
sudo 命令以其他身份来执行命令,预设的身份为 root。在 /etc/sudoers 中设置可执行 sudo 指令的用户。若未经授权的用户企图使用 sudo,管理员随即收到警告邮件。用户使用 sudo 时,必须先输入密码,仅有5分钟的有效期限,超过期限则必须重新输入密码。
执行原理很简单:普通用户执行命令 -> 检查 /var/db/sudo/ 目录下是否有用户时间戳 -> 检查 /etc/sudoers 配置文件,用户是否有 sudo 权限 -> 执行 sudo 命令并反回结果 -> 退出 sudo 返回普通用户 shell 环境。
配置 sudo 必须通过编辑 /etc/sudoers 文件,而且只有超级用户才可以修改它,还必须使用 visudo 编辑。之所以使用 visudo 有两个原因,一是它能够防止两个用户同时修改,同时能够进行有限的语法检查。所以,即使只有一个超级用户,也最好用 visudo 来检查一下语法。
sudo 为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo 的日志功能不是自动的,必须由管理员开启。这样来做:
代码语言:txt复制touch /var/log/sudo
vi /etc/syslog.conf
local2.debug /var/log/sudo
重启日志守候进程,这样,sudo 就可以写日志了。
SUID
代码语言:txt复制 -rwsr-xr-x
|
SUID 程序
当 s 出现在文件拥有者的 x 权限上时,如我们上面看到的 /usr/sbin/pppd 这个文件的权限为 -rwsr-xr--,此时就被称为 SET UID 简称 SUID.SUID 对于一个文件有什么限制和功能呢?
- SUID 权限仅对二进制可执行文件有效
- 执行者对于该文件具有 x 的权限
- 本权限仅在执行该文件的过程中有效
- 执行者将具有该文件拥有者的权限
例如普通用户用 passwd 修改自己的命令,实际上最终更改的是 /etc/passwd 文件. 此文件时用户管理配置文件,只有 root 权限才能更改.
既然是 root 用户才拥有此权限,为什么我们可以通过 passwd 命令来修改密码呢,那这就要归功于 passwd 设置了 suid 权限位了.普通用户通过执行 passwd 命令,临时拥有 root 权限,间接的修改 /etc/passwd,以达到修改自己密码的权限.
SGID
当 s 出现在目录或文件所属群的 x 权限上时,此时就称为 SET GID 简称 SGID,那 SGID 对文件和目录分部有哪些功能呢?
SGID 对目录
- 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
- 使用者在此目录下的群组将会变成该目录的群组
- 若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
SGID 对文件
- SGID 对二进制可执行文件有效
- 程式执行者对于该文件来说,需具备 x 的权限
- 执行者在执行的过程中将会获得该文件群组的支援(用于改文件群组的权限)
软件信息
如上,梳理一下收集的软件信息:
- 软件版本信息
- sudo
- mysql
- udf提权
- mof提权
- postgres
- apache
- user config
- 启用的模块
- htpassword文件
- www目录
- 弱认证
- 检查默认/弱的Postgres帐户
- 检查默认/弱的MYSQL帐户
- samba
- ftp
- 平台测试
- 检查是否在Docker容器中
- 检查主机是否安装了Docker
- 检查是否在LXC容器中
软件版本信息
查看版本的命令一般都是 -V
代码语言:txt复制sudo -V
mysql -V
弱认证
代码语言:txt复制select User, host from mysql.user;
查询数据库用户比较简单,一般登录上去就是udf提权了,基本不会查看其他用户。
代码语言:txt复制pdbedit -L
代码语言:txt复制cat /etc/vsftpd/vsftpd.conf
查看ftp的配置信息,需注意是否有匿名访问权限及用户配置目录。
平台测试
测出来的大多是vm机器或者exsi机器,docker机器也占相当
代码语言:txt复制dmesg | grep -i VM & grep -i virtual
代码语言:txt复制dmidecode -s system-product-name
代码语言:txt复制systemd-detect-virt
virt-what
总结
本文从软件和系统两个方面梳理了linux提权手段,并总结了sudo、suid和sgid的原理,具体利用手段没有涉及。
本文作者 r0fus0d