第一步:nc连接地址,查看是个什么情况
第二步:查文件的位数和保护情况
第三步:用ida打开查看主函数的意义
第四步:寻找后门函数,找到地址,查看偏移量
第五步:构造脚本,连接服务器拿到后门权限或者自己构造权限
下面看下我今天做的这个很简单的pwn题跟着上面的顺序走一遍
第一步:nc连接地址,看看可以直接执行命令吗
发现直接执行命令不太行,后面我们看看文件的保护情况和位数来确定用多少位的ida打开分析
第二步:查文件的位数和保护情况
发现是64位的,并且开了nx保护
第三步:用ida打开查看主函数的意义
用64位的ida打开后观察主函数
没啥可以用的地方,深入研究,查看返回的那个函数
这里有个char函数接受了输入,观察后面的注释应该用填充80个A,那么我们下面要找到后门的地址,用来链接从而完成对这个服务端的控制
第四步:找后门
我们可以shift+f12来查看一下字段,看看有没有后门的地址
发现一个/bin/sh字段,这个意思是开启控制台的意思,那么我们把栈用A填满后,将最后指向的地址指向这个函数的开始地址,那么我们就打开了控制台可以进行相应的操作
下面就是找一下/bin/sh的开始地址了,我们双击进去看看
发现了注释上说是从地址0x400596开始的,那么我们就可以开始编写脚本了
第五步:开始编写脚本
from pwn import * #这里是调用关于pwn要用到的库
p = remote("node5.buuoj.cn",27952) #创建连接
payload = b'a' * (0x80 + 8) +p64(0x400596) #构造payload,填充无用数据和最后的后门地址
p.sendline(payload) #发送payload到服务端
p.interactive() #持续连接,方便后面的控制
写完脚本后,就开始执行脚本看看
ls查看后发现了flag.txt文件我们cat它拿到flag

flag
flag{68a3f327-24ae-44fa-8e42-f1a1f9cc4be6}