特权升级是一段旅程。没有灵丹妙药,很大程度上取决于目标系统的具体配置。内核版本、已安装的应用程序、支持的编程语言、其他用户的密码是影响您通往 root shell 之路的几个关键因素

什么是特权升级?

其核心是,特权升级通常涉及从权限较低的帐户到权限较高的帐户。从技术上讲,它是利用操作系统或应用程序中的漏洞、设计缺陷或配置疏忽来获得对通常限制用户访问的资源的未授权访问。

它为什么如此重要?

在执行真实世界的渗透测试时,很少能够获得立足点(初始访问权限),从而为您提供直接的管理访问权限。特权升级至关重要,因为它可以让您获得系统管理员级别的访问权限,从而允许您执行以下操作:

  • 重置密码
  • 绕过访问控制以破坏受保护的数据
  • 编辑软件配置
  • 启用持久性
  • 更改现有(或新)用户的权限
  • 执行任何管理命令

枚举

一旦您获得对任何系统的访问权限,枚举是您必须采取的第一步。您可能已经通过利用导致根级别访问的严重漏洞访问了系统,或者只是找到了一种使用低特权帐户发送命令的方法。与 CTF 机器不同,渗透测试活动不会在您获得对特定系统或用户权限级别的访问权限后结束。正如您将看到的,枚举在妥协后阶段和之前一样重要

hostname

hostname命令将返回目标机器的主机名。尽管此值可以很容易地更改或具有相对无意义的字符串(例如 Ubuntu-3487340239),但在某些情况下,它可以提供有关目标系统在公司网络中的角色的信息(例如用于生产 SQL 服务器的 SQL-PROD-01)

uname -a

将打印系统信息,为我们提供有关系统使用的内核的更多详细信息。这在搜索任何可能导致特权升级的潜在内核漏洞时非常有用

/proc/version

proc 文件系统(procfs)提供有关目标系统进程的信息。您会在许多不同的 Linux 风格上找到 proc,这使它成为您武器库中必不可少的工具。

查看/proc/version可能会为您提供有关内核版本和其他数据的信息,例如是否安装了编译器(例如 GCC)

/etc/issue

也可以通过查看/etc/issue文件来识别系统。该文件通常包含有关操作系统的一些信息,但可以很容易地进行自定义或更改。在主题上,可以自定义或更改任何包含系统信息的文件。为了更清楚地了解系统,查看所有这些总是好的

ps

ps 命令是查看 Linux 系统上正在运行的进程的有效方法。在您的终端上键入ps 将显示当前 shell 的进程

(进程状态)的输出ps 将显示以下内容:

  • PID:进程ID(进程唯一)
  • TTY:用户使用的终端类型
  • TIME:进程使用的 CPU 时间量(这不是该进程运行的时间)
  • CMD:正在运行的命令或可执行文件(不会显示任何命令行参数)

“ps”命令提供了一些有用的选项。

  • ps -A: 查看所有正在运行的进程
  • ps axjf:查看进程树(见下面的树形成直到ps axjf运行)
  • ps aux:该aux 选项将显示所有用户的进程 (a),显示启动进程的用户 (u),并显示未附加到终端的进程 (x)。查看 ps aux 命令输出,我们可以更好地了解系统和潜在漏洞

env 和 export

env 命令将显示环境变量

PATH 变量可能具有编译器或脚本语言(例如 Python),可用于在目标系统上运行代码或用于特权升级

sudo -l

目标系统可以配置为允许用户以 root 权限运行一些(或所有)命令。该sudo -l 命令可用于列出您的用户可以使用运行的所有命令sudo

ls

Linux 中使用的常用命令之一可能是ls

在寻找潜在的特权升级向量时,请记住始终使用ls 带有参数的命令-la 。下面使用ls -l遗漏了隐藏文件“secret.txt”

id

该id 命令将提供用户权限级别和组成员身份的总体概览。

值得记住的是,该id 命令也可以获取其他用户的信息:

/etc/passwd

读取/etc/passwd文件是发现系统用户的一种简单方法

虽然输出可能很长而且有点吓人,但它可以很容易地被剪切并转换成一个有用的列表以用于暴力攻击

cat /etc/passwd | cut -d ":" -f 1

请记住,这将返回所有用户,其中一些是不是很有用的系统或服务用户。另一种方法可能是 grep 查找“home”,因为真实用户很可能将他们的文件夹放在“home”目录下

cat /etc/passwd | grep home

history

使用命令查看较早的命令 history 可以让我们对目标系统有一些了解,尽管很少见,但可能存在密码或用户名等信息

ifconfig

目标系统可能是另一个网络的枢轴点。该ifconfig 命令将为我们提供有关系统网络接口的信息。下面的示例显示目标系统具有三个接口(eth0、tun0 和 tun1)。我们的攻击机器可以到达 eth0 接口,但不能直接访问其他两个网

可以使用ip route 命令查看存在哪些网络路由来确认这一点

netstat

在对现有接口和网络路由进行初步检查后,值得研究现有通信。该netstat命令可以与几个不同的选项一起使用,以收集有关现有连接的信息

  • netstat -a:显示所有侦听端口和已建立的连接。
  • netstat -at或者 netstat -au也可用于分别列出 TCP 或 UDP 协议。
  • netstat -l:列出处于“侦听”模式的端口。这些端口已打开并准备好接受传入连接。这可以与“t”选项一起使用,以仅列出使用 TCP 协议侦听的端口(如下)
  • netstat -s -t : 按协议列出网络使用统计信息(如下) 这也可以与或选项一起使用,-u 以将输出限制为特定协议
  • netstat -tp:列出带有服务名称和 PID 信息的连接

-l 这也可以与列出监听端口的选项 一起使用(如下)

我们可以看到“PID/Program name”列是空的,因为这个进程属于另一个用户。

下面是使用 root 权限运行的相同命令,并将此信息显示为 2641/nc (netcat)

  • netstat -i:显示接口统计信息。我们在下面看到“eth0”和“tun0”比“tun1”更活跃

netstat 您可能会在博客文章、文章和课程中最常看到的用法可以 细分netstat -ano 如下:

  • -a: 显示所有
  • -n: 不解析名称
  • -o:显示定时器

建议使用:

netstat -anpt

netstat -anpte

netstat -tunple

find

在目标系统中搜索重要信息和潜在的特权升级向量可能会很有成效。内置的“find”命令很有用,值得保留在您的武器库中

以下是“查找”命令的一些有用示例

查找文件:

  • find . -name flag1.txt: 在当前目录下找到名为“flag1.txt”的文件
  • find /home -name flag1.txt: 在/home目录下找到文件名“flag1.txt”
  • find / -type d -name config: 在“/”下找到名为config的目录
  • find / -type f -perm 0777: 查找777权限的文件(所有用户可读、可写、可执行的文件)
  • find / -perm a=x: 查找可执行文件
  • find /home -user frank: 在“/home”下查找用户“frank”的所有文件
  • find / -mtime 10:查找最近 10 天内修改过的文件
  • find / -atime 10:查找最近 10 天内访问过的文件
  • find / -cmin -60:查找最近一小时(60 分钟)内更改的文件
  • find / -amin -60:查找最近一小时(60 分钟)内的文件访问
  • find / -size 50M:查找大小为 50 MB 的文件

此命令还可以与 (+)(-) 符号一起使用,以指定大于或小于给定大小的文件

上面的示例返回大于 100 MB 的文件。重要的是要注意“find”命令往往会产生错误,有时会使输出难以阅读。这就是为什么明智的做法是使用带有“-type f 2>/dev/null”的“find”命令将错误重定向到“/dev/null”并获得更清晰的输出(如下)

可以写入或执行的文件夹和文件:

  • find / -writable -type d 2>/dev/null:查找可写文件夹
  • find / -perm -222 -type d 2>/dev/null:查找可写文件夹
  • find / -perm -o w -type d 2>/dev/null:查找可写文件夹
  • find / -perm -o x -type d 2>/dev/null :查找可执行文件夹

查找开发工具和支持的语言:

  • find / -name perl*
  • find / -name python*
  • find / -name gcc*

查找特定文件权限:

下面是一个简短的示例,用于查找设置了 SUID 位的文件。SUID 位允许文件以拥有它的帐户的特权级别运行,而不是运行它的帐户。这允许一个有趣的权限升级路径:

  • find / -perm -u=s -type f 2>/dev/null:查找带有SUID位的文件,这样我们就可以运行比当前用户更高权限级别的文件
  • find / -perm -04000 -print 2>/dev/null: 也是查找SUID文件
  • find / -perm -04000 -print 2>/dev/null:也是查找SUID文件

通用 Linux 命令

由于我们在 Linux 领域,熟悉 Linux 命令通常会非常有用。请花一些时间熟悉find, locate, grep, cut,sort等命令

Linux提权-权限升级的更多相关文章

  1. Linux提权(1)-基础版~

    利用Linux内核漏洞提权 VulnOS version 2是VulHub上的一个Linux提权练习,当打开虚拟机后,可以看到 获取到低权限SHELL后我们通常做下面几件事 1.检测操作系统的发行版本 ...

  2. Linux提权:从入门到放弃

    *原创作者:piece of the past,本文属Freebuf原创奖励计划,未经许可禁止转载 日站就要日个彻底.往往我们能拿下服务器的web服务,却被更新地比西方记者还快的管理员把内网渗透的种子 ...

  3. 记一次初步Linux提权

    前言. 提权这么久了  还是头一次提下Linux的服务器... 由于之前一直钻研的win服务器  要不是前些日子爆出来Struts2-045漏洞 估计还没时间接触Linux提权.... 正文. st2 ...

  4. 免考final linux提权与渗透入门——Exploit-Exercise Nebula学习与实践

    免考final linux提权与渗透入门--Exploit-Exercise Nebula学习与实践 0x0 前言 Exploit-Exercise是一系列学习linux下渗透的虚拟环境,官网是htt ...

  5. 利用Metasploit进行Linux提权

    利用Metasploit进行Linux提权 Metasploit 拥有msfpayload 和msfencode 这两个工具,这两个工具不但可以生成exe 型后门,一可以生成网页脚本类型的webshe ...

  6. 20. Linux提权:从入门到放弃

    几点前提 已经拿到低权shell 被入侵的机器上面有nc,python,perl等linux非常常见的工具 有权限上传文件和下载文件 内核漏洞提权 提到脏牛,运维流下两行眼泪,我们留下两行鼻血.内核漏 ...

  7. Unix/Linux提权漏洞快速检测工具unix-privesc-check

    Unix/Linux提权漏洞快速检测工具unix-privesc-check   unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具.它是一个Shell文件,可以检测 ...

  8. Linux提权中常见命令大全

    在拿到一个 webshell 之后,大家首先会想到去把自己的权限提升到最高,windows 我们会提升到 SYSTEM 权限,而 Linux 我们会提升到 root 权限,拿在进行 Linux 提权的 ...

  9. Linux提权小结

    原文链接:http://zone.secevery.com/article/1104 Linux提权1.信息收集2.脏牛漏洞提权3.内核漏洞exp提权4.SUID提权 0x00 基础信息收集(1):内 ...

  10. Linux提权

    讲Linux提权之前,我们先看看与Linux有关的一些知识: 我们常说的Linux系统,指的是Linux内核与各种常用软件的集合产品,全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和 ...

随机推荐

  1. [node]启动一个简单的node接口

    来自知乎. 需要先安装一个node,安装过程不表. 新建文件: nodeServer.js // 复制这个文件到目录,再输入一下命令: // npm i express // node nodeSer ...

  2. TypeScript Map 对象

    TypeScript Map 对象 Map 对象保存键值对,并且能够记住键的原始插入顺序. 任何值(对象或者原始值) 都可以作为一个键或一个值. Map 是 ES6 中引入的一种新的数据结构,可以参考 ...

  3. Godot从编辑器创建自定义场景类型对象

    Godot的编辑器提供了强大的所见即所得功能,并且,我们可以在不从源码编译的情况下,为编辑器提供新的节点类型. 首先,我们创建一个新场景,然后添加一个Node2D,然后为当前节点(Node2D)添加一 ...

  4. Python_DL_July_深度学习_10_深度学习与各种迁移学习应用

    深度学习10(上)深度学习与各种迁移学习应用

  5. 错题记录:C51同一个hex文件偶尔效果不行 的处理方法

    51单片机很多方面和C语言有区别,经验下来,总结以下:1.关于变量报错:报错的原因大多是因为编译器C++版本不同,所以变量我都推荐使用驼峰命名法;2.如果同一个hex文件,或者改的代码自己认为没问题 ...

  6. log调试法

    function writeToTxt($data,$filename="debug"){     if(is_array($data)){         file_put_co ...

  7. Python数据挖掘——银行分控模型的建立

    数据初始化 import pandas as pd from keras.models import Sequential from keras.layers.core import Dense, A ...

  8. css 伪类实现渐变线条

    如下图所示: 需要实现渐变的小竖线或者小横线 可以用伪类, 代码如下: div { position: relative; z-index: 2; &::after{ content: ''; ...

  9. 使用SonarQube对Unity项目进行代码分析的问题记录

    1.这里不仔细描述每个步骤,只记录一些关键问题,到官网下载解压最新版的SonarQube(我用的是8.9.1). 2.下载安装jdk,这里要注意官网的说明,我一开始下的jdk16,启动Sonar后报错 ...

  10. Sharp7与S7NetPlus 性能测试

    介绍 ​ Sharp7和都S7NetPlus是纯C#实现的基于以太网与S7系列的西门子PLC通讯的开源库.都支持.net core 跨平台可以部署在linxu, docker,windwos 中. 测 ...