There are a total of 38 levels ranging from very easy with nearly 20k solves to some super hard complex challenges that have less than five solves in comparison.
Next to a little name they also have a type that hints at how the riddle can be solved, be it something JavaScript relates, some logic and programming or maybe reversing some PHP code to gain access.
All in all some very fun things to tinker with and every now and then I stumble about this website and thought it might be a good idea to write down my though process and see how far I can make it.
So let's take a peek!
Oh and just as a side note - most of these puzzles generate a random solution so just copy and pasting the solutions from here won't always be an option :)
No sourcecode? But it's still a JavaScript challenge so we can dig into the website code again to see where things lead.
The joke behind this level is that there are a few hundred empty lines in the source code - buuut the FireFox or in my case LibreWolf Debugconsole doesn't show those
This is just as easy as the previous ones and the name of the level already gives pretty much everything away.
We just need to take a look at how long the value of `pwinfo` is.
We can do that with the console again.
JavaScript is a silly language so it allows us to run something like `"2ab135a4dd3ffa04fd5b53ee5ed1cbf 3122c05 ecc31321321b 353a51a12e".length` in the console.
Which reveals the length of 66.
Just entering "_66_" as the password solves the level - I don't know what's worse, having the password in cleartext or using the length as a value which would probably be cracked even faster ;)
ASCII is indeed fun and the author of the side also seems to be a fan of using something like `figlet` - [for example this website](https://www.askapache.com/online-tools/figlet-ascii/) - to generate silly ASCII images from text.
An even quicker way than to look at the `rgb2hex` function would be to look at the value of the `thought` element in the second line of code which reveals the value directly.
Starting the level greets us with the message "Jerry f\*cked up, he forgot the password for this level but he mumbled something about a robots.txt file and something about a hint.."
Oh well that can't be too hard then! Let's just look at the `robots.txt` file which is usually stored in the webroot of a website and is used for webcrawlers (for example how google indexes the web) to tell them where too look for specific information and how to scan the site or which areas are not to be scanned.
So taking a look at the url [https://0xf.at/robots.txt](https://0xf.at/robots.txt) shows that there is a section `Disallow` with a hint on the solution:
```txt
User-agent: *
Allow: /
Disallow: /play/solutionforlevel7 #don't allow google to find the solution for level 7
```
Disallow in this case makes sure google and co don't index that very page so we can't just google for the solution ;)
Looking at the page https[]()://0xf.at/play/solutionforlevel7 (not hyperlinked so I don't _fully_ ruin the fun) shows us that Jerry seems to be a little bit full of themselves.
{{<figuresrc="images/lvl7_1.png"alt="I don't know how you found it but you've found it!">}}
{{<figuresrc="images/lvl8_1.png"alt="Typo in password!">}}
Now the easiest solution would be to just send the password as is and look a the GET request query - since the password is passed as a regular parameter.
The password filed is an input field and has the id `pw` with the type `password`.
We can just change the type to `text` and the text appears in our browser and we can edit the wrong password! So turning "z6sjdxnix9kfcu6qdnq809jtdp9k1edt" into "_z6sjdxnix9kfcu6qdnq8o9jtdp9k1edt_" gives us the same solution as the previous idea.
But looking closely nothing really is happening with the initial value for `CodeCode`.
Just some concatenation that has no effect and some very strange comparisons that also have nothing to do with the initial value.
So it's all about reading the code a little.
Very simple to see the solution here can only be "*moo0bc*"
## Final words for the first levels
All in all some easy but still fun challenges that makes you think a little more how things work in a browser, be it how JavaScript works or what the `robot.txt` file is and where to find it on a website!
To keep things a little more organized I've cut the Levels down into ten Level segments so it's not just one giant blog post but is a little more easy to navigate.
You can find the writeup for the next ten levels [here]({{< ref "/posts" >}}) once they are up!