Program Security


CSE 466 - Fall 2025.

In the realm of cybersecurity, your journey mirrors that of a martial artist mastering the art of defense and attack. The “Program Security” module is where you will train in the ancient techniques of shellcoding and memory corruption. Like a skilled martial artist wielding precise strikes, you will learn to craft shellcode that slips past defenses with the agility of a shadow. You will also study memory corruption vulnerabilities, discovering how to exploit pinpoint weaknesses with the precision of a pressure point strike.



Shellcoding Resources

Lots of external resources are referred to in the module videos. Additionally, the following reading material is useful:


Shellcoding challenges

Write and execute shellcode to read the flag, but your inputted data is filtered before execution.

Write and execute shellcode to read the flag, but the inputted data cannot contain any form of system call bytes (syscall, sysenter, int), can you defeat this?

Write and execute shellcode to read the flag, but the inputted data cannot contain any form of system call bytes (syscall, sysenter, int), this challenge adds an extra layer of difficulty!

Write and execute shellcode to read the flag, but you only get 18 bytes.

Write and execute shellcode to read the flag, but your input has data inserted into it before being executed.

Write and execute shellcode to read the flag, but every byte in your input must be unique.

Write and execute shellcode to read the flag, but this time you only get 12 bytes!

Write and execute shellcode to read the flag, but this time you only get 6 bytes :)


Memory Corruption Resources


Memory Corruption Class Streams

Follow along with a live class with the same demo the instructor used.

This challenge is optional, it will not count towards dojo completion.


Memory Corruption Challenges

Leverage memory corruption to satisfy a simple constraint

Leverage memory corruption to satisfy a simple constraint

Overflow a buffer and smash the stack to obtain the flag, but this time bypass a check designed to prevent you from doing so!

Overflow a buffer and smash the stack to obtain the flag, but this time bypass a check designed to prevent you from doing so!

Overflow a buffer and smash the stack to obtain the flag, but this time bypass another check designed to prevent you from doing so!

Overflow a buffer and smash the stack to obtain the flag, but this time bypass another check designed to prevent you from doing so!

Leverage memory corruption to leak the flag.

Leverage memory corruption to leak the flag.

Leverage an Array to obtain the flag.

Leverage an Array to obtain the flag.

Leverage an Array to obtain the flag.

Leverage an Array to obtain the flag.

Overflow a buffer and smash the stack to obtain the flag, but this time in a PIE binary with a stack canary. Be warned, this requires careful and clever payload construction!

Overflow a buffer and smash the stack to obtain the flag, but this time in a PIE binary with a stack canary. Be warned, this requires careful and clever payload construction!

Overflow a buffer and leak the flag. Be warned, this requires careful and clever payload construction!

Overflow a buffer and leak the flag. Be warned, this requires careful and clever payload construction!

Defeat a stack canary in a PIE binary by utilizing a bug left in the binary.

Defeat a stack canary in a PIE binary by utilizing a bug left in the binary.

Leak data left behind unintentionally by utilizing clever payload construction.

Leak data left behind unintentionally by utilizing clever payload construction.

Leak data left behind unintentionally to defeat a stack canary in a PIE binary.

Leak data left behind unintentionally to defeat a stack canary in a PIE binary.

Defeat a stack canary in a PIE binary by utilizing a network-style fork server in the target binary.

Defeat a stack canary in a PIE binary by utilizing a network-style fork server in the target binary.


Complex Corruption

Exploitation begins at the intersection of two core ideas: corrupting program memory and gaining control-flow. Memory corruption provides the foothold, allowing control over a program’s execution by overwriting critical data such as return addresses or other valuable pointers. Shellcode provides the payload, a carefully crafted sequence of instructions designed to carry out specific actions once execution is redirected. When combined, these concepts illustrate the foundation of software exploitation: not just crashing a program, but deliberately shaping its behavior to execute attacker-controlled code.

Follow along with a live class with the same demo the instructor used.

This challenge is optional, it will not count towards dojo completion.


Complex Corruption Challenges

Write a full exploit involving injecting shellcode and a method of tricking the challenge into executing it by utilizing clever payload construction.

Write a full exploit involving injecting shellcode and a method of tricking the challenge into executing it by utilizing clever payload construction.

Write a full exploit involving injecting shellcode, and a method of tricking the challenge into executing your payload.

Write a full exploit involving injecting shellcode, and a method of tricking the challenge into executing your payload.

Exploit the binary to obtain the flag!

Exploit the binary to obtain the flag!

Exploit the binary to obtain the flag!


30-Day Scoreboard:

This scoreboard reflects solves for challenges in this module after the module launched in this dojo.

Rank Hacker Badges Score