qual_virtual
1 | ciscn_2019_qual_virtual: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=3d563a19678c3cec2fafbd07e6817b248c869819, stripped |
- 64位,dynamically,Canary,NX
漏洞分析
1 | if ( do_mov_out(data, &temp) ) |
1 | if ( !do_mov_out(data, &temp1) || !do_mov_out(data, &temp2) ) |
- 在 Load 和 Save 指令中存在堆溢出
入侵思路
由于本题目不能随意控制 malloc 和 free,因此优先考虑打 GOT 表
仔细观察堆布局就可以发现破绽:
1 | pwndbg> telescope 0x1b822c0 /* stack */ |
- 每个 get_Chunk 函数都会生成两个堆块,第一个堆块用于存放控制信息,而第二个堆块中可以任意堆溢出
- 只需要覆盖第一个堆块上的堆地址为 GOT 表地址,就可以控制 GOT 表
完整 exp 如下:
1 | # -*- coding:utf-8 -*- |