提权
提权(Privilege Escalation)是指攻击者通过利用系统的漏洞或错误配置,获得比其当前权限更高的访问权限或控制权的过程。
SUID提权
利用文件的Set User ID,当文件设置了SUID位,即使执行该文件的用户不是文件的拥有者,该用户也会在执行时临时获得文件拥有者的权限。
每个进程运行通常有会有三个与用户身份相关的UID
- Real Uid:启动这个进程的真实用户。
- effective UID: 决定进程实际运行时的权限,有效身份ID是进程当前以哪个用户身份运行,决定了它能访问哪些文件和资源。
- save set-user-id: 保存一个进程的原始有效用户ID,以便稍后可以恢复。当进程发生特权切换,可以用保存的用户ID来恢复到之前的有效用户id。
# 查看命令运行时的有效id
ps -eo pid,uid,euid,cmd
常见可以使用提权的命令
# find
find / -exec "/bin/bash" -p \
# vim
sudo提权
sudo命令可以让普通用户拥有root权限,一般需要输入用户命令,通过sudoer文件进行配置可以让用户不需要输入命令就可以使用sudo命令,从而导致权限提升的问题出现。配置文件位置
/etc/sudoer
。
# sudoer配置的基本语法
user host=(run_as_user) command
user: 指定可以使用sudo的用户
host: 允许在哪些主机执行命令,ALL表示不限制主机
run_as_user:表示以哪个用户的身份运行命令,ALL表示可以以任意用户身份
command:允许执行的命令,ALL表示所有命令
特殊,不用输入命令
user ALL=(ALL) NOPASSWD: ALL
# 列出当前用户能够以sudo身份执行的命令和权限配置
sudo -l
# 查看指定用户
sudo -l -U bob
内核漏洞提权
利用系统内核漏洞提权步骤:
- 获取目标系统的信息,获取系统内核信息及版本信息。
# 查看linux内核版本
uname -a
lsb_release -a
- 根据内核版本获取对应漏洞以及exp
# 利用exploitdb搜索相关漏洞
searchsploit Ubuntu 16.04
- 使用exp对目标进行攻击,提权.
定时任务提权
/etc/crontab
和crontab -e
命令的区别:
- 权限:
/etc/crontab
用于系统管理员设置全局的定时任务,crontab -e是普通用户自定义自己的定时任务。 - 优先级:互不干扰
- 作用范围:
/etc/crontab
中的任务可以指定以任意用户执行。
# 查看配置权限
ls -l /etc/crontab
cat /etc/crontab
# 根据配置定时任务进行应对,提权
环境变量提权
环境变量时影响进程行为的键值对。程序在启动时会继承父进程的环境变量,并可以读取或修改这些变量。环境变量可以用于配置程序的行为、路径、权限等
一般通过以下几种方式进行提权:
- PATH环境变量劫持:
- 系统在查找可执行文件时,会根据PATH环境变量的路径顺序进行搜索。在PATH插入一个恶意程序的路径,确保在合法程序之前,系统将优先执行恶意程序
- LD_PRELOAD环境变量
- LD_PRELOAD环境变量指定一个动态链接库,该库会执行任何程序时被优先加载。可以重写某些程序中某些函数的实现,从而实现提权。
- 使用sudoers中的环境变量
- 在sudo配置中,某些环境变量可能被允许传递给被执行的命令,如果可以控制这些变量的值,可以通过利用这个实现提权。
利用/etc/passwd提权
/etc/passwd存储系统中每个用户的基本信息。
# 每一行配置的含义 7个
username:password placeholder:uid:gid:gecos:home directory:default shell
gecos:用户全名或其它描述信息
利用方式,前提可以修改/etc/passwd:
- suid程序,将某个用户的默认shell修改为suid权限的shell
- 修改用户id,用户组id,比如变更为0
- 如果用户密码存储在/etc/passwd中,可以获取到用户的明文密码进行破解。一般默认用户密码存储在
/etc/shadow
。