题目
checksec

存在 canary 保护
IDA
main

一个简单的登录系统
观察到 [rbp-0x130] ,它来自于 password_checker 的 rax
Admin_password_checker

snprintf 这里有一个坑, src 和 dest 相同会产生 buffer overlap 的问题,产生非预期结果,而使用 ‘\x00’ 可以截断这种行为
其实经过动调可知,我们应该劫持 a1 为后门函数地址
Admin_password_checker_asm

上面的 a1 即此处的 rax ,为 rdi 解两层引用,接下来回到 main 去溯源 rdi
main_asm

rdi 溯源至 rbp - 0x130 ,注意并不是 [rbp - 0x130] , [rbp - 0x130] 溯源至 password_checker 后的 rax
password_checker_asm

rax 溯源至 rbp - 0x18 ,注意并不是 [rbp - 0x18] ,由此 call rax 中的 rax 最终溯源 [rbp - 0x18] ,注意此处的 rbp 为 password_checker 的 rbp
read_password

backdoor

攻击思路
接下来可以直接动调,获取以下信息:
- call rax 中 rax 的最初来源
- read_password 中覆盖到 rax 最初来源所需的溢出长度
然后就可以直接 get shell 啦
exp
| |
