fuzzerinstrospector
1 | GNU C Library (Ubuntu GLIBC 2.27-3ubuntu1.6) stable release version 2.27 |
1 | fuzzerinstrospector: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /home/yhellow/tools/glibc-all-in-one/libs/2.27-3ubuntu1.6_amd64/ld-2.27.so, for GNU/Linux 3.2.0, BuildID[sha1]=719784b3c6cf918a5fc48dea4142aae94c7f4dec, stripped |
- 64位,dynamically,全开
入侵思路
Switch-case 6:有一个任意指针调用,只要泄露出 libc_base 就可以 get shell
1 | unsigned __int64 __fastcall key(char *chunk_list) |
先把 tcache 装满,然后通过 unsortedbin 获取 main_arena,接着输入非数字字符使 scanf 写入失败,这样 main_arena 就留在了可控制的 heap 中
1 | pwndbg> telescope 0x562cbf64c9c0 |
获取 main_arena 需要一点小技巧:
1 | int Check() |
- chunk->data 的前8字节会最为 index,使其打印 chunk[index + 8]
- 我们只需要让 chunk[index + 8] == index,就可以确定前8字节的值了
完整 exp:
1 | from pwn import * |
小结:
题目本身不难,就是打的时候不知道 scanf 写入失败的情况,可惜了