Add act1-curling writeup

master
Maik de Kruif 1 month ago
parent 1a2e6feb52
commit 9b7e73029a
No known key found for this signature in database
GPG Key ID: DB1A8C782DD43CB3
  1. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/cookie.png
  2. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/cover.png
  3. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/gold.png
  4. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/gold2.png
  5. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/gold3.png
  6. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/hard-mode.png
  7. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/header.png
  8. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/headers.png
  9. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/http.png
  10. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/insecure-https.png
  11. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/manpage.png
  12. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/path-as-is.png
  13. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/post.png
  14. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/silver.png
  15. BIN
      assets/img/writeups/holiday-hack-challenge/2024/act1/curling/start.png
  16. 2
      config/_default/hugo.toml
  17. 8
      content/writeups/holiday-hack-challenge/2024/act1/_index.md
  18. 322
      content/writeups/holiday-hack-challenge/2024/act1/curling.md
  19. 1
      content/writeups/holiday-hack-challenge/2024/prologue/elf-connect.md
  20. 1
      content/writeups/holiday-hack-challenge/2024/prologue/elf-minder.md
  21. 1
      content/writeups/holiday-hack-challenge/2024/prologue/orientation.md

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

@ -24,6 +24,8 @@ enableRobotsTXT = true
enableGitInfo = true
enableEmoji = true
ignoreLogs = ["warning-goldmark-raw-html"]
[permalinks]
[permalinks.page]
posts = "/posts/:title/"

@ -0,0 +1,8 @@
+++
author = "Maik de Kruif"
title = "Act 1 - SANS HHC 2024"
breadcrumb = "Act 1"
description = "A collection of my writeups for the 2024 edition of the SANS Holiday Hack Challenge (HHC). HHC is a free series of fun, quality, hands-on cybersecurity challenges."
+++
A collection of my writeups for the 2024 edition of the SANS Holiday Hack Challenge (HHC). HHC is a free series of fun, quality, hands-on cybersecurity challenges.

@ -0,0 +1,322 @@
+++
author = "Maik de Kruif"
title = "Curling"
subtitle = "Act 1 - SANS Holiday Hack Challenge 2024"
date = 2024-11-23T11:44:53+01:00
description = "In the fourth challenge of the Holiday Hack Challenge 2024, we'll explore how to use curl using the Linux manpages."
cover = "img/writeups/holiday-hack-challenge/2024/act1/curling/cover.png"
tags = [
"Holiday Hack Challenge",
"ctf",
"hacking",
"writeup",
]
categories = [
"ctf",
"writeups",
"hacking",
]
+++
## Link
If you want to play the challenge yourself, you can find it here:
<https://2024.holidayhackchallenge.com/>
## Story line
Let's start off by talking to Bow Ninecandle:
```txt
Well hello there! I'm Bow Ninecandle, bright as a twinkling star! Everyone's busy unpacking, but I've grown quite bored of that. Care to join me for a lovely game?
Oh Joy! Today, We're diving into something delightful: the curling challenge—without any ice, but plenty of sparkle!
No icy brooms here though! We're all about Curl, sending web requests from the command line like magic messages.
So, have you ever wielded Curl before? If not, no worries at all, my friend!
It's this clever little tool that lets you whisper directly to web servers. Pretty neat, right?
Think of it like sending secret scrolls through the interwebs, awaiting a wise reply!
To begin, you can type something like curl https://example.com. Voilà! The HTML of the page appears, like conjuring a spell!
Simple enough, huh? But oh, there's a whole world of magic you can cast with Curl!
We're just brushing the surface here, but trust me—it’s a hoot and a half!
If you get tangled up or need help, just give me a shout! I’m here to help you ace this curling spectacle.
So, are you ready to curl those web requests like a pro? Let’s see your magic unfold!
```
## Recon
Upon opening the challenge, we're greeted with a terminal. Looks like we'll have to use the `curl` command to solve the challenge.
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/start.png" title="Welcome screen" >}}
Let's enter "y", press enter, and start the challenge.
## Silver
### Task 1
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/http.png" title="Question 1" >}}
So, for our first task, we'll have to send a simple http request to `http://curlingfun:8080/`. Those of use who have used curl before will have no issues here, but since this writeup isn't just for them, I'll pretend to have never used curl before.
To get more info on how curl works, we can open its manpage. A manpage is the documentation of a command on linux systems. We can open it by running `man curl` in the terminal.
{{< figure class="small" src="/img/writeups/holiday-hack-challenge/2024/act1/curling/manpage.png" title="manpage of curl" >}}
We can scroll through the page using the arrow keys (or vim shortcuts), and search for things by typing `/[SEARCH TERM HERE]`.
For the first task, we don't need any of the special options, and we can just append the url after the curl command.
```sh
curl http://curlingfun:8080/
```
### Task 2
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/insecure-https.png" title="Question 2" >}}
For tasks 2, we'll have to send an https request. Sounds easy enough, and normally that would be the case, but here it also specifies that the destination is using a self-signed certificate.
By default curl will verify the remote certificate, and block the request if the certificate is not issued by a trusted party. Since the certificate here is self-signed, meaning there is no trusted party involved, curl will block the request.
To circumvent this protection mechanism, we'll have to tell curl to allow insecure connections. If we look at the manpage, we can find the following option:
```txt
-k, --insecure
(TLS) By default, every SSL connection curl makes is verified to be secure.
This option allows curl to proceed and operate even for server connections
otherwise considered insecure.
...
```
So we can add the `-k` option, and run the command like this:
```sh
curl -k https://curlingfun:9090/
```
### Task 3
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/post.png" title="Question 3" >}}
On to task three, where we'll have to send a POST request with some data.
We can again look at the manpage. If type in `/POST`, press enter, and then press `n` to go to the next occurrence a few times, we'll find the following entry:
```txt
-d, --data <data>
(HTTP) Sends the specified data in a POST request to the HTTP server, in the
same way that a browser does when a user has filled in an HTML form and
presses the submit button. This will cause curl to pass the data to the server
using the content-type application/x-www-form-urlencoded. Compare to -F,
--form.
...
If any of these options is used more than once on the same command line, the
data pieces specified will be merged together with a separating &-symbol.
Thus, using '-d name=daniel -d skill=lousy' would generate a post chunk that
looks like 'name=daniel&skill=lousy'.
...
```
Using this option, we can send the requested data. The page also shows an example of how to specify the data, so we can use that in our case like so:
```sh
curl -k https://curlingfun:9090/ --data "skip=alabaster"
```
In the screenshot below, I also added the `-X POST` option. The `-X` option as you may gave guessed sets the request method. I did this out of habit, but it is not needed at all. The `--data` option automatically converts it to a POST request for you.
### Task 4
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/cookie.png" title="Question 4" >}}
Next up is sending a cookie along. A quick search in the manpage will yield us the following result:
```txt
-b, --cookie <data|filename>
(HTTP) Pass the data to the HTTP server in the Cookie header. It is supposedly
the data previously received from the server in a "Set-Cookie:" line. The
data should be in the format "NAME1=VALUE1; NAME2=VALUE2".
...
```
The page also conveniently shows us the format in which the data is expected. Let's fill it in and send it.
```sh
curl -k https://curlingfun:9090/ --cookie "end=3"
```
### Task 5
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/headers.png" title="Question 5" >}}
This time, we'll have to get curl to show us the headers it received as well.
You know the drill by now, this is what the manpage shows:
```txt
-i, --include
Include the HTTP response headers in the output. The HTTP response headers can
include things like server name, cookies, date of the document, HTTP version
and more...
...
```
We won't have to send any data, so we can leave all other things out.
```sh
curl -k -i https://curlingfun:9090/
```
### Task 6
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/header.png" title="Question 6" >}}
For the sixth task, we need to send a header along with the request.
Once again, the manpage helps us out:
```txt
-H, --header <header/@file>
(HTTP) Extra header to include in the request when sending HTTP to a server.
You may specify any number of extra headers.
...
Example:
curl -H "X-First-Name: Joe" http://example.com/
...
```
```sh
curl -k https://curlingfun:9090/ -H "Stone: Granite"
```
### Task 7
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/path-as-is.png" title="Question 7" >}}
We have made it to the last task; making a request with `./` in the url. Because actually wanting to send `./` or `../` is very rare and often unintended (only hackers would want to), curl resolves them locally before sending the request.
Luckily, we can also disable this functionality:
```txt
--path-as-is
Tell curl to not handle sequences of /../ or /./ in the given URL path. Nor‐
mally curl will squash or merge them according to standards but with this op‐
tion set you tell it not to do that.
```
We'll just add that option to our final command:
```sh
curl -k --path-as-is https://curlingfun:9090/../../etc/hacks
```
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/silver.png" title="Silver" >}}
And... bam! We got the medal!
### Tl;dr
These are the commands in order:
```sh
curl http://curlingfun:8080/
curl -k https://curlingfun:9090/
curl -k https://curlingfun:9090/ --data "skip=alabaster"
curl -k https://curlingfun:9090/ --cookie "end=3"
curl -k -i https://curlingfun:9090/
curl -k https://curlingfun:9090/ -H "Stone: Granite"
curl -k --path-as-is https://curlingfun:9090/../../etc/hacks
```
## Gold
### Continued story line
Let's first talk to the elf again, he'll tell us what we'll have to do for gold.
```txt
Bravo! Look at you, curling through that like a true web wizard!
You zipped through that challenge faster than a curling stone on enchanted ice!
You know... rumor has it you can breeze through this with just three commands. Why don’t you give it a whirl?
```
### Task 1
At first, I though we could just combine the previous commands in one, and solve it, but, alas, this was not the case...
This is the input I tried:
```sh
curl http://curlingfun:8080/
curl -k -X POST https://curlingfun:9090/ --data "skip=alabaster" --cookie "end=3" -H "Stone: Granite"
curl -k --path-as-is https://curlingfun:9090/../../etc/hacks
```
Curious as to what we needs to be done, we should explore further. Let's start by listing the files in the current directory. This turns out to be a good idea, as we find a file there; `HARD-MODE.txt`.
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/hard-mode.png" title="HARD-MODE.txt" >}}
Turns out we get some more steps to follow. We have already practiced all the things needed here with the silver one, so we can apply the knowledge gained there with this task.
```sh
curl -k https://curlingfun:9090/ --data "skip=bow" --cookie "end=10" -H "Hack: 12ft"
```
### Task 2
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/gold2.png" title="Question 2" >}}
The second one also brings nothing new, the `--path-as-is` option will help us again here:
```sh
curl -k --path-as-is https://curlingfun:9090/../../etc/button
```
### Task 3
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/gold3.png" title="Question 3" >}}
For the third task, we got something new. The message shows us that the url will redirect us.
By default, curl will not follow redirects. As you may have guessed by now though, there is way to enable this functionality, and it's written in the manpage:
```txt
-L, --location
(HTTP) If the server reports that the requested page has moved to a different
location (indicated with a Location: header and a 3XX response code), this op‐
tion will make curl redo the request on the new place.
...
```
We can then add this option to the command as follows:
```sh
curl -k -L https://curlingfun:9090/GoodSportsmanship
```
{{< figure src="/img/writeups/holiday-hack-challenge/2024/act1/curling/gold.png" title="Gold" >}}
And that's it, we got the gold medal!

@ -7,7 +7,6 @@ description = "Let's play our first game of the Holiday Hack Challenge. To win,
cover = "img/writeups/holiday-hack-challenge/2024/prologue/elf-connect/cover.png"
tags = [
"Holiday Hack Challenge",
"Prologue",
"ctf",
"hacking",
"writeup",

@ -7,7 +7,6 @@ description = "On to our second game of the Holiday Hack Challenge. This time we
cover = "img/writeups/holiday-hack-challenge/2024/prologue/elf-minder/cover.png"
tags = [
"Holiday Hack Challenge",
"Prologue",
"ctf",
"hacking",
"writeup",

@ -7,7 +7,6 @@ description = "An easy start of the Holiday Hack Challenge 2024."
cover = "img/writeups/holiday-hack-challenge/2024/prologue/orientation/cover.png"
tags = [
"Holiday Hack Challenge",
"Prologue",
"ctf",
"hacking",
"writeup",

Loading…
Cancel
Save