Favorite Color

发布日期:2019年02月07日 类别:pwn 题目来源:ctflearn.com 题目链接:https://ctflearn.com/problems/391 (需要注册登录)

这是一道简单的溢出题。使用题目给出的地址端口和用户名密码,登录到远程服务器中。查看一下目录内容:

dir

flag.txt 就在当前目录,但是没有权限读。目录里还提供了源码和 Makefile,以及可执行文件 color。看来目的就是通过 color 的漏洞来读取 flag.txt 了。

点击此处显示 Writeup
点击此处隐藏 Writeup

打开看一下 color.c

这是一个典型的缓冲区溢出问题。正常情况下,vuln 将始终返回 0,导致 main 函数始终都执行 else 分支。我们的目标是能够执行 if 分支。

再看一下 Makefile:

使用 -fno-stack-protector 关闭了栈溢出保护。因此我们可以直接通过覆盖返回地址进行爆破。使用 gdb 反汇编一下 vuln 函数:

第 9 行可以看到,缓冲区大小为 0x30 即 48 个字节(虽然代码中的数组大小为 32 个字节)。所以我们需要 48 个字节把缓冲区填满,再加 4 个字节覆盖 ebp,再 4 个字节覆盖返回地址。返回地址就填进 if 分支的开始处,用 gdb 查看一下 main

0x08048657 就是我们希望的返回地址。因此构造 payload 并传入 color 程序:

至此我们就得到了 shell:

shell

cat 一下,就可以得到 flag 了。

dontpan1c 的 CTF 笔记
南阳一出即相,淮阴一出即将。

知识共享许可协议

本站所有作品均采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本站不包含明令禁止公开解题过程的题目。

本站由 Jekyll 强力驱动。