几天不摸,感觉又回到解放前了。
以后一定要多尝试学习不同的东西,保持热爱,放好心态!
pwn学习之路系列的第二天,开坑!
这里记录一下写题的一些工具使用和碎碎念
当你拿到题目之后……(接下来用一道入门级别的题目做栗子)
第一件事要做的是checksec 他可以查看保护机制,这样有理由后续做题的分析
1 | checksec 文件 #看开启了哪些保护机制 |
虽然开启不开启我都不会写吧,但是还是要装装样子滴
然后可以用objdump看一些东西,比方说打印函数
1 | objdump -D 文件名 #可以看到文件的全部 |
用pwngdb的时候很难看到所有的东西,提前看一看还是很重要的
1 | objdump -R 文件名 #可以看到打印函数 |
看到打印函数是很有用的
接下来就可以上pwngdb了
1 | gdb 文件 #启动pwngdb |
一些简单的操作之前有篇文章写的有,我不额外多写了,讲点实际做题中用到的东西
输入一大串字符,溢出与否有回显,这个时候同学就想,那我可以一点一点的试,什么时候正好溢出了,不就可以算偏移了吗?现在有个更简单快捷的办法
1 | cyclic 要输入的字符的长度 |
可以看到是由英文字母组成的有规律的字符串,因此最大可以设置的值为26×26×26=456976
复制生成的字符串,在pwngdb中进行调试,当出现报错后,就可以再通过cyclic计算要偏移的字节了
这里报的错其实指的是输入的十六进制的字符,根据指出那一段溢出,可以接着算偏移
为什么呢?
因为恰恰就是这几个字符去覆盖了main返回地址,所以可以数数这一串字符距离字符串首字母间隔了多少字符
1 | cyclic -l 报错的4位字符 |