文章预览
1. SavethePrincess 保护全开,给了libc和libseccomp,而且RUNPATH指定了根目录。 主要有两个函数,先看magic(),似乎想让你爆破密码,爆破之后,有个read的小溢出。 找找love从哪儿来的。init()初始化时随机的,而且根据生成的范围,仅小写字母。 gdb跟进去看一眼。 那就要爆破26^8次,好像是个天文数字啊。但buf是10字节,比dest多了2字节。为什么非得多2字节呢?这个即使动态调试也很难明白问题出在哪儿,但可以看buf和i的相对距离。 rsp+0xD和rsp+0x17刚好是10字节差距,也就是说printf("you password is %s\n,nononno!!!\n", buf);是为了泄露i的。 我们在gdb中输入正确前两位密码试一试。 可以看到i为0x2,刚好粘在buf后面被打印出来。 这样爆破的数量级就变成了26*8,至此可以写出爆破密码的脚本。 from pwn import * context.log_level = 'debug' context.arch= 'amd64' #sh = gdb.debug("./Savethe
………………………………