前言

nuoye大佬带不动我了, 让我先补补基础

  • 无特殊说明都基于 Ubuntu18.04

Pwntools

Pwntools

Pwndocker

pwndocker

Pwndbg + Pwngdb

Pwngdb + Pwndbg 的联合使用

防护措施

Linux 常用保护机制

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

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版本

libc database search: 根据低12位及对应的函数名来查找 libc 版本

Libc Searcher: 原理跟上面一样, 不过是 python 写的小工具

获得libc的one_gadget

one_gadget: 获得libc的one_gadget地址

安装

sudo apt install ruby
sudo gem install one_gadget

使用示例

root@7d67094353a1:/ctf/work# one_gadget libc.so.6
0x3f3d6 execve("/bin/sh", rsp+0x30, environ)
constraints:
rax == NULL

0x3f42a execve("/bin/sh", rsp+0x30, environ)
constraints:
[rsp+0x30] == NULL

0xd5bf7 execve("/bin/sh", rsp+0x70, environ)
constraints:
[rsp+0x70] == NULL

glibc 源码

glibc 源码下载地址

堆管理机制

堆漏洞利用思想

  1. 控制堆内存管理的相关数据结构: 如arena、bins、chunk
  2. 控制堆内存中的用户数据: 覆盖变量指针、函数指针、数据等

一般情况下都是为了构造任意内存读写以及控制流劫持

堆漏洞的防护方法

  • 保护堆内存管理

    • 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

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结构)
  • 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

Chunk shrink

  • Chunk shrink

House of 系列

House of spirit
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

改写more core

  • HCTF 2016 5-days

House of Orange : 改写_IO_list_all

  • Hitcon 2016House of orange

IO

  • 相关结构

Kernel

源码地址

解压内核镜像获得 vmlinux

extract-vmlinux

解压/重打包 cpio 文件

解压

cpio -idmv < baby.cpio

重打包

find . | cpio -o --format=newc > rootfs.cpio

环境配置

Linux Kernel 环境配置

Basics

Linux Kernel Basics

UAF

Linux Kernel UAF

ROP

Linux Kernel ROP

Ret2usr

Linux Kernel 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

参考

pwn中各种利用技巧1
pwn中各种利用技巧2
Atum大佬的CTF PWN选手养成