plaidctf2015 - ebp —— FMT记录

First Post:

Last Update:

        本来是在看OFF-BY-ONE的,WIKI里将这个比赛的某题作为范例,但BUU只有“ebp”这题,于是顺手做了一下。然后才发现自己似乎一直以来有些太过依赖fmtstr_payload这种操作了,真到了需要自己一步步手动调试和操作的时候才发现,自己根本就不会构造payload……

    具体的笔记等以后详细的学完了fmt再补吧,现在先记录一下这件事,并且补一个记录

“%?$p”

这个格式化字符串打印相对format参数正向偏移任意栈地址中的内容,其中的p可以用d,x等替代

“%(number)c%?$hn”

这个格式化字符串可以实现向第?个参数存的地址的低字节中写数据,数据值为number的值(%hn,将指针视为 short 型指针,更为常用,因为要写入多大的数字,就需要打印多少个字符,如果直接用 int 操作,数字较大时打印会很慢,所以经常用%hn分两步进行)。

注意这里的%(number)c%?n(或%?hn)是把从格式化字符串所在栈地址开始,正向偏移的第?个栈地址中存放的值取出,作为一个地址(addr),并往这个addr中写入number这个数值

摘自:https://blog.csdn.net/qq_29947311/article/details/70176304

可供参考列表:

http://geeksspeak.github.io/blog/2015/04/20/plaidctf-ctf-2015-ebp-writeup/

https://www.cnblogs.com/wangaohui/p/4455048.html

http://shell-storm.org/shellcode/files/shellcode-236.php

https://www.zybuluo.com/pnck/note/91523