Pwn 知识点清单
前言
nuoye大佬带不动我了, 让我先补补基础
- 无特殊说明都基于 Ubuntu18.04
Pwntools
Pwndocker
Pwndbg + Pwngdb
防护措施
LibSearcher
通过泄露的地址寻找libc版本
网页版:libc database search (blukat.me)
libc-database: niklasb/libc-database: Build a database of libc offsets to simplify exploitation (github.com)
基于libc-database的:
Online: dev2ero/LibcSearcher: 🔍 LibcSearcher-ng – get symbols’ offset in glibc. (github.com)
修改 libc 版本
- 使用 patchelf 修改解释器和 libc 文件
Stack
Stack Overflow
常见危险函数
- 输入
ROP
ret2text
ret2shellcode
ret2syscall
ret2libc
ret2csu
ret2reg
SROP
- Defcon 2015 Qualifier fuckup
BROP
- HCTF 2016 出题人跑路了(pwn 50)
stack pivot
- EKOPARTY CTF 2016 fuckzing-exploit-200(基于栈的stack pivot)
HACKIM CTF 2015 -Exploitation 5(基于堆的stack pivot)
frame faking
- frame faking
ret2dl_resolve
了解动态链接的过程:
伪造动态链接的相关数据结构如
linkmap
、relplt
:Codegate CTF Finals 2015 yocto(fake relplt) http://o0xmuhe.me/2016/10/25/yocto-writeup
HITCON QUALS CTF 2015 readable(fake linkmap), Hack.lu’s 2015 OREO
Stack smash
覆盖 canary 保护输出的字符地址
Partial Overwrite
- HCTF 2016 fheap(基于堆溢出的Partial overwrite)
- 溢出位数不够
- XMAN 2016 广外女生-pwn, Codegate CTF Finals 2015, chess
Heap
编译指定libc
gcc file.c -o file -Wl, --rpath=./libc.so.6 -Wl, --dynamic-linker=./ld-2.23.so |
- rpath: libc 的路径
- dynamic-linker: ld 的路径
获得libc的one_gadget
one_gadget: 获得libc的one_gadget地址
安装
sudo apt install ruby |
使用示例
root@7d67094353a1:/ctf/work# one_gadget libc.so.6 |
glibc 源码
堆管理机制
多数Linux发行版
: glibc内存管理ptmalloc源代码分析.pdfAndroid/Firfox
: jemallocWindows:
微软自己实现了一套内存管理机制, 迄今没有公开Linux内核
: slab、slub、slob分配器
堆漏洞利用思想
- 控制堆内存管理的相关数据结构: 如arena、bins、chunk
- 控制堆内存中的用户数据: 覆盖变量指针、函数指针、数据等
一般情况下都是为了构造任意内存读写以及控制流劫持
堆漏洞的防护方法
保护堆内存管理
- Heap Canary
- 数据结构加密
- 在堆管理代码中加入安全检查
通防
ASLR
DEP
数据执行保护(DEP)(Data Execution Prevention) 是一套软硬件技术, 能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。在 Microsoft Windows XP Service Pack 2及以上版本的Windows中, 由硬件和软件一起强制实施 DEP。
堆漏洞利用技术与技巧
__free_hook 劫持
Chunk Extend and Overlapping
Use After Free
- first fit and UAF
- DEFCON CTF Qualifier 2014:shitsco、BCTF 2016:router、HCTF 2016 5-days(较难)
Double free
0CTF 2016 freenote, HCTF 2016 fheap, HCTF 2016 5-days(较难)
Heap Overflow
- Heap Overflow
- XMAN 2016 fengshui(紫荆花 pwn), SSC安全大会百度展厅 heapcanary, 攻防世界 babyfengshui
Fastbin attack
- Fastbin attack
- alictf 2016 fb, alictf 2016 starcraft, 0ctf 2016 zerostorage(较难)
Global_max_fast
2.23
版本位于0x3c67f8
处, 修改后可将 fastbin 范围扩大, 更容易使用 fastbin 相关攻击。
Fastbin dup consolidate
- Fastbin dup consolidate
Large bin attack
- Large bin attack
Unsorted bin attack
- Unsorted bin attack
- 0ctf2016 Zerostorage
Overwrite Topchunk
- House of Force
- BCTF 2016 bcloud, BCTF 2016 ruin(arm结构)
Unlink
- Modern Unlink Attack
- Classical Unlink Attack (现glibc中有检查, 不可用)
- Hitcon 2014 qualifier, MMA CTF 2016 Dairy, PlaidCTF 2014 200 ezhp, ZCTF 2016 note2
Off by one & Off by bull
Glibc_Adventures-The_Forgotten_Chunks.pdf
- off by one
- off by one: MMA CTF 2016 Dairy
- off by null: plaid CTF 2015 datastore, XMAN 2016 Final love_letter
Chunk shrink
- Chunk shrink
House of 系列
House of spirit
- House of spirit
- I-ctf2016-pwn200
House of Einherjar
- House of Einherjar
House of Force
- House of Force
House of Lore
- House of Lore
House of Orange
- House of Orange
House of Rabbit
- House of Rabbit
House of Roman
- House of Roman
House-of-Corrosion
- House-of-Corrosion
Heap spray(堆喷)
- pwnhub.cn calc
Heap fengshui(堆风水/堆排布)
- Heap fengshui
Exploit mmap chunk
- Hitcon 2014 qualifier stkof
- 0ops培训资料 Linux heap internal.pdf
改写more core
- HCTF 2016 5-days
House of Orange : 改写_IO_list_all
- Hitcon 2016House of orange
IO
- 相关结构
Kernel
解压内核镜像获得 vmlinux
解压/重打包 cpio 文件
解压
cpio -idmv < baby.cpio |
重打包
find . | cpio -o --format=newc > rootfs.cpio |
环境配置
Basics
UAF
ROP
Ret2usr
bypass-smep
Linux Kernel bypass-smep
Double Fetch
格式化字符串
- 格式化字符串
- MMACTF 2016 greeting, HCTF 2016 fheap, RuCTF 2016 weather
条件竞争漏洞
- 安恒杯 武汉大学邀请赛 fackfuzz, stupid shell
代码逻辑漏洞
- UCTF 2016 note
类型漏洞
- CVE-2015-3077
缓冲区未初始化
栈未初始化时, 栈中数据为上次函数调用留下的栈帧
堆未初始化时, 堆中数据为上次使用该堆块所留下的数据
UCTF 2016 note, 华山杯2016决赛 SU_PWN, 33C3 CTF PWN