Pwn summer record
暑假pwn的做题记录
ctfshow-flower
查看保护发现没开canary和pie
ida出来的函数表很乱,file查看是静态编译,用string定位到main函数,发现反编译不了,直接读汇编,最开始绕一下整型溢出即可,然后就不知道怎么操作了,请教了一下uuu师傅,说是可以用srop,然后去学了一下
大概就是走系统调用,如果溢出字节足够的话可以采用,只需把寄存器的值配好就行
学习了一下uuu师傅的exp,先mprotect开一段rwx内存,接read读入shellcode,最后ret到读入的地址就行
最后要注意一下就是mprotect是页对齐,指定内存区间必须包含整个内存页(4K),且长度需要是页的整数倍
1 | from pwn import * |
ctfshow-CET4
一道开了沙盒的题目,用seccomp查看禁用了啥,发现限制了execve的系统调用,考虑orw的打法,先mprotect一段rwx区域然后写shellcode就行
1 | from pwn import * |
ctfshow-CET6
栈迁移打了一下午没通,因为忽略了read函数的ret调用,导致程序走向了奇怪的方向,总的来说还得多调试
1 | from pwn import * |
babyheap_0ctf_2017
打堆重叠,利用malloc_hook在main_arena-0x10的位置泄露libc,本来想着打freehook,但是由于是glibc2.23的版本有fastbin对size的检测,查了下内存不大好构造,但是mallochook上倒是可以,所以最后把og写到mallochook即可
1 | from pwn import * |
vn_pwn_easyTHeap
整个做完学到不少
限制了malloc和free的次数,而且free仅有3次,由于是glibc2.27的环境,所以考虑劫持tcache_perthread_struct
tcache_perthread_struct
是一开始申请的size为0x250的chunk,调试的时候就能看到,利用double free劫持到这个chunk,而该chunk的user区域前64字节是存count数组,后64×8字节是存各个链的tcache entry
若能劫持tcache_perthread_struct
相当于能在tcache申请到任何你想要的地址(改entry)
但是在打印放入unsorted bin的chunk的fd指针后我们的free次数就无了,所以考虑打malloc_hook,改og(这里有个trick是前面的double free后malloc三次导致counts是-1也就是ff>7所以我们再free就直接进了unsorted bin,这里的字符型溢出在glibc 2.28增加了检测)
最后发现三个og都打不通,百度了一下提供了一种可行的操作,通过realloc调整栈帧结构来满足og的条件
根据realloc函数的汇编可以看出,调用后有大量push操作,而这可以改变rsp位置,从而使[rsp+xx]=NULL有可能满足,注意到在执行完压栈后还调用了realloc_hook,在malloc_hook-0x8的位置
所以我们可以采用在malloc_hook放realloc,在realloc_hook放og的操作,来看看是否能打通
1 | from pwn import * |
de1ctf_2019_weapon
主要的问题是没有show函数,这就导致了libc的泄露出现困难,需要打io_file
学了一手IO_File,虽然最后也没怎么搞明白,但这里只要打stdout结构体,部分写write_base即可,主要是要会动调
打了差不多半天,本地调了半天,也试了realloc调栈帧,都不行,结果一打远程通了。。。😢
1 | from pwn import * |
baby_arena_BCTF2018
buu的远程不大对劲,反正本地拿libc2.23通了
大致思路就是利用题目给的任意地址写大数字打global_max_fast
,往io_list_all
上写堆地址,伪造IO_file_plus
,最后将vtable指向的虚表的_overflow
改成og
最后exit调用_IO_flush_all_lockp
再调_overflow
也就是og来getshell
one_gadget这里出了点问题,用环境的libc找的og并没有打通,用system后来打通了,libc给我找了个错的system偏移,气人。。。
gdb调试时io_file相关指令
1 | pwndbg> x &_IO_list_all |
1 | from pwn import * |
- Post title:Pwn summer record
- Post author:hash_hash
- Create time:2022-07-07 22:26:08
- Post link:https://hash-hash.github.io/2022/07/07/Pwn-summer-record/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.