例行检查,这道题是静态的,函数多且看不懂

第十五行的Base64Decode函数,参数是s,用来将我们输入的s进行转换,是一个用于将base64格式的数据解码为二进制数据的函数,将转化后的值数据赋给v5,然后再把值给bss段上的input。

看向主函数,v7转化后的数据长度不能超过十二,输入测试发现输入的长度不能超过十一,因为输入的时候会加上换行符结束,send()可以发送十二个,sendline可以发送十一个字节,然后第二十二行把v7复制给了bss段上的input,然后是auth函数,会返回一段二进制数据编码。


payload这样写
1 | payload='aaaa'+p32(0x8049284)+p32(0x811EB40) |
只能刚好覆盖到ebp,因为最多输入0xc个字节,payload用函数编码为base64字符集,base64.b64encode()函数是Python标准库中的一个函数,用于将二进制数据编码为Base64字符串,在程序中经过Base64Decode()函数编码为二进制数据编码,也就是原来的数据,在程序中会把数据给bss段上的input,进入auth函数会将数据传给v4,v4的大小是八字节,会覆盖到ebp,ebp是input的地址0x811EB40,然后auth函数结束的时候,leave指令以后esp会指向0x811eb40,然后到下一个指令esp自动加四,esp=esp+4,也就是调用correct函数的地址,然后提权




exp
1 | from pwn import* |

评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~