最近学习了一圈i春秋的相关知识之后,感觉还是需要刷题。pwnable.kr还没有刷完,所以抽时间出来有功夫就刷刷题。
第一题 fd
首先ssh连接,查看程序。
可以发现程序比较简单,其中fd是可以指定的,当fd值为0时为输入。
第二题.collision
查看完代码发现是需要第二个参数输入的值经过计算==给的值。
可以看到将char类型强制转换为int类型。而int类型一个占四个字节。所以就变成了20个字符长度,分为五段求和。
用pyhon随便减一下:
然后输入既可:
第三题 bof
简单溢出,扔ida里查询
发现基地址有44字节 再加上4个字节的ebp 4个字节的返回地址也就是52个字节后面覆盖成cafebabe既可。
exp:
然后查看flag既可
但是这里我有一个疑问,为什么开了cannary但是却可以直接溢出成功呢?
再具体分析下:
第一个黄色的行表明
overflowme到ebp为2c 到cafebabe 又加8个字节。