此题的漏洞主要是在第4个选项,即wish函数中,在里面有栈溢出漏洞,能够利用栈溢出返回到任意地址中。用ida查看程序,需要集齐7龙珠才能许愿。初始有15元,购买1个龙珠5元,出售1个龙珠3元,在购买时进行下述检查:
1 | if ( !money ) |
此题的漏洞主要是在第4个选项,即wish函数中,在里面有栈溢出漏洞,能够利用栈溢出返回到任意地址中。用ida查看程序,需要集齐7龙珠才能许愿。初始有15元,购买1个龙珠5元,出售1个龙珠3元,在购买时进行下述检查:
1 | if ( !money ) |
第一次和大佬们一起参加CTF比赛,在pwn中选了一个栈溢出的题目来做。
先丢到ida
中,如其名“跑马灯”,程序会在跑完三轮跑马灯前的最后一次,设置一个定时器并在2秒后触发进入死循环handler
。在跑马灯结束到触发alarm
之前,有一个窗口可以提供输入。
1 | signal(14, (__sighandler_t)handler); |
buf
的空间大小为0x400,read()
的读入长度也为0x400。进入echo()
函数继续查找。
字符串s2
长度为0x10,内容从buf
进行拷贝,当遇到\x00
时特,停止拷贝。栈布局如下
size | data |
---|---|
0x10 | s2 |
0x08 | saved ebp |
0x08 | return address |
0x400 | buf |
构造如下payload
:
使用ida查看程序,在函数0x40063d
中有read
函数,读取用户输入的200个字节。接着调用puts
函数输出。
1 | sub_40063D((__int64)&v1, 200); |