[攻防世界]进阶区forgot
进阶区第一道题,还算简单的一道题
先查看文件的属性及保护措施
发现只开了NX,没有canary就意味着可以直接栈溢出
看字符串窗口发现有system也有cat flag,点进去查看引用
发现在sub_80486CC函数里,而这个函数的作用其实就是构造一个system(“cat ./flag”),就是说只要跳转到这个函数就能直接拿到flag
接下来找漏洞,最好有栈溢出可以直接覆盖返回地址到0x80486CC
main里就存在一个很明显的溢出漏洞
没有限制v2的输入,所以可以让v2溢出。
而main函数最后有一句 (*(&v3 + –v14))() ,这句意思就是调用 (指针v3 + (v14 - 1))所指向的函数,如果v14等于1,那么这句话调用的就是v3原本指向的函数
而在栈里,v2在v3的上方(var_74是v2,anonymous_1是v3)
所以可以让v2溢出,来改变v3指向的地址值。
思路:
1 | from pwn import * |
payload解释:
- ‘A’*32:只要不满足条件,随便什么字符都可以,比如a不行,A可以;v2到v3间距(0x74-0x54)即32,所以’A’*32
- p32(0x80486CC):32位程序用p32打包,里面的是函数sub_80486CC的地址,让v3指向该地址