08-30————09-05
houseoforange_hitcon_2016
house of orange+FSOP伪造file
exp:
1 | from pwn import* |
至于为什么要改成0x61
1 | fake_file = '/bin/sh\x00'+p64(0x61)#to small bin |
可以参考ctf-HITCON-2016-houseoforange学习 - 一肩担风月 - 博客园 (cnblogs.com)
de1ctf_2019_weapon
有uaf通过写IO来得到libc地址然后通过double free来拿到shell
exp
1 | from pwn import * |
SWPUCTF_2019_p1KkHeap
将shellcode(orw)写到0x66660000这个内存空间上,然后再想办法劫持到这边运行。
接下来分析菜单,漏洞存在于free后,有个uaf。
由于tcache也是一个链栈,且不检查double free利用起来更方便了,我们想要劫持malloc_hook就要泄露libc地址,一般可以使用unsortbin attack。但是这个题只让free三次,想要将tcache填满,然后free进unsortbin是不可能的。但是tcache->count是一个无符号类型的数据,我们在double free后tcache成环,那么就可以一直malloc这一块地方内存,使tcache->count变为负数(实际上是很大的正数)。这样再free时就不会进入tcache中,而是进入unsort bin中,这样可以得到libc地址。
exp
1 | from pwn import * |
SWPUCTF_2019_login
非栈上的格式化字符串, 将printf_got地址内容改为system,再传如/bin/sh。但实际情况不传/bin/sh也可以打通。
exp
1 | from pwn import* |
sctf_2019_easy_heap
- 首先程序有off-by-null,由于chunk的大小不小于0x400就不会被放入tache,就会直接进入unsorted bin,由于这个原因,在以前的一道题,遇到过一次这样的类型
- 我们可以先申请4个chunk,大小分别为0x410,0x48,0x4f0(0x4f0是为了off by one),第四个任意,首先delete掉第0个,然后对chunk1进行编辑覆盖0x4f0的位置pre_inuse位,并且把其pre_size的大小修改为0和1chunk的总和,这样当我们下次在申请chunk时候可以构造double free
- 这时我们在申请一个chunk 大小跟先前的第0个一样,构造double free,并且对mmap处的内存进行写入shellcode
- 这时我们同理,在构造一个double free,通过unsorted bin中main_arena+96与__malloc_hook在libc-2.27的相差为0x30,所以在填入这个就是__malloc_hook了,之后把mmap的地址填入malloc_hook的位置,在调用add即可
exp
1 | from pwn import* |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 pwnpwn小菜鸡!