bluewhale2024 - 卡死欧计算器
李明写的一个简单的表达式计算器,输入诸如2*(3+4)^5
的式子回车即可进行计算
就是有时候不太好使不知道为啥就死机了
李明发现的可以让计算器卡死的最小复现:
()+()+1
报错: double free or corruption (out)
文件属性
属性 | 值 |
---|---|
Arch | x64 |
RELRO | Partial |
Canary | off |
NX | on |
PIE | off |
strip | no |
解题思路
通过给的提示不难发现,程序将1.0
这一double值写在了堆块尺寸上,导致了free时的异常,
由此,我们得到了修改堆块尺寸的原语,如果能造成堆块重叠,就能将数字从num_stack
溢出写到op_stack
,
使得原本无法输入的#字符出现在op_stack
上,实现运行后门,具体解释如图所示
有以下几点可以再解释:
- 分配堆块大小由token数决定,由于token由数字和操作构成,故一般情况下不能利用
- 要想获得"0x91"的double值,需使用"0x60"的字面量,看起来有精度损失
- 需要用
1+(
的方式来将数字push到栈上,直接运算就无法溢出了 ()+()+
会导致将数字写入到num_stack[top]
,而top已经变成-1了,对应堆块的size
EXPLOIT
1 | from pwn import * |
- 标题: bluewhale2024 - 卡死欧计算器
- 作者: RocketDev
- 创建于 : 2024-05-03 23:44:00
- 更新于 : 2024-07-25 12:34:56
- 链接: https://rocketmadev.github.io/2024/05/03/kasio/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论