[ffffffff0x] Linux提权分析

2020-12-28 11:47:43 浏览数 (1)

前言

之前 红队视角下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

0 人点赞