buu——pwn学习
十、铁人三项(第五赛区)_2018_rop
checksec一下,开启了nx保护,然后拖入ida
呃。。。应该就是比较熟悉的rop的构建了,直接上exp吧,这类题目做挺多的了:
十一、gyctf_2020_borrowstack
先做下这题,一直想完整的了解栈迁移,借着这题真正的掌握栈迁移的手法和知识点吧,先checksec一下,再拖入ida分析
里面很简单,没有什么复杂的函数,很适合借此了解栈迁移!首先read函数读取的字节数不够,只能够刚好覆盖返回地址。第二输入点的位置是bss段上,不是栈。所以这时候就是要把栈迁移到这里,因为在这里我们可以有足够的输入构建系统函数调用shell
这题太坑了!!!!!!!!!!!!!首先,你如果使用了system函数调用/bin/sh,这时候无论你选择哪个版本的libc都无法成功获取shell!网上的师傅们好像也是这样,原因都只是模糊的说猜测是因为栈迁移的位置太靠近一些重要数据,可能还是影响到了什么东西。都采取了one_gadget的办法,这里我同样踩坑!
师傅们都是泄露出puts的got表地址,去查询出libc版本然后下载,然而我很惊奇的发现,我泄露的地址查询不到对应的libc版本。。。所以这里的exceve函数地址我是直接把师傅们的搬运过来了0x4526a
以及,栈迁移的发送函数,只能选择send。(别问为什么,我选择的是sendline。。。一直出问题,甚至为了找问题,我每个与师傅们wp不同地方慢慢改,发现竟然是这个原因,只能怪自己粗心吧,猜测是这里的read读取过于严格,所有输入数据都是刚好,多输入了一个\n导致了问题的发生,下次一定注意!)还有就是距离重要数据太近这点,前面的ret执行多次就是为了避免这个,因为bss段距离.got.plt太近了,并且跳转回main函数的时候,还会进行一次巨大的升栈,所以的话执行多次ret把栈的位置往bss段的高地址处迁移
其他的话,wp如下:
十二、bjdctf_2020_babyrop
例行checksec一下,然后运行一下。开启了nx和部分relro缓解机制。运行的结果也不能看出些什么,进入ida看看吧
在一个函数里面有着很明显的溢出点,足够我们覆盖返回地址并且构造系统函数了。一道常规的rop,就不多说了,已经做烂了。。
exp如下:
十三、others_shellcode
例行checksec以及执行附件,开启了nx,pie以及部分relro。运行附件发现直接就获取了shell。。
然后我试着nc一下远程,看看是不是也能获取shell,没想到。。确实可以
查看ida,发现附件中是已经调用了execve函数