Having a good environment is a must when you want to do binary exploitaton. Here I will show you how to set up a simple environment using Ubuntu and WSL2 so you can straight up jump into finding and writing your exploits.
Agenda#
Things we will be setting up:
- Ubuntu inside our Windows WSL2
- Pwntools library for writing exploits
- PwnDbg for debugging and finding vulnerability on programms
Setting up Ubuntu on WSL2#
Change WSL version to 2
wsl --set-default-version 2

Searching for our distribution in the online marketplace
wsl --list --online

Installing our distribution with a suitable version. Here I will be instaling Ubuntu 24.04 which comes under their LTS
wsl --install -d Ubuntu-24.04

After the installation, it will prompt you to set up a user with a password. After which it will drop you to your user shell
and you should be able to see something like this.
Configuring 32-bit environment#
Since the distribution we installed is of 64-bit, we must set it up to run 32-bit programs as well. Its very common in CTFs that we receive 32-bit binaries.
Installing all the necessary packages and libraries.
sudo dpkg --add-architecture i386
sudo apt-get update

sudo apt install build-essential

sudo apt install gcc-multilib

Setting up PwnTools library#
Pwntools is a CTF framework and exploit development library. Written in Python, it is designed for rapid prototyping and development, and intended to make exploit writing as simple as possible.
sudo apt-get update
sudo apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwntools

Working around the PIP upgrade error#

There are many solutions to it. The best and the recommended one is to set up a virtual environment.
The second would be to use the --break-system-packages
tag with our pip command and
the third is to set up a config so that we dont have to pass the tag everytime we use pip.
Lets set up a config for our pip
mkdir .config
mkdir .config/pip
touch .config/pip/pip.conf
edit pip.conf
[global]
break-system-packages = true
Now we should be able to continue our installing without any errors.
We can confirm our installation by loading the library into Python
Setting up PwnDbg#
PwnDbg is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.
First lets start by installing gdb
sudo apt install gdb

Installing and setting up PwnDbg
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh


Resources#
- PwnTools - http://pwntools.com/
- PwnDbg - https://pwndbg.re/
- How to install Linux on Windows with WSL
- Windows Subsystem for Linux
FAQ#
What to do after this?#
Well, I would suggest installing a code exitor such as VSCode on your host machine for you to write exploits or you can be a chad and install neovim on your linux.
After that you can set up a disassembler and decompiler of your choice. There are many to choose from but these are some of my picks:
Now that you are all set, the only thing left is to start hacking and writing exploits