特权升级是一段旅程。没有灵丹妙药,很大程度上取决于目标系统的具体配置。内核版本、已安装的应用程序、支持的编程语言、其他用户的密码是影响您通往 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. 2022-04-18内部群每日三题-清辉PMP

    1.在为一个有预算限制的项目生成状态报告时,项目经理发现该项目比进度计划落后一周.若要将项目拉回正轨,项目经理应该怎么做? A.重新分配关键路径活动的团队成员. B.向项目发起人要求额外的时间. C. ...

  2. C++ 手动实现单向循环链表(课后作业版)

    单向循环链表,并实现增删查改等功能 首先定义节点类,类成员包含当前节点的值, 指向下一个节点的指针 循环链表的尾节点指向头节点 节点定义: //node definition template < ...

  3. go实现ls

    package mainimport ( "fmt" "log" "os")func main () { f,err :=os.Open(& ...

  4. POJ--2689-C++

    题意很简单就是让你求给定区间的素数,然后用一个循环求出相距最远的相邻素数数和最近的素数以及相距最近的相邻素数 难点在与数据很大,所以不可能直接对区间的每一个数进行素数判断.但是,每个合数n都至少有一个 ...

  5. Python-pytest -> 在自动化测试中,如何切换不同的测试环境

    在构建自动化测试的脚本时候,我们可能会有不同环境的测试需求,如何实现在不同的测试环境之间切换呢?接下来介绍的这种方法,可以自定义命令行参数,从而根据不同的参数值实现不同环境的切换. 解决办法: 使用h ...

  6. sonar使用

    代码质量检查工具 sonar 1. 下载,版本sonar 4.5.1 运行bin下的bat文件,浏览器中访问: http://localhost:9000 , 成功. 2. 修改数据库为mysql数据 ...

  7. e.target和this区别

    首先,this是指向当前事件所绑定的元素 e.target指向事件执行时所点击区域的元素, 易混淆点,当鼠标所点击的元素有子元素,e.target指向子元素,若没有,则和this一样指向事件所绑定的事 ...

  8. c++学习 4 运算符及其应用技巧

    一 按位与运算符 "&"按位与运算符,全1为1,有0则0. 特点:和1相与保持不变,和0相与都变为0. 功能:将指定位置清0. example: 1000 1100 &am ...

  9. dotnet 项目生成自签名证书

    解决dotnet 项目浏览器不安全提示 dotnet dev-certs - 生成自签名证书,以便在开发中使用 HTTPS. dotnet dev-certs https --clean dotnet ...

  10. 2003031120—廖威—Python数据分析五一假期作业

    项目 要求 课程班级博客链接 20级数据班(本) 这个作业要求链接 Python数据分析五一假期作业 博客名称 2003031120-廖威-Python数据分析五一假期作业 要求 每道题要有题目,代码 ...