2017年 0CTF---部分Pwn writeup
easiestPrintf
这个题目让我想起了 之前做过的 oneshoot。
先说下题目保护是全开的。然后我们开始分析下程序。
printf 后面直接跟了exit,由于保护全开,我们不能去修改 返回地址或者exit的got表。
在libc我们仔细看来printf函数:
1 | int printf(int a1, ...) |
上图是一个任意地址泄漏。
这里有一个很明显的漏洞–格式化串漏洞
1 | .text:08048811 ; --------------------------------------------------------------------------- |
仔细观察,我们发现printf,实质上是调用了vfprintf((int)stdout, a1, (int)va)
,
如果 dword_1AC768和func_hook + 4 * char_size) 这两个位置的存储的数据为0,那么会进入到正常的流程,那么我就可以从libc中控制流程。
之后做的时候,发现别人特别好的一个方法,那就是
不需要自己%x这样来计算测试偏移值,直接用pwntools中的fmtstr_payload来生成
1 | #!/usr/bin/env python2.7 |