攻防世界CGfsb
下载附件在vm中打开,checksec指令获得其设置的保护措施
由pwntools可知此开启了Canary,但未有pie操作禁止
拖入ida32位打开后F5反编译得
分析可得可利用跳转操作使pwnme值=8
利用%n的属性进行pwnme的赋值
可尝试交互判断其偏移位置
A的ASCII值为41,由此可判断输入并存储的数据AAAA应在栈中偏移值为10的地址
可得代码如下
1 | from pwn import * |
vm运行即得flag。
- **p32(0x0804a068)是pwnme的地址;**(ida中双击pwnme即得)
- **”aaaa%10$n”:**这里四个a的作用是填充字符数,因为p32函数将pwnme地址转化成四个字节的小端序字符,我们希望写入pwnme的数字是8,因此再填充4个任意字符这样下来%之前共有八个字符了。
- 举个其他的例子🌰: %85c%7$n——将85写入栈内第7个参数所指向的地址。
- $ 是偏移符号:前面贴着偏移量,而后紧跟n。
- %n :打印到目前为止所写的字符数
- 总的来说payload代表意为将第二段%之前输入的字符数载入到栈中偏移十位的变量中(导入了地址所以转移到了pwnme中)。