Prime1 - 提权的另一种解法,彻底搞懂OpenSSL解密渗透提权,超强思路版。

本文主要是介绍Prime1 - 提权的另一种解法,彻底搞懂OpenSSL解密渗透提权,超强思路版。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提权枚举

现在我们直接从低权限用户开始;我们先按照提权步骤,简单的系统枚举

虽然我们知道可以利用系统版本低进行内核提权,内核提权虽然比较快比较方便,但也比较暴力,缺点非常明显;很容易导致系统服务中断,或者不稳定

  • 打比赛除外,你打比赛只要拿到flag得分都行

image-20240601231010996

列出账号具有的权限

执行enc,可以用root权限执行,不需要密码

image-20240601231301368

ENC探索与查找

image-20240601231426308

使用strings是否能看一下enc的内容;同样是没有权限的

image-20240601231632059

使用file enc
enc: executable, regular file, no read permission

他说这是个可执行的不可读权限文件

我们运行enc,需要密码;尝试了password.txt与user.txt都不行image-20240601232213214

  • 新的知识点openssl

此处应该是另一种思路寻找enc的泄露密码;根据经验,存放密码应该是系统备份的位置

我们这个权限应该是有很多报错的,将报错扔掉

find / -name '*back*' 2>/dev/null

后来我实验发现删不删报错都一样,应该是系统不支持的问题,因为页面一闪而过,我们对结果数据进行排序

,再做个less分屏显示;貌似没多大卵用;

我们在搜集过程中要么用backup要么用pass,为什么不用password,因为后边他写的是wd还是word就不清楚;如果我们搜bak就太多了

find / -name '*backup*' 2>/dev/null | sort | less

搜集一下信息吧;

/opt/backup
/opt/backup/server_database/backup_pass

/var/backups

image-20240601233252265

image-20240601233350693

将这个三个地方都看一下;嗯,试了下/var/backups,有passwd的备份,但是没有权限去读,shadow也是相同,sudo下看能不能cp到/tmp目录下;不行,再看其他文件有无信息;

你的密码为了enc,backup_password;然后祝福我们

image-20240601234112410

找的过程非常顺利,主要是怎么搜索,查找的时候用引号将关键词,用的backup查找,也可以用pass,避免信息洪水,把错误信息扔掉,还有排序,less使用

ENC破解

运行enc,输出了good;image-20240601234853850

有两个文件貌似无权显示,加个sudo再尝试下;

好的,这样就出来了

image-20240601235133845

cat;一个像base64,一个说我们是ippsec的粉丝,将ippsec字符串转成md5哈希形式,用它获得真实自己

image-20240601235216525

md5格式生成

echo -n 'ippsec' |md5sum

-n 不输出尾随换行符

都是固定格式,不会就自己查资料,要么是–help

要么是man 命令

image-20240602000015099

如果不用n;看一下;这个结果完全是不一样的

一定要知道,如果只是视觉上来看,或者文本标异的话那就不需要;如果设计到字节级操作,那就要考虑到

image-20240602000052873

美化下md5生成的值,echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1}'

awk是个文本编辑器,-F 是指定靠什么字符进行分割,第一第二分别是$1、$2、…

366a74cb3c959de17d61db30591c39d1

image-20240602000638553

openssl破解语句

看红队笔记才知道给的编码是openssl加密解码的,通过key.txt解出enc.txt的内容;后来才了解到,openssl解密后跟enc,怪不得这个思路没走,现在知道就得记住了

enc与openssl是捆绑的,

解密是-d 因为里面有base64编码,

我们还要解64编码-a 64位,

-k 指定上一步生成的md5


构造Cipher数据

这个是假如我们不知道base64编码(因为编码有很多,下次可能就是不认识的编码)解决的方法

openssl --help将编码复制到文件里进行整理

image-20240602002304784

我们用awk全局替换所有空格替换成回车键进行打印

  • gsub 替换
  • wc -l 行计数
  • uniqc 取唯一
awk '{gsub(/ /,"\n");print}'   cipher | sort | uniq | wc -l

整理完之后就可以把这些重定向到cipher里面

awk '{gsub(/ /,"\n");print}' cipher | sort | uniq > ciphers

cat

image-20240602004020030

这个做完之后掉头继续做openssl破解语句,看openssl enc --help说明-k怎么使用

image-20240602004557419

那我们还需要对md5进行echo值进行修改,那我们直接在输出修改语句吧

od 是linux系统命令,用man去查,

转储文件以8进制

image-20240602004924485

  • -A是根 不需要指定任何类型那就是n
  • -t x1
echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1}' | od -A n -t x1

image-20240602005553963

多了一个字符0a,再对oa去掉

tr -d 去掉任何换行符

echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1}' | tr -d '\n' | od -A n -t x1

image-20240602005812718

那现在还要进行修剪,

echo -n 'ippsec' | md5sum | awk -F ' ' '{print $1}' | tr -d '\n' | od -A n -t x1 | tr -d '\n' | tr -d ' '

image-20240602010012159

这个才是我们需要的,指定给key的

3336366137346362336339353964653137643631646233303539316333396431

for循环成功执行

们可以构造bash脚本,写一个for循环,将CipherTypes中的每一行替换为上述命令中的-cipher,bash脚本如下:

for cipher in $(cat ciphers);do echo 'nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=' | openssl enc -d -a -$cipher -k 3336366137346362336339353964653137643631646233303539316333396431;done

image-20240602011705311

密码为tribute_to_ippsec,很可能就是saket的ssh密码

image-20240602011859307

直接进入了ssh;提高交互性

python -c 'import pty;pty.spawn("/bin/bash")'

提权

给了提示信息,他说可以让我们执行此文件

/home/victor/undefeated_victor

image-20240602012133055

如果你能打败我,那就在你面前挑战我;/challenge: 未找到

那我们就写入内容

image-20240602012432567

那我们继续执行/bin/bash追加到challenge

对文件加执行权限,再次运行提示的程序,可以看到提权成功

这个靶机openssl思路也是解决了

eated_victor

如果你能打败我,那就在你面前挑战我;/challenge: 未找到

那我们就写入内容

那我们继续执行/bin/bash追加到challenge

对文件加执行权限,再次运行提示的程序,可以看到提权成功

这个靶机openssl思路也是解决了

image-20240602012721851
目前红队打靶就就更新到这里吧,要去忙其他的事情了,记录下红队视频的记录
https://www.bilibili.com/video/BV1ue4y1S7Zm?t=2.6
该去复习蓝队知识备战护网了,还需要保持学业期末成绩不挂科,之后再进行专升本的学习,真的是突然发觉时间不够用了,来年再见此期红队打靶更新吧!!!

这篇关于Prime1 - 提权的另一种解法,彻底搞懂OpenSSL解密渗透提权,超强思路版。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023727

相关文章

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO