【Vulnhub】HarryPotter Fawkes(未完待续...)

【Vulnhub】HarryPotter:Fawkes

Description

​ Fawkes is the 3rd VM of 3-box HarryPotter VM series in which you need to find the last 3 horcruxes hidden inside the machine and defeat Voldemort.

信息收集

fscan 扫描内网目标 IP

image-20241211173005090

确定目标 IP 为:192.168.1.2(这里 fscan 已经探测到 21端口 ftp 的文件了)

nmap 扫描目标全端口服务

image-20241211173446760

发现开放了:21、22、80、2222、9898

dirsearch 扫描 80 端口 web 页面目录

image-20241216130601207没结果

尝试 21 端口 ftp 匿名登陆,尝试 账号/密码:anonymous/anonymous

直接登录上去了。。。

image-20241216162039178

然后查看到目录里面有一个 server_hogwarts 文件

get 下来

image-20241216162728586

直接执行发现没有权限

image-20241216163124045

sudo chmod +x server_hogwarts

执行之后发现是一直处于执行状态的

image-20241216163248155

那有可能目标使用这个可执行软件一直开启着某个服务

分别查看进程和端口开放

ps aux | grep server_hogwarts
netstat -tlnp | grep server

image-20241216163604394

可以看到这个 473711 UID 的进程开放了 9898 端口,那不就说明该程序即为 9898 端口上运行的服务么

nc 连接 kali 本地 9898 端口

nc 127.0.0.1 9898

image-20241216164042236

测试了一下,发现很符合缓冲区溢出漏洞的条件,输入不同的选择会有不同的反馈

使用 checksec 工具查看 server_hogwarts 文件开启了哪些保护机制

image-20241217162349798

(这里讲明一下:checksec 用来检查可执行文件属性)

  • STACK_CANARY:在初始化堆栈时在栈底插入一个随机生成的 cookie,在函数返回前调用 __stack_chk_fail 检查 cookie 有没有发生变化,若发生变化则不返回,而直接终止程序。由于缓冲区溢出攻击时往往会覆盖掉 cookie 的值,故该保护机制开启时会导致常规的溢出攻击失效,程序会直接终止而不是跳转至攻击者注入的目标地址。
  • NX:开启时栈中数据没有执行权限,即攻击者不能通过缓冲区溢出注入攻击代码;
  • PIE:编译时将程序编译为位置无关, 即程序运行时各个段(如代码段等)加载的虚拟地址也是在装载时才确定,使程序的内存布局难以预料。

NXPIE 关闭,我们可以尝试注入反弹 shell 的代码并使其被执行,从而获取反弹 shell。

STACK CANARY 被开启了,意味着注入时我们也许要针对其进行某种绕过,先不管它。

将 kali 上的 ALSR 安全机制关闭(注意使用root权限),该技术会导致地址空间随机化,不便于调试:

echo 0 > /proc/sys/kernel/randomize_va_space

image-20241217164757760

使用 edb 对当前程序进行调试,探测注入点:

先 kali 安装

sudo apt-get install edb-debugger
sudo edb

点击 File -> Attach

image-20241217171931058

输入 server,选择目标进程,点 OK

image-20241217172354382

先直接使用 python 生成 500 个 A,复制粘贴到 nc 127.0.0.1 9898 的输入框里面(我这里随便打了一堆A)

python -c "print(500*'A')"

image-20241217172935459

然后会看到,edb 触发报错提示 address 0x41414141 ,查看此时 EIP 寄存器的值:

image-20241217173134425

发现变成了 0x41414141,而 '0x41' 为 'A' 的十六进制编码,说明我们输入的字符成功覆盖了函数返回地址,导致程序发生了错误跳转

[!IMPORTANT]

前面我们检查 server_hogwarts 文件的保护机制中 STACK CANARY 是开启的,但是事实上,我们可以重新进行单步调试,会发现在调试追踪的过程中是没有调用 __stack_chk_fail 函数检查 cookie 的正确性。通过 objdump 查看其反汇编代码进一步确认,发现原来 __stack_chk_fail 只在一部分函数返回前被调用了,而在注入点所在的函数中未被调用,因此我们可以正常进行注入。

因此,Canary found 仅代表程序中存在检查机制,而不一定在所有的ret 语句前都做了检查。在进行渗透测试时应先尝试注入,不要被一些未验证的细节限制了思路。

这里先暂停一下,后面会重新创建环境再打一遍。。。中途电脑出了问题,靶机ip地址改变了之后,再次去尝试发现后面的结果很多都出现了偏差

使用 msf-pattern 工具进行溢出点在输入字符中位置的探测,生成 500 个特征字符串

msf-pattern_create -l 500

image-20241220170704839

再次重复溢出操作(将生成的特征字符串填入),覆盖开始的便宜量。

edb 会弹出错误提示框,显示 EIP 的值

查找该段编码对应的字符串在模式字符串中的偏移量

msf-pattern_create -l 500 -q ********

结果显示 “Exact match at offset 112”

使用 python 生成一段自定义字符串进行验证:

python -c "print(112*'A' + 'BBBB' + 100*'c')"
posted @ 2024-12-20 17:22  酷比灯  阅读(19)  评论(0)    收藏  举报