1.sonic
简单题,没什么好说的
1 | from pwn import* |
2.pwnpwn
也是简单题,泄露了canary之后,直接rop(给了/bin/sh)
1 | from pwn import * |
3.old_school
这个可以当做off-by-one的经典题,堆的大小限制为0x100,数量0x1f等于没有限制(唯手熟尔x
1 | from pwn import * |
4.bitflip
old_school的进阶版,堆的大小限制为0x50,思路还是和old_school一样无非是多分配几个堆
1 | from pwn import * |
5.old_school_revenge
堆的大小限制为0x100,这个好像要麻烦一点点。
1 | from pwn import * |
赛后复现版house of einherjar(确实简单x
1 | from pwn import * |
6.random_heap
堆的大小随机+libc-2.27,由于程序中存在uaf,我的思路是doublefree到
free_hook写system,概率为1/256
exp
1 | from pwn import * |
无视堆大小的做法
7.bornote
libc-2.31下的unlink,没啥东西,构造好堆,就差不多了
1 | from pwn import * |
8.oldecho
close(1)关闭了输出,不能像常规题一样泄露libc,pie,然后orw,由于后面没有stdout的指针,
只能调整栈到前面一点点,从而利用残留的stdout指针,改fileno,然后就是正常的栈迁移,orw。
思路参考(https://fmyy.pro/2020/10/19/Competition/CISCN-FINAL-2020/#Day2-Pwn3)
这波属实是原题复现
1 | from pwn import * |
flag
1 | flag{NpfH6fzHStuKl2CRfvheXWyKO3Bz60F5} |