type
status
date
slug
summary
tags
category
icon
password
Linux提权总结
提权概念
特权升级有两种类型:水平和垂直。在水平升级中,您从一个用户转移到 另一个用户。在这种情况下,两个用户都是通用的,而在垂直方式中,我们将特权从普通用户提升为管理员。
用户无法访问(读取/写入/执行)不允许访问的文件。但是,超级用户 (root)可以访问系统上存在的所有文件。 为了更改任何重要的配置或进行进一步的攻击,首先,我们需要在任何基于Linux的系统上获得root用户 访问权限
为什么我们需要执行特权升级?
- 读/写任何敏感文件
- 重新启动之间轻松保持
- 插入永久后门
特权升级所使用的技术
我们假设现在我们在远程系统上有外壳。根据我们渗透进去的方式,我们可能没有“ root”特权。以下提到的技术可用于获取系统上的“ root”访问权限。
- 内核漏洞
- 以root身份运行的程序
- 已安装的软件
- 弱密码/重用密码/纯文本密码
- 内部服务
- Suid配置错误
- 滥用sudo权利
- 由root调用的可写脚本
- 路径配置错误
- Cronjobs
- 卸载的文件系统
在提权前,我们需要收集主机信息,以确定成功提权的方式
提权前的信息收集
操作系统
发行类型 版本
内核版本 32位还是64位
查看环境变量 环境变量中可能存在密码或API密钥
路径(Path) 如果对该变量内的任何文件夹都具有写权限,则可以劫持某些库或二进制
查看打印机有无
应用与服务
哪些服务正在运行?
哪个服务具有哪个用户特权?
root正在运行哪些服务?在这些易受攻击的服务中,值得仔细检查!
安装了哪些应用程序?他们是什么版本的?他们目前在运行吗?
服务设置是否配置错误?是否附有(脆弱的)插件?
计划了哪些工作?(计划任务)
是否有纯文本用户名和/或密码?
- 检查Web服务器连接到数据库的文件(config.php或类似文件)
- 检查数据库以获取可能被重用的管理员密码
- 检查弱密码
通讯与网络
系统具有哪些NIC?它是否连接到另一个网络?
查看网络配置设置,确定关于该网络的信息,DHCP服务器?DNS服务器?网关?
其他哪些用户和主机正在与系统通信?
在这种情况下,用户正在运行某些只能从该主机获得的服务。我们无法从外部连接到服务。它可能是开发服务器,数据库或其他任何东西。这些服务可能以root用户身份运行, 或者其中可能存在漏洞。
IP和/或MAC地址
数据包嗅探是否可能?可以看到什么?
注意:tcpdump tcp dst [ip] [端口]和tcp dst [ip] [端口]
我们有shell吗?
是否可以进行端口转发?重定向流量并与之交互
注意:FPipe.exe -l [本地端口] -r [远程端口] -s [本地端口] [本地IP]
注意:ssh-[L / R] [本地端口]:[远程IP]:[远程端口] [本地用户] @ [本地IP]
注意:mknod backpipe p; nc -l -p [远程端口] backpipe
可以使用隧道吗?在本地远程发送命令
机密信息和用户
你是谁?谁登录?谁已经登录?那里还有谁?谁能做什么?
可以找到哪些敏感文件?
home/root目录有什么"有用"的地方吗?如果可以访问
里面有密码吗?脚本,数据库,配置文件还是日志文件?密码的默认路径和 位置
用户正在做什么?是否有纯文本密码?他们在编辑什么?
用户信息
私钥信息
文件系统
可以在/ etc /中写入哪些配置文件?能够重新配置服务?
在/ var /中可以找到什么?
网站上是否有任何设置/文件(隐藏)?有数据库信息的任何设置文件吗?
日志文件中是否有任何内容(可以帮助"本地文件包含")
如果命令受到限制,获取交互shell
是否存在安装文件系统?
是否有任何卸载的文件系统?
“Linux文件权限”是什么?
可以在哪里写入和执行?一些“常见”位置:/ tmp,/ var / tmp,/ dev / shm
任何"问题"文件吗?Word可写的"没人"文件
准备和查找漏洞利用代码
安装/支持哪些开发工具/语言?
如何上传文件?
系统是否已完全打补丁?
linux提权自动信息收集
枚举脚本
LinEnum
Unix特权
运行脚本并将输出保存在文件中,然后使用grep发出警告。
Linprivchecker.py
通过利用Linux内核中的漏洞,有时我们可以提升特权。我们通常需要了解的操作系统, 体系结构和内核版本是测试内核利用是否可行的测试方法。
内核漏洞
内核漏洞利用程序是利用内核漏洞来执行具有更高权限的任意代码的程序。成功的内核利用通常以root命令提示符的形式为攻击者提供对目标系统的超级用户访问权限。在许多情况下,升级到Linux系统上的根目录就像将内核漏洞利用程序下载到目标文件系统,编译该漏洞利用程序然后执行它一样简单。
假设我们可以以非特权用户身份运行代码,这就是内核利用的通用工作流程。
考虑到要成功利用内核利用攻击,攻击者需要满足以下四个条件:
抵御内核漏洞的最简单方法是保持内核的修补和更新。在没有补丁的情况下,管理员可以极大地影响在目标上转移和执行漏洞利用的能力。考虑到这些因素,如果管理员可以阻止将利用程序引入和/或执行到Linux文件系统上,则内核利用程序攻击将不再可行。因此,管理员应专注于限制或删除支持文件传输的程序,例如FTP,TFTP,SCP,wget和curl。当需要这些程序时,它们的使用应限于特定的用户,目录,应用程序(例如SCP) 和特定的IP地址或域。
内核信息收集
一些基本命令收集一些Linux内核信息
搜索漏洞
通过脏牛(CVE-2016-5195)利用易受攻击的机器
其他内核提权
对于不同的内核和操作系统,可以公开获得许多不同的本地特权升级漏洞。是否可以使用内核利用漏洞在Linux主机上获得root访问权限,取决于内核是否易受攻击。Kali Linux具有exploit-db漏洞的本地副本,这使搜索本地根漏洞更加容易。我不建议在搜索Linux内核漏洞时完全依赖此数据库。
检查内核版本以及是否存在一些可用于提升特权的漏洞,我们可以在此处找到良好的易受攻击的内核列表以及一些已编译的漏洞利用程序:
https : //github.com/lucyoa/kernel-exploits和exploitdb sploits。
其他网站,可以找到一些编译漏洞:
也可以直接在MSF中搜索
特别提醒
不要一开始就利用任何本地特权升级漏洞
如果可以避免,请不要使用内核漏洞利用。如果使用它,可能会使计算机崩溃或使其处于不稳定状态。因此,内核漏洞利用应该是最后的手段。
历史漏洞提权
CVE-2016-5195(DirtyCow)
Linux内核<= 3.19.0-73.8
利用以root权限运行的服务
著名的EternalBlue和SambaCry漏洞利用了以root身份运行的smb服务。由于它的致命组合,它被广泛用于在全球范围内传播勒索软件。这里的手法是,如果特定服务以root用户身份运行,并且我们可以使该服务执行命令,则可以root用户身份执行命令。我们可以重点检查Web服务,邮件服务,数据库服务等是否以root用户身份运行。很多时候,运维都以root用户身份运行这些服务,而忽略了它可能引起的安全问题。可能有一些服务在本地运行,而没有公开暴露出来,但是也可以利用。
NFS权限弱
如果您在linu服务器上具有低特权shell,并且发现服务器中具有NFS共享, 则可以使用它来升级特权。但是成功取决于它的配置方式。
什么是NFS?
网络文件系统(NFS)是一个客户端/服务器应用程序,它使计算机用户可以查看和选择存储和更新远程计算机上的文件,就像它们位于用户自己的计算机上一样。在 NFS 协议是几个分布式文件系统标准,网络附加存储之一。
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
root_sqaush和no_root_sqaush
Root Squashing(root_sqaush)参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程根用户在连接时会分配一个用户" nfsnobody ",它具有最少的本地特权。如果 no_root_squash 选项开启的话",并为远程用户授予root用户对所连接系统的访问权限。在配置NFS驱动器时,系统管理员应始终使用" root_squash "参数。
注意:要利用此,no_root_squash 选项得开启。
利用NFS并获取Root Shell
Suid和Guid配置错误
描述
SUID代表设置的用户ID,是一种Linux功能,允许用户在指定用户的许可下执行文 件。例如,Linux ping命令通常需要root权限才能打开网络套接字。通过将ping程序标记为SUID(所有者为root),只要低特权用户执行ping程序,便会以root特权执行ping。
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
当运行具有suid权限的二进制文件时,它将以其他用户身份运行,因此具有其他用户特权。它可以是root用户,也可以只是另一个用户。如果在程序中设置了suid,该位可以生成shell或以其他方式滥用,我们可以使用它来提升我们的特权。
以下是一些可用于产生SHELL的程序:
查找suid和guid文件
其他命令
常用提权方式
nmap
Nmap的SUID位置,很多时候,管理员将SUID位设置为nmap,以便可以有效地扫描网络,因为如果不使用root特权运行它,则所有的nmap扫描技术都将无法使用。
但是,nmap(2.02-5.21)存在交换模式,可利用提权,我们可以在此模式下以交 互方式运行nmap,从而可以转至shell。如果nmap设置了SUID位,它将以root特 权运行,我们可以通过其交互模式访问'root'shell。
msf中的模块为:
vi/vim
Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。
打开vim,按下ESC
或者
bash
以下命令将以root身份打开一个bash shell。
less
程序Less也可以执行提权后的shell。同样的方法也适用于其他许多命令。
more
cp
覆盖 /etc/shadow 或 /etc/passwd
mv
覆盖 /etc/shadow 或 /etc/passwd
nano
awk
man
wget
apache
仅可查看文件,不能弹 shell
tcpdump
python/perl/ruby/lua/php/etc
python
perl
滥用SUDO
在渗透中,我们拿到的webshell和反弹回来的shell权限可能都不高,如果我们可以使用sudo命令访问某些程序,则我们可以使用sudo可以升级特权。
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信 息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为"sudoer");在一般用户需要取得特殊权限时,其可在命令前加上"sudo",此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
参数说明:
Sudoer文件
sudoers文件主要有三部分组成:
- sudoers的默认配置(default),主要设置sudo的一些缺省值
- alias(别名),主要有Host_Alias|Runas_Alias|User_Alias|Cmnd_Alias
- 安全策略(规则定义)
语法
root用户可以从 ALL 终端作为 ALL (任意)用户执行,并运行 ALL (任意)命令
第一部分是用户,第二部分是用户可以在其中使用 sudo 命令的终端,第三部分是他可以充当的用户,最后一部分是他在使用时可以运行的命令。 sudo
以上命令,使用户可以从任何终端使用touhid的用户密码关闭命令电源。
上面的命令,使用户可以从任何终端运行,以root用户身份运行命令find 而无需密码。
利用SUDO用户
要利用sudo用户,您需要找到您必须允许的命令。
上面的命令显示了允许当前用户使用的命令。
使用查找命令
使用Vim命令
使用Nmap命令
没有互动的最新方式
使用Man命令
之后按!按下并按Enter
使用更少/更多命令
之后按!按下并按Enter
使用awk命令
docker组提权
- 作者:告白
- 链接:https://www.gbsec.top/article/Linux%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章