Warm-Up
The goals of this assignment are to:
- Refresh your TCP and UDP programming skills
- Learn how to use containers to complete course assignments
Vulnerable Service
Canvas contains a container image1 named
netsec_warmup.easy.img.xz
that provides a vulnerable
network service. The service implements the following protocol:
\[ \begin{align*} C \rightarrow S &: \mathsf{u16}(|\mathsf{challenge}|) \cdot \mathsf{challenge} \\ C \rightarrow S &: \mathsf{u16}(|\mathsf{identifier}|) \cdot \mathsf{identifier} \\ S \rightarrow C &: \mathsf{u16}(|\mathsf{value}|) \cdot \mathsf{value} \\ \end{align*} \]
where \(\mathsf{identifier}\) is a
UTF-8 string that is your @northeastern.edu
email address,
\(|x|\) is the length of a byte array
\(x\), \(\mathsf{u16}(x)\) encodes an integer \(x\) as two big-endian bytes, and \(\cdot\) is concatenation.
The only content your program should write to stdout
is
the following JSON object:
{
"id": "{{identifier}}",
"value": "{{base64(value)}}"
}
where base64(x)
is the base64 encoding of
x
. Whitespace formatting doesn’t matter, only that piping
the output of your program validates as JSON of the above form. Feel
free to write whatever you like to stderr
.
Submission Instructions
Package your solution as a gzipped TAR archive. Your solution should expand to the following directory structure.
$ tree -F warmup
warmup
├── Dockerfile
└── src/
The source code to your solution should be contained in
src/
. Your Dockerfile
should, when processed
using docker
, create a container image that runs your
solution given a network interface as an argument. For instance, if the
vulnerable service traffic is visible on interface eth0
,
then your container must successfully print the secret when executed
like so:
$ docker run -it --rm --privileged --network=host ${solution_image} eth0
Submit the solution archive to Canvas.
Extra Credit
- Exploit the harder version of the vulnerable service contained in
netsec_warmup.hard.img.xz
- Reverse engineer the service to extract the authentication key
For help with building and running containers, see this quickstart.↩︎