这比赛有点意思,我就看了俩题,结果两个Pwn都是原题。改改脚本就随便出来了。后面重点做一下那个 vmpwn
。
EasyAbnormal
程序分析
和2020 湖湘杯那个 blendpwn
一摸一样,改改脚本直接就出了。原理可以参考我之前的 湖湘杯WriteUp。
EXP
1 | from pwn import * |
maj0rone
一看到这个混淆瞬间就觉得在哪里做过。后面找了找,就是 2020 ciscn的一道题。可以参看我之前的 2020 ciscn的writeup。
EXP
1 | from pwn import * |
lgtwo
程序分析
Add
函数很常见的off-by-one
漏洞,可以用此实现堆重叠。
利用分析
Off-by-one
漏洞可以实现修改一个堆块的 size
,使其覆盖到后续的多个堆块。首先构造如下堆块结构,其中 chunk1
的 0xf1
是为了 使其size
为 0x100
,这样通过 off-by-one
漏洞,可以修改 size
的最低一字节,使其覆盖 chunk2
和 chunk3
。
1 | Add(0xf8, 'a') #0 |
释放 chunk1
,然后使用 chunk0
的 off-by-one
漏洞覆盖 chunk1
的size
为 0x1e1
,然后再申请0x1d8
的chunk1
,此时chunk1
即可覆盖 chunk2
和 chunk3
。
然后依次释放 chunk4
和 chunk3
到 fastbin
中,此时 chunk2 、 chunk3 和 chunk4
的堆头地址除了最后一字节不同以外,其他都相同。然后使用 chunk1
修改 chunk2
的 size
为 0xe1
并修改 chunk3
的 fd
的最后一字节为 0x00
,使其指向 chunk2
,再释放 chunk2
进入 unsortedbin
。 使用 chunk1
修改 chunk2
的 fd
指向 stdout
。
然后,使用fastbin attack
分配 stdout
结构体,泄露地址。
然后,直接修改 malloc_hook
为 one_gadget
地址 我没成功。
转而再次使用 Unsorted attack
去 free_hook
上面踩出 libc
地址,留下 0x7f
的size
。最后再次使用 fastbin attack
分配到 free_hook
上面的伪造chunk
,修改 free_hook
为 system
来 getshell
。
EXP
1 | from pwn import * |
cpu_emulator
这道题是 vmpwn
,后面把Kernel
入门学完,系统做一下 vmpwn
的相关题目,再来做这道题吧。
- 本文作者: A1ex
- 本文链接: http://yoursite.com/2020/11/18/上海大学生邀请赛/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!