diff --git a/challenges/web/JavaScript/Dockerfile b/challenges/web/JavaScript/Dockerfile new file mode 100644 index 0000000..2a41af2 --- /dev/null +++ b/challenges/web/JavaScript/Dockerfile @@ -0,0 +1 @@ +FROM php:7.4.7-apache diff --git a/challenges/web/JavaScript/README.md b/challenges/web/JavaScript/README.md new file mode 100644 index 0000000..d41a405 --- /dev/null +++ b/challenges/web/JavaScript/README.md @@ -0,0 +1,18 @@ +# JavaScript + +> web + +Author: [Simon Thiboutôt (lilc4t)](https://github.com/masterT) + +http://127.0.0.1:12001/ + +## Setup + +Requirements: +- docker + +Start: + +```shell +docker-compose up +``` diff --git a/challenges/web/JavaScript/docker-compose.yml b/challenges/web/JavaScript/docker-compose.yml new file mode 100644 index 0000000..4a7569d --- /dev/null +++ b/challenges/web/JavaScript/docker-compose.yml @@ -0,0 +1,8 @@ +version: "2" +services: + web: + image: php:7.4.7-apache + ports: + - "12001:80" + volumes: + - "./src/:/var/www/html" diff --git a/challenges/web/JavaScript/login-2-source.html b/challenges/web/JavaScript/login-2-source.html new file mode 100644 index 0000000..71bbc1d --- /dev/null +++ b/challenges/web/JavaScript/login-2-source.html @@ -0,0 +1,111 @@ + + + + + + + Login 2 + + + + +
+

Login 2

+ + + + + +
+ + diff --git a/challenges/web/JavaScript/src/index.html b/challenges/web/JavaScript/src/index.html new file mode 100644 index 0000000..9834e86 --- /dev/null +++ b/challenges/web/JavaScript/src/index.html @@ -0,0 +1,42 @@ + + + + + + + JavaScript + + + +
+
+
+

JavaScript

+

The browser's programming language, it's good for many things, but it's code while always be accessible.

+

Challenges

+ +
+
+
+ + diff --git a/challenges/web/JavaScript/src/login-1.html b/challenges/web/JavaScript/src/login-1.html new file mode 100644 index 0000000..9e84c4d --- /dev/null +++ b/challenges/web/JavaScript/src/login-1.html @@ -0,0 +1,81 @@ + + + + + + + Login 1 + + + + +
+

Login 1

+ + + + + +
+ + diff --git a/challenges/web/JavaScript/src/login-2.html b/challenges/web/JavaScript/src/login-2.html new file mode 100644 index 0000000..7745a01 --- /dev/null +++ b/challenges/web/JavaScript/src/login-2.html @@ -0,0 +1,66 @@ + + + + + + + Login 2 + + + + +
+

Login 2

+ + + + + +
+ + diff --git a/challenges/web/JavaScript/writeup.md b/challenges/web/JavaScript/writeup.md new file mode 100644 index 0000000..71fef98 --- /dev/null +++ b/challenges/web/JavaScript/writeup.md @@ -0,0 +1,55 @@ +# Writeup + +## Login 1 + +- `FLAG-e7ebfbb9dcf5cfb60ae1bb59d40f7695` + +Pour voir le drapeau il suffit d'évaluer la chaîne de caractères `"\x46\x4c\x41\x47\x2d\x65\x37\x65\x62\x66\x62\x62\x39\x64\x63\x66\x35\x63\x66\x62\x36\x30\x61\x65\x31\x62\x62\x35\x39\x64\x34\x30\x66\x37\x36\x39\x35"` dans la console du navigateur. + +## Login 2 + +- `FLAG-1fbeb0a21f8d1286086ca419079c62f8a` + +Avant tout il faut comprendre ce que le code JavaScript fait, pour ce faire on indente correctement le script, puis on renomme les fonctions et variables. + +Par la suite il faut programmer une solution qui fait l'inverse de la fonction d'encryption. + +Voici une solution qui affiche le drapeau dans la console du navigateur, lorsqu'exécutée dans celle-ci. + +```js +var cipher = "NzE6NzQ6Njc6Nzg6NDM6NTY6OTY6MjoxMDU6Nzo1MzoxMDU6NTA6NTY6OTg6NTE6OTg6ODM6NDg6OTc6NTU6NTQ6NTY6NjU6MTA1OjEwNDo1MDo4Mzo2MTo4OTo1Mjo2NToxMDE6NjU6NTQ6MTEzOjYyOjM"; +var key = "2718587a3f"; + +function keyValueAt(key, index) { + var value; + var keyIndex = index % key.length; + var integer = parseInt(key[keyIndex]); + if (integer && !isNaN(integer)) { + value = integer; + } else { + value = key.charCodeAt(keyIndex); + } + return value; +} + +function decrypt(key, cipherBase64) { + var plaintext = ''; + var cipher = atob(cipherBase64).split(':'); + + for (let i = 0; i < cipher.length; i++) { + var code = parseInt(cipher[i]); + if (code % 2 == 0) { + code = code + 1; + } else { + code = code - 3; + } + var char = String.fromCharCode(code ^ keyValueAt(key, i)); + plaintext += char; + } + + return plaintext; +} + +console.log(decrypt(key, cipher)); +``` +