Coder Social home page Coder Social logo

how2heap's Introduction

Educational Heap Exploitation

This repo is for learning various heap exploitation techniques. We use Ubuntu's Libc releases as the gold-standard. Each technique is verified to work on corresponding Ubuntu releases. You can run apt source libc6 to download the source code of the Libc your are using on Debian-based operating system.

We came up with the idea during a hack meeting, and have implemented the following techniques:

File Technique Glibc-Version Patch Applicable CTF Challenges
first_fit.c Demonstrating glibc malloc's first-fit behavior.
calc_tcache_idx.c Demonstrating glibc's tcache index calculation.
fastbin_dup.c Tricking malloc into returning an already-allocated heap pointer by abusing the fastbin freelist. latest
fastbin_dup_into_stack.c Tricking malloc into returning a nearly-arbitrary pointer by abusing the fastbin freelist. latest 9447-search-engine, 0ctf 2017-babyheap
fastbin_dup_consolidate.c Tricking malloc into returning an already-allocated heap pointer by putting a pointer on both fastbin freelist and unsorted bin freelist. latest Hitcon 2016 SleepyHolder
unsafe_unlink.c Exploiting free on a corrupted chunk to get arbitrary write. latest HITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots
house_of_spirit.c Frees a fake fastbin chunk to get malloc to return a nearly-arbitrary pointer. latest hack.lu CTF 2014-OREO
poison_null_byte.c Exploiting a single null byte overflow. latest PlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote
house_of_lore.c Tricking malloc into returning a nearly-arbitrary pointer by abusing the smallbin freelist. < 2.31 unknown
overlapping_chunks.c Exploit the overwrite of a freed chunk size in the unsorted bin in order to make a new allocation overlap with an existing chunk < 2.29 patch hack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap
overlapping_chunks_2.c Exploit the overwrite of an in use chunk size in order to make a new allocation overlap with an existing chunk < 2.29 patch
mmap_overlapping_chunks.c Exploit an in use mmap chunk in order to make a new allocation overlap with a current mmap chunk latest
house_of_force.c Exploiting the Top Chunk (Wilderness) header in order to get malloc to return a nearly-arbitrary pointer < 2.29 patch Boston Key Party 2016-cookbook, BCTF 2016-bcloud
unsorted_bin_into_stack.c Exploiting the overwrite of a freed chunk on unsorted bin freelist to return a nearly-arbitrary pointer. < 2.29 patch
unsorted_bin_attack.c Exploiting the overwrite of a freed chunk on unsorted bin freelist to write a large value into arbitrary address < 2.29 patch 0ctf 2016-zerostorage
large_bin_attack.c Exploiting the overwrite of a freed chunk on large bin freelist to write a large value into arbitrary address latest 0ctf 2018-heapstorm2
house_of_einherjar.c Exploiting a single null byte overflow to trick malloc into returning a controlled pointer latest Seccon 2016-tinypad
house_of_orange.c Exploiting the Top Chunk (Wilderness) in order to gain arbitrary code execution < 2.26 unknown Hitcon 2016 houseoforange
house_of_roman.c Leakless technique in order to gain remote code execution via fake fastbins, the unsorted_bin attack and relative overwrites. < 2.29 patch
tcache_dup.c Tricking malloc into returning an already-allocated heap pointer by abusing the tcache freelist. 2.26 - 2.28 patch
tcache_poisoning.c Tricking malloc into returning a completely arbitrary pointer by abusing the tcache freelist. > 2.25
tcache_house_of_spirit.c Frees a fake chunk to get malloc to return a nearly-arbitrary pointer. > 2.25
house_of_botcake.c Bypass double free restriction on tcache. Make tcache_dup great again. > 2.25
tcache_stashing_unlink_attack.c Exploiting the overwrite of a freed chunk on small bin freelist to trick malloc into returning an arbitrary pointer and write a large value into arbitraty address with the help of calloc. > 2.25 Hitcon 2019 one punch man
fastbin_reverse_into_tcache.c Exploiting the overwrite of a freed chunk in the fastbin to write a large value into an arbitrary address. > 2.25
house_of_mind_fastbin.c Exploiting a single byte overwrite with arena handling to write a large value (heap pointer) to an arbitrary address latest
house_of_storm.c Exploiting a use after free on both a large and unsorted bin chunk to return an arbitrary chunk from malloc < 2.29

The GnuLibc is under constant development and several of the techniques above have let to consistency checks introduced in the malloc/free logic. Consequently, these checks regularly break some of the techniques and require adjustments to bypass them (if possible). We address this issue by keeping multiple versions of the same technique for each Glibc-release that required an adjustment. The structure is glibc_<version>/technique.c.

Have a good example? Add it here! Try to inline the whole technique in a single .c -- it's a lot easier to learn that way.

Heap Exploitation Tools

There are some heap exploitation tools floating around.

shadow

jemalloc exploitation framework: https://github.com/CENSUS/shadow

libheap

Examine the glibc heap in gdb: https://github.com/cloudburst/libheap

heap-viewer

Examine the glibc heap in IDA Pro: https://github.com/danigargu/heap-viewer

heapinspect

A Python based heap playground with good visualization for educational purposes: https://github.com/matrix1001/heapinspect

Forkever

Debugger that lets you set "checkpoints" as well as view and edit the heap using a hexeditor: https://github.com/haxkor/forkever

Malloc Playground

The malloc_playground.c file given is the source for a program that prompts the user for commands to allocate and free memory interactively.

Pwngdb

Examine the glibc heap in gdb: https://github.com/scwuaptx/Pwngdb

Other resources

Some good heap exploitation resources, roughly in order of their publication, are:

Hardening

There are a couple of "hardening" measures embedded in glibc, like export MALLOC_CHECK_=1 (enables some checks), export MALLOC_PERTURB_=1 (data is overwritten), export MALLOC_MMAP_THRESHOLD_=1 (always use mmap()), ...

More info: mcheck(), mallopt().

There's also some tracing support as mtrace(), malloc_stats(), malloc_info(), memusage, and in other functions in this family.

how2heap's People

Contributors

kyle-kyle avatar m1ghtym0 avatar zardus avatar antoniobianchi333 avatar mdulin2 avatar salls avatar grazfather avatar sajjadium avatar danigargu avatar crowell avatar andigena avatar degrigis avatar cyanboy avatar jkrshnmenon avatar eterna1 avatar nickstephens avatar kevinbackhouse avatar cloudburst avatar xmzyshypnc avatar junmoxiao avatar owlz avatar n30m1nd avatar jacopo avatar insuyun avatar htejeda avatar rhelmot avatar grosquildu avatar sraboy avatar sudhackar avatar acskurucz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.