Learning Goals
Students will learn introductory level concepts about binary exploitation. This project is designed to develop your understanding of control flow hijacking through different tasks/challenges showcasing select vulnerabilities or weaknesses in compiled binaries. By the project’s end, you should…
- …be familiar with simple C syntax and assembly operations.
- …able to identify common memory-based vulnerabilities.
- …capable of crafting basic exploits from scratch
Tools you will use
- Python - While you are welcome to craft your exploits using other tools/frameworks, in this project we teach to using Python and the
pwntoolslibrary for automating/scripting our exploits. - GDB - The GNU Debugger is a useful tool for understanding the underlying behavior of a program during runtime. We have extended its native capabilities with the
pwndbgplugin for additional output and readability. - objdump - The
objdumptool will allow us to disassemble the compiled binaries, affording us an opportunity to perform static analysis of the binary’s instructions at a more granular level than what the C source code alone can. - ropper - A useful tool for identifying so-called “gadgets” to facilitate return-oriented programming (ROP). Additional information concerning what ROP and gadgets are will be covered in the appropriate sections of the project.
Recommended Reading
To deepen your understanding of binary exploitation, consider reviewing:
- The
~/project/tutorial/README.mdand the associated follow-along code. - The project tutorial videos:
- explaining some rudimentary basics of Computer Architecture
- on how the Stack and Function Calls work in C
The final deliverables:
A single JSON-formatted file will be submitted to Gradescope. This file should be named project_binexp.json. A template can be found on the Submission Details page.
Project Environment
This project runs in an OVA-formatted Virtual Machine (VM) with all the binaries/tools required, and must be used to generate the correct flags. We recommend running the VM through Oracle’s . Login credentials for the VM to access the project’s materials can be found through Canvas.