[BugkuCTF] PWN3

PWN3

历经千辛万苦终于把这道题拿下了,不容易啊/哭
特此前来记录一下

题目拿到后我们首先checksec一下
[BugkuCTF] PWN3保护全开啊有莫有,但是不慌(我承认我看到的时候慌了),继续分析吧
[BugkuCTF] PWN3粗略的看一下可以发现有四个输入点(红),并且还有一个返回输入值的输出点(粉)
ok,上ida瞅瞅,main函数没啥好说的,我们瞅瞅vul函数
[BugkuCTF] PWN3显然我们可以利用那两个read来搞一下事情,他们都是都thinking_note这个变量进行写操作,并且在第一个下面会将第一次输入的数据打印出来,那么利用这个我们就可以读取栈中存放的:vul函数返回地址、main函数返回地址
而在ida中我们可以看到vul函数的返回地址(D2E)以及main函数的开始位置(D20)
[BugkuCTF] PWN3而地址随机化对最后三位是无效的。利用栈中的vul函数返回地址减去0xD2E我们可以得到整个程序的偏移。
然后最重要的部分来了,这个题中没有system函数和/bin/sh字符串。我们得从libc库中去拿这两个东西,然而…他丫的这个题他没给libc库啊(╯‵□′)╯︵┴─┴

好吧,经过不懈的尝试,最终发现ubuntu16.04的默认libc就没问题…
好吧,当初是我倔强了,为了好看选择了19…

说一下重点的一个偏移吧
栈里的vul返回地址减去0xd2e 是整个程序的偏移
而栈里的main函数减去0x20830(ida里面看出来的)就是libc库的偏移

好吧,也没啥讲的