文件下载fm
导入IDA,查看伪代码

发现需要修改x的值就可以拿到shell,且发现printf(&buf)存在漏洞
且x的地址为0x0804A02C
这里需要补充一个额外知识,printf(x_address+"%c$n")可以修改[x_address]的值为x_address的字符长度
x_address在32位程序中当然是4个字节的,所以我们需要找到偏移c是多少。
可使用printf(x_address+"%p%p%p%p%p%p%p%p%p%p%p%p%p"),%p的次数按照具体实际定,只需要找到偏移量就可以了
这道题本身就是很碰巧的,x_address恰好是四字节刚好符合x==4的条件,如果是其他数值的话,还需要另外考虑了

发现偏移,可以根据0x和nil的数量判断偏移位置,在此偏移为11
所以我们只需要写入printf(x_address+"%11$n")便可以拿到shell
1 | from pwn import * |
运行结果

拿到flag

CTF{ba13fcc2ce152bd3cc0fbba6a22d46b6}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客!
评论







