[攻防世界]新手区when_did_you_born
还是先看文件信息及防护措施
64位文件用64IDA打开,先看字符串窗口,找可利用的字符串
发现main里有system(“cat flag”),走到这一步的条件是一开始v5不能等于1926,进入else,然后v5又得等于1926,才能执行system(“cat flag”)这一句。由于开启了canary,所以没法直接覆盖返回地址到system(“cat flag”),所以试试利用gets来进行栈溢出,覆盖v5的值,让它在进入else里以后变成1926。
思路:
1 | from pwn import * |
payload解释:
- ‘a’*8:看栈算v20和v18的距离,这里v20就是v5,v18就是v4
地址0x00000020和0x00000018之间距离为8,所以填充8个’a’ - p64(0x00000786):1926的16进制值,用于覆盖之前输入的’666’
关于canary:
开了canary后,就会在返回地址之前放一个值,如果想要覆盖返回地址到指定位置,那么就不得不先覆盖掉这个值,但是canary保护会检查这个值是否被改写,如果和以前的值不一样,那么程序会直接终止,要用一些其他方法来绕过或者利canary本身弱点来攻击。所以开启canary后,不能直接覆盖返回地址到指定位置,但是这道题可以直接覆盖v5的值来拿到flag,不用将返回地址覆盖到system。