From e2a2d2c4085e0658fff37bf8889e74400f47da3a Mon Sep 17 00:00:00 2001
From: Lars Palinckx
Date: Fri, 3 Dec 2021 00:33:26 +0100
Subject: [PATCH] added writeups
---
README.md | 5 +
allstar/README.md | 6 +
allstar/SOLUTION.md | 6 +
allstar/lyrics.txt | 51 +
battleship/README.md | 8 +
battleship/SOLUTION.md | 9 +
battleship/board.png | Bin 0 -> 1754 bytes
battleship/index.js | 18 +
blog/README.md | 5 +
blog/SOLUTION.md | 6 +
blog/src.zip | Bin 0 -> 3888 bytes
blog/src/IGCTF{Find-m/index.html | 14 +
blog/src/awesome-reci/index.html | 13 +
blog/src/club-penguin/index.html | 13 +
blog/src/discord-amon/index.html | 15 +
blog/src/index.html | 19 +
blog/src/my-best-frie/index.html | 18 +
buffer_buffet/part1/README.md | 12 +
buffer_buffet/part1/SOLUTION.md | 8 +
buffer_buffet/part1/index.rkt | 41 +
buffer_buffet/part2/README.md | 8 +
buffer_buffet/part2/SOLUTION.md | 14 +
buffer_buffet/part2/index.rkt | 77 +
buffer_buffet/part2/redacted_index.rkt | 76 +
crackme/README.md | 8 +
crackme/SOLUTION.md | 11 +
crackme/crackme | Bin 0 -> 16480 bytes
crackme/crackme.c | 38 +
crackme/solution.c | 11 +
cynal_go/README.md | 8 +
cynal_go/SOLUTION.md | 12 +
cynal_go/cynal_go | Bin 0 -> 1157998 bytes
cynal_go/cynal_go.go | 10 +
find_the_flag/README.md | 3 +
find_the_flag/SOLUTION.md | 10 +
moderated/.gitignore | 130 +
moderated/README.md | 16 +
moderated/SOLUTION.md | 38 +
moderated/app.js | 149 ++
moderated/db.js | 99 +
moderated/moderator.js | 50 +
moderated/package-lock.json | 2212 +++++++++++++++++
moderated/package.json | 18 +
moderated/public/app.css | 4 +
moderated/views/create_post.hbs | 9 +
moderated/views/index.hbs | 1 +
moderated/views/login.hbs | 16 +
moderated/views/partials/footer.hbs | 2 +
moderated/views/partials/header.hbs | 9 +
moderated/views/post.hbs | 3 +
moderated/views/posts.hbs | 12 +
moderated/views/register.hbs | 15 +
moderated/yarn.lock | 837 +++++++
nowyouseeme_nowyoudont/README.md | 6 +
nowyouseeme_nowyoudont/SOLUTION.md | 7 +
prime_magic/README.md | 7 +
prime_magic/SOLUTION.md | 27 +
prime_magic/all_the_numbers.txt | 14 +
prime_magic/assignment.txt | 3 +
redlight_greenlight/README.md | 5 +
redlight_greenlight/RedLightGreenLight.mp4 | Bin 0 -> 3437725 bytes
redlight_greenlight/SOLUTION.md | 7 +
restrictive-racket/README.md | 7 +
restrictive-racket/SOLUTION.md | 67 +
restrictive-racket/assets/favicon.ico | Bin 0 -> 15406 bytes
restrictive-racket/assets/rkt.png | Bin 0 -> 31466 bytes
restrictive-racket/assets/sicp.jpg | Bin 0 -> 454285 bytes
restrictive-racket/assets/style.css | 59 +
restrictive-racket/challenge.rkt | 40 +
restrictive-racket/challenges.rkt | 45 +
restrictive-racket/either.rkt | 75 +
restrictive-racket/intro.txt | 6 +
restrictive-racket/server.rkt | 131 +
restrictive-racket/validate.rkt | 42 +
rise_of_the_debugging_ducks/IREQUIREBUGS | Bin 0 -> 154811 bytes
rise_of_the_debugging_ducks/README.md | 6 +
rise_of_the_debugging_ducks/SOLUTION.md | 9 +
rng_farm/.idea/.gitignore | 5 +
rng_farm/.idea/modules.xml | 8 +
rng_farm/.idea/rng_farm.iml | 12 +
rng_farm/.idea/vcs.xml | 6 +
rng_farm/README.md | 7 +
rng_farm/SOLUTION.md | 6 +
rng_farm/backend/Dockerfile | 11 +
rng_farm/backend/index.js | 54 +
rng_farm/backend/node_modules/.yarn-integrity | 16 +
rng_farm/backend/node_modules/ws/LICENSE | 19 +
rng_farm/backend/node_modules/ws/README.md | 493 ++++
rng_farm/backend/node_modules/ws/browser.js | 8 +
rng_farm/backend/node_modules/ws/index.js | 13 +
.../node_modules/ws/lib/buffer-util.js | 126 +
.../backend/node_modules/ws/lib/constants.js | 12 +
.../node_modules/ws/lib/event-target.js | 266 ++
.../backend/node_modules/ws/lib/extension.js | 203 ++
.../backend/node_modules/ws/lib/limiter.js | 55 +
.../node_modules/ws/lib/permessage-deflate.js | 511 ++++
.../backend/node_modules/ws/lib/receiver.js | 612 +++++
.../backend/node_modules/ws/lib/sender.js | 422 ++++
.../backend/node_modules/ws/lib/stream.js | 180 ++
.../node_modules/ws/lib/subprotocol.js | 62 +
.../backend/node_modules/ws/lib/validation.js | 124 +
.../node_modules/ws/lib/websocket-server.js | 485 ++++
.../backend/node_modules/ws/lib/websocket.js | 1149 +++++++++
rng_farm/backend/node_modules/ws/package.json | 61 +
rng_farm/backend/node_modules/ws/wrapper.mjs | 8 +
rng_farm/backend/package.json | 14 +
rng_farm/backend/yarn.lock | 8 +
rng_farm/docker-compose.yml | 12 +
rng_farm/frontend/Dockerfile | 3 +
rng_farm/frontend/index.css | 12 +
rng_farm/frontend/index.html | 18 +
rng_farm/frontend/index.js | 49 +
rng_farm/frontend/public/0.png | Bin 0 -> 149391 bytes
rng_farm/frontend/public/1.png | Bin 0 -> 53884 bytes
rng_farm/frontend/public/2.png | Bin 0 -> 20384 bytes
rng_farm/frontend/public/3.png | Bin 0 -> 270248 bytes
squidgame/README.md | 11 +
squidgame/SOLUTION.md | 30 +
squidgame/httpd-flag/Dockerfile | 3 +
.../httpd-flag/public_html/documentation.txt | 1 +
squidgame/httpd-flag/public_html/flag.txt | 1 +
squidgame/httpd-flag/public_html/index.html | 5 +
squidgame/httpd/Dockerfile | 4 +
squidgame/httpd/public_html/documentation.txt | 1 +
squidgame/httpd/public_html/flag.txt | 1 +
squidgame/httpd/public_html/index.html | 5 +
sussy_imposter/README.md | 7 +
sussy_imposter/SOLUTION.md | 8 +
sussy_imposter/package.json | 11 +
sussy_imposter/sus.txt | 25 +
sussy_imposter/sus_maker.js | 136 +
131 files changed, 10035 insertions(+)
create mode 100644 README.md
create mode 100644 allstar/README.md
create mode 100644 allstar/SOLUTION.md
create mode 100644 allstar/lyrics.txt
create mode 100644 battleship/README.md
create mode 100644 battleship/SOLUTION.md
create mode 100644 battleship/board.png
create mode 100644 battleship/index.js
create mode 100644 blog/README.md
create mode 100644 blog/SOLUTION.md
create mode 100644 blog/src.zip
create mode 100644 blog/src/IGCTF{Find-m/index.html
create mode 100644 blog/src/awesome-reci/index.html
create mode 100644 blog/src/club-penguin/index.html
create mode 100644 blog/src/discord-amon/index.html
create mode 100644 blog/src/index.html
create mode 100644 blog/src/my-best-frie/index.html
create mode 100644 buffer_buffet/part1/README.md
create mode 100644 buffer_buffet/part1/SOLUTION.md
create mode 100644 buffer_buffet/part1/index.rkt
create mode 100644 buffer_buffet/part2/README.md
create mode 100644 buffer_buffet/part2/SOLUTION.md
create mode 100644 buffer_buffet/part2/index.rkt
create mode 100644 buffer_buffet/part2/redacted_index.rkt
create mode 100644 crackme/README.md
create mode 100644 crackme/SOLUTION.md
create mode 100755 crackme/crackme
create mode 100644 crackme/crackme.c
create mode 100644 crackme/solution.c
create mode 100644 cynal_go/README.md
create mode 100644 cynal_go/SOLUTION.md
create mode 100755 cynal_go/cynal_go
create mode 100644 cynal_go/cynal_go.go
create mode 100644 find_the_flag/README.md
create mode 100644 find_the_flag/SOLUTION.md
create mode 100644 moderated/.gitignore
create mode 100644 moderated/README.md
create mode 100644 moderated/SOLUTION.md
create mode 100644 moderated/app.js
create mode 100644 moderated/db.js
create mode 100644 moderated/moderator.js
create mode 100644 moderated/package-lock.json
create mode 100644 moderated/package.json
create mode 100644 moderated/public/app.css
create mode 100644 moderated/views/create_post.hbs
create mode 100644 moderated/views/index.hbs
create mode 100644 moderated/views/login.hbs
create mode 100644 moderated/views/partials/footer.hbs
create mode 100644 moderated/views/partials/header.hbs
create mode 100644 moderated/views/post.hbs
create mode 100644 moderated/views/posts.hbs
create mode 100644 moderated/views/register.hbs
create mode 100644 moderated/yarn.lock
create mode 100644 nowyouseeme_nowyoudont/README.md
create mode 100644 nowyouseeme_nowyoudont/SOLUTION.md
create mode 100644 prime_magic/README.md
create mode 100644 prime_magic/SOLUTION.md
create mode 100644 prime_magic/all_the_numbers.txt
create mode 100644 prime_magic/assignment.txt
create mode 100644 redlight_greenlight/README.md
create mode 100644 redlight_greenlight/RedLightGreenLight.mp4
create mode 100644 redlight_greenlight/SOLUTION.md
create mode 100644 restrictive-racket/README.md
create mode 100644 restrictive-racket/SOLUTION.md
create mode 100644 restrictive-racket/assets/favicon.ico
create mode 100644 restrictive-racket/assets/rkt.png
create mode 100644 restrictive-racket/assets/sicp.jpg
create mode 100644 restrictive-racket/assets/style.css
create mode 100644 restrictive-racket/challenge.rkt
create mode 100644 restrictive-racket/challenges.rkt
create mode 100644 restrictive-racket/either.rkt
create mode 100644 restrictive-racket/intro.txt
create mode 100644 restrictive-racket/server.rkt
create mode 100644 restrictive-racket/validate.rkt
create mode 100644 rise_of_the_debugging_ducks/IREQUIREBUGS
create mode 100644 rise_of_the_debugging_ducks/README.md
create mode 100644 rise_of_the_debugging_ducks/SOLUTION.md
create mode 100644 rng_farm/.idea/.gitignore
create mode 100644 rng_farm/.idea/modules.xml
create mode 100644 rng_farm/.idea/rng_farm.iml
create mode 100644 rng_farm/.idea/vcs.xml
create mode 100644 rng_farm/README.md
create mode 100644 rng_farm/SOLUTION.md
create mode 100644 rng_farm/backend/Dockerfile
create mode 100644 rng_farm/backend/index.js
create mode 100644 rng_farm/backend/node_modules/.yarn-integrity
create mode 100644 rng_farm/backend/node_modules/ws/LICENSE
create mode 100644 rng_farm/backend/node_modules/ws/README.md
create mode 100644 rng_farm/backend/node_modules/ws/browser.js
create mode 100644 rng_farm/backend/node_modules/ws/index.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/buffer-util.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/constants.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/event-target.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/extension.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/limiter.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/permessage-deflate.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/receiver.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/sender.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/stream.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/subprotocol.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/validation.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/websocket-server.js
create mode 100644 rng_farm/backend/node_modules/ws/lib/websocket.js
create mode 100644 rng_farm/backend/node_modules/ws/package.json
create mode 100644 rng_farm/backend/node_modules/ws/wrapper.mjs
create mode 100644 rng_farm/backend/package.json
create mode 100644 rng_farm/backend/yarn.lock
create mode 100644 rng_farm/docker-compose.yml
create mode 100644 rng_farm/frontend/Dockerfile
create mode 100644 rng_farm/frontend/index.css
create mode 100644 rng_farm/frontend/index.html
create mode 100644 rng_farm/frontend/index.js
create mode 100644 rng_farm/frontend/public/0.png
create mode 100644 rng_farm/frontend/public/1.png
create mode 100644 rng_farm/frontend/public/2.png
create mode 100644 rng_farm/frontend/public/3.png
create mode 100644 squidgame/README.md
create mode 100644 squidgame/SOLUTION.md
create mode 100644 squidgame/httpd-flag/Dockerfile
create mode 100644 squidgame/httpd-flag/public_html/documentation.txt
create mode 100644 squidgame/httpd-flag/public_html/flag.txt
create mode 100644 squidgame/httpd-flag/public_html/index.html
create mode 100644 squidgame/httpd/Dockerfile
create mode 100644 squidgame/httpd/public_html/documentation.txt
create mode 100644 squidgame/httpd/public_html/flag.txt
create mode 100644 squidgame/httpd/public_html/index.html
create mode 100644 sussy_imposter/README.md
create mode 100644 sussy_imposter/SOLUTION.md
create mode 100644 sussy_imposter/package.json
create mode 100644 sussy_imposter/sus.txt
create mode 100644 sussy_imposter/sus_maker.js
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..00214cd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+IG CTF 2021-2022 Write ups
+==========================
+
+This repository contains all the write-ups for the challenges of the Capture the Flag event of 2021-2022. Make sure to read the README.md and SOLUTION.md files.
+
diff --git a/allstar/README.md b/allstar/README.md
new file mode 100644
index 0000000..21cc5cb
--- /dev/null
+++ b/allstar/README.md
@@ -0,0 +1,6 @@
+# Allstar
+## Text
+Een beetje muziek kan nooit kwaad.
+https://www.youtube.com/watch?v=L_jWHffIx5E
+## Files
+lyrics.txt
diff --git a/allstar/SOLUTION.md b/allstar/SOLUTION.md
new file mode 100644
index 0000000..0971c47
--- /dev/null
+++ b/allstar/SOLUTION.md
@@ -0,0 +1,6 @@
+## Difficulty
+Easy.
+## How To Solve
+Uppercase characters form the flag.
+## Flag
+IGCTF{INPLAINSIGHTNOTATROLL}
diff --git a/allstar/lyrics.txt b/allstar/lyrics.txt
new file mode 100644
index 0000000..8b26425
--- /dev/null
+++ b/allstar/lyrics.txt
@@ -0,0 +1,51 @@
+somebody once told me the world is gonna roll me
+I ain't the sharpest tool in the shed
+she was lookinG kind of dumb with her finger and her thumb
+in the shape of an "l" on her forehead
+well the years start Coming and They don't stop coming
+Fed to the rules and i hit the ground running{
+dIdN't make sense not to live for fun
+your brain gets smart but your head gets dumb
+so much to do, so much to see
+so what's wrong with taking the back streets?
+you'll never know if you don't go
+you'll never shine if you don't glow
+hey now, you're an all-star, get your game on, go Play
+hey now, you're a rock star, get the show on, get paid
+and aLl thAt glItters is gold
+oNly ShootInG stars break the mold
+it's a cool place and tHey say iT gets colder
+you're bundled up now, wait 'til you get older
+but the meteor meN beg to differ
+judging by the hole in the satellite picture
+the ice we skate is getting pretty thin
+the water's getting warm sO you might as well swim
+my world's on fire, how about yours?
+that's the way i like it and i'll never get bored
+hey now, you're an all-star, geT your game on, go play
+hey now, you're A rock star, get the show on, get paid
+all that glitters is gold
+only shooting stars break the mold
+hey now, you're an all-sTar, get your game on, go play
+hey now, you're a rock star, get the show, on get paid
+and all that glitters is gold
+only shooting staRs
+somebody once asked could i spare some change for gas?
+i need to get myself away from this place
+i said, "yup" what a cOncept
+i could use a little fuel myself
+and we could all use a littLe change
+well, the years start coming and they don't stop coming
+fed to the rules and i hit the ground running
+didn't make sense not to live for fun
+your brain gets smart but your head gets dumb
+so much to do, so much to see
+so what's wrong with taking the back streets?
+you'll never know if you don't go (go!)
+you'll never shine if you don't gLow
+hey now, you're an all-star, get your game on, go play
+hey now, you're a rock star, get the show on, get paid
+and all that glitters is} gold
+only shooting stars break the mold
+and all that glitters is gold
+only shooting stars break the mold
diff --git a/battleship/README.md b/battleship/README.md
new file mode 100644
index 0000000..46e9f40
--- /dev/null
+++ b/battleship/README.md
@@ -0,0 +1,8 @@
+# Battleship
+
+## Text
+Commander, the enemy is planning a naval attack soon, but we do not have enough information to know exactly what they are planning. We managed to intercept a message they were sending amongst themselves, but unfortunately it is encrypted. All we know about the encryption technique is that it has something to do with the provided image. Can you encrypt the message? The message is: EYTAQCTQRA{EYTCTARYEYRCTAEARYWQRCWQEYTQQHTQQHEQWAQHEYTY}
+
+## Files
+board.png
+
diff --git a/battleship/SOLUTION.md b/battleship/SOLUTION.md
new file mode 100644
index 0000000..c46ef2f
--- /dev/null
+++ b/battleship/SOLUTION.md
@@ -0,0 +1,9 @@
+## Difficulty
+Easy. 20 points
+
+## How To Solve
+Pair up every letter, and use the letters as coordinates on the field, with the first letter representing the column, and the second the row. The intersection is the actual letter.
+
+index.js and solution.py provide a solution.
+## Flag
+IGCTF{IMGOINGDOWNWITHTHESHIP}
diff --git a/battleship/board.png b/battleship/board.png
new file mode 100644
index 0000000000000000000000000000000000000000..c58c9704a4707d3a7e860996d5c4c0c254fa10ef
GIT binary patch
literal 1754
zcmV<01||84P)002!01^@s6?iZQ&000J|Nkl5O;~VsJ!>fTM^?Y>F6GM@j5(vNVP`jI&gvvteN$1R$1}b00-&X76$r@nDE6|U
zKStXWKtj9|7hS~*Cis@F?P!yf6i;q=`Wnn0N2lHgz^`f4x
zWz^f|(KQvxAtg=yn6rjDFqzM5?~`sfC;jCs^eIynEGu3PWHI<>Dp63IlR2{ghX>=SLRdtHigMEz|3lR
zDUAZ7{L<%EM15XaF2?1IF=vedZPtpq7no9EP^Af8bjLO)>JVn@Y&6TZr-$J#B_G^|
zp6XP9DtZ46H>N)!Cs`yMG>gj0?40G@hSTvQ%rE?p@U)!tfR?5J^g$;6S(~nR)ivnz
zpX=__8E;WU6zwTg$z`FTi>skm9rfWiXX+br5~}3lW$drz(etxghllyXReYgqe;31a
zA(fM!!Qz4ux(ZILPWUHqWxJH>#s_szsNp;RHMG9+m3Q+E1=x1*0&HXnu#qLeMwS2@
zSpsZi39v|(l~*F7V%{KPSAG3hIg=v(KQf
zu*%aft|1jW(ginZmaM*Ooil26o-lpLH`06Z;lp7J8|zim$#j-*bR9L22*Pb<$m(gT
z8kHWfr|>FRAKIl~Lr@viWN*)f4v8^*pfDNx9=CI*IP$Nds;^-@Z&?i#NDiix{2Em!
zS1n!77DNo*Ni88EM=lPd?Rp>~A3pFr79;=8gK^tv@iD%S`b%P&T+&y3Se*qyh?Wdq
zPLf32%&smYog?hv!L4FqndPzE`hml!zE7-%#`t#KKJ#tdBpLy>9lQV=SpsZi39ykR
zz($q;8(9KOljV|*u0br$9axQOadOEZuXr~i!2Niz8HkyLrS+=1azkCc)HCnTzO-kx
zr#%Il^NTVbfSZIRgE1FMMOYBaF6GN58GN=3hqL!8#6AB0;i_NZBoKXmAyH$rpJcV7
zyab*`Cpl+bus@vu8!7Z_$-kQM0Ul3>gIpKydT663T&5MjLw@=_Wn21!;RJnM;9MMr
z*Q6ttlNXA*p!nBvP%QfD!}cm^5Si1pLbS8j%vq}BVzVUW6ZTVR`ONCY`DPkEP*0;3
z6#M0c=yemkOF9b5D*Yz>LXr#hoS`@V%E^BP07*qoM6N<$f?)DmNB{r;
literal 0
HcmV?d00001
diff --git a/battleship/index.js b/battleship/index.js
new file mode 100644
index 0000000..a36cb9a
--- /dev/null
+++ b/battleship/index.js
@@ -0,0 +1,18 @@
+function makeBattleship(message, board) {
+ return message.split('').map(ch => {
+
+ if(board.flat().indexOf(ch) < 0) {
+ return ch;
+ } else {
+
+ const x = board.filter(row => row.indexOf(ch) >= 0).flat().indexOf(ch)
+ const y = board.findIndex(row => row.indexOf(ch) >= 0)
+
+ return [board[0][x], board[y][0]].join('')
+ }
+ }).join('')
+}
+
+console.log(makeBattleship(
+ 'IGCTF{IMGOINGDOWNWITHTHESHIP}',
+ [['Q', 'W', 'E', 'R', 'T'], ['Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G'], ['H', 'K', 'L', 'Z', 'X'], ['C', 'V', 'B', 'N', 'M']]))
diff --git a/blog/README.md b/blog/README.md
new file mode 100644
index 0000000..b6f21f8
--- /dev/null
+++ b/blog/README.md
@@ -0,0 +1,5 @@
+# My perfect blog
+## Text
+Ik heb een mooie blog geschreven. Op een van de pagina's zit de vlag verstopt. Kan jij hem vinden?
+## Files
+/
diff --git a/blog/SOLUTION.md b/blog/SOLUTION.md
new file mode 100644
index 0000000..e827cde
--- /dev/null
+++ b/blog/SOLUTION.md
@@ -0,0 +1,6 @@
+## Difficulty
+Medium, not very technical
+## How to solve
+One of the pages will tell you that the flag starts with `IGCTF{Find my`, you can use this to deduce that the page URL will be `/IGCTF{Find-my/`.
+## Flag
+IGCTF{Find my flag! 4ae82557-42bc-42db-bf57-1ee53a90737d}
diff --git a/blog/src.zip b/blog/src.zip
new file mode 100644
index 0000000000000000000000000000000000000000..eecc064e3983d43d3ecc6fb0465876ad4a475636
GIT binary patch
literal 3888
zcmcIndpOhkAD`QqHX^x{+zFL2^eelN#7ovHp@<;&0HkB9{-mf+y*nit5ciXbo4s1xdyu06`8m3-$Kt+)L2DDG&w
z!q{j)u!2>G6dmp(XS)-fx3BDNfK-Lhwfca{rWYgpWzf2TZQ14XJ6)?Rj~Lv%qvK?R
zfhfo@)5tUEh=Bgbm%G~d<`w%QMcIZLY|II@v6IHRy+5N~1*oc>OZ4yvj`4!gI_~;W
zU75d_jVbc3j0;@(pD|
ze5P#ot1+9zYC8)3{JTQ3oGba1slytx;KjPr17m*(*P99Su{oG%0hB#h_ybCYB+mx|
z0pa}=_?4tv_c`!(d#qe+qHMVFhY`M0M_2A)n^uBby{N_Mredey;t3HkEsaPNwSac}
zZz&CV_YL+@&(tlF6ePUoC#6f1YM7+q3DQKTZeXZ;ekDs<^1z6Hvpc^h+vnEd+JI`|#^vh*ctv1C0|{7I2o{6?
zP60xf3BUuldI9#OnjAyMdAF-`SGc>h_BoXEw6z&%R>h!GK`x7?KRh_|a?V~o!&opzh9Mo`?^N0n@6gTW
zvoyZqL><#Cd&}S2G<7^b-^{UftKV!*xkXVc`i9o_^8=YDA@ZzW8Wuj*Nl4DdGm~7I
zfarZ)CQLw>H!KKC#D(FB-zgK0TaaJsga>Z*GLf8^#9p{a?aVfHv%p$L8F=!i-51cY
z(xigFsM)uxWli0a-i0p}%^aSMTOhZOiHZyQIbPDcIGFAd@qW6mujKmVr0(7~bFO_S
zKz$6KoPvZnil|9g^>r(-iWuf^o;g6RtnZ(fAed
zwzgra8#9EUryzWMhkqYCQ%bBEN;xy0LA~ZUeXQ_|;nLv2pw0`6S%SII?V3nb8Phk|
zJqq)9*7nK1mfMKfx{O*&FX))25{*767;dBn9Ypm|QYtHDg|@!=y`;m_4GQNMrCRip
zo;phnIB*;Sk%u+*`@gk;hav}DqzyI}VcTS)St@G|vUYQR*`XYIy|CrJzbtK5&BUpE
zL)A+YpS0Z3>Vqo6rgtr*bR<*#Mr0bT4nXK6|47}G>Kg4z6foVF{iLjnd4-8sDro?!nS^^S639&vK)tW0i4Q&$
z6ByzH^CAR(Z@{RWlFV>eIwye>t)VF4_Ab*>y5)i^Qb@HF-?|2?=4k`1+9NPoH_-
z&suOQU21%A56oGkhELwAo*x!b&oau_nz){SM3HEbQ8{8)Zw?Acb$VYAzt(P7F*eaw
z=qSDu_xhawZ%wBNqO?@8<^qnW7t1bV|8GzV+F4mq8?3mo;*hq()o7GbUZB69YAq%?
zgZkP&(JCc+p5br&@Ma%(7Az
z4Ehc={kgyoNZisid21Ut>OkbbE-~Ra%o`he4CWhx$9`ug2wNsG58Ub{CZsnK@4-b9
zCQT@9c{Vl5nb`t81i$sNyNnZBTc}-vHxrU)p5-wWg3egjrnGzI4BuLMST3(mS~x@^
z#nkf!k0&RM>VS6BJ3Xx3RF7)f8Nx!ek?x%@hS;3Dt?n0L;rAcih}|A(qxkrNEUkBd
zosF<>EJ}kJYdw*9hGC-grR(q|d#67{#eCRcF&=+M1pAKTxX(e|aNYg=dqQHRixhi>
zn;)@Ns*_*ZGH}*ygO^$ge_=utkmW99-uq8(g9f67vghNM6!>o!3RoOqEm#8k>OAQu#4oONxorYm>6cX%
zx9cc#ngw*`#Xm$hJ7!{r9t_8V;&@70$Z4q(81SygcmZqxc7_#eT;glqMIgLv%6
zzgGS~{}%A_SU!I6Hsg-+$WoxIb;a%>mRz8GVTBX
literal 0
HcmV?d00001
diff --git a/blog/src/IGCTF{Find-m/index.html b/blog/src/IGCTF{Find-m/index.html
new file mode 100644
index 0000000..fc62866
--- /dev/null
+++ b/blog/src/IGCTF{Find-m/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ IGCTF{Find my flag! 4ae82557-42bc-42db-bf57-1ee53a90737d}
+
+
+ IGCTF{Find my flag! 4ae82557-42bc-42db-bf57-1ee53a90737d}
+
+ You found it! Yay! :3
+
+
+
diff --git a/blog/src/awesome-reci/index.html b/blog/src/awesome-reci/index.html
new file mode 100644
index 0000000..2bbd0bc
--- /dev/null
+++ b/blog/src/awesome-reci/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+ Best asbesthos recipies 🙏
+
+
+ Awesome recipies for asbesthos!
+ Does anybody know a good recipie for boiled asbesthos?
+
+
+
diff --git a/blog/src/club-penguin/index.html b/blog/src/club-penguin/index.html
new file mode 100644
index 0000000..74b2602
--- /dev/null
+++ b/blog/src/club-penguin/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+ Club penguin free robux!
+
+
+ Club penguin free robux!
+ Club penguin free robux dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+
+
diff --git a/blog/src/discord-amon/index.html b/blog/src/discord-amon/index.html
new file mode 100644
index 0000000..30dfa37
--- /dev/null
+++ b/blog/src/discord-amon/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+ Discord among us jews!
+
+
+ Discord among US jews!
+
+ Interesting article
+
+
+
+
diff --git a/blog/src/index.html b/blog/src/index.html
new file mode 100644
index 0000000..fcf57d8
--- /dev/null
+++ b/blog/src/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+ My blog
+
+
+ My awesome blog!
+ Welcome to my awesome blog!
+ Pages:
+
+
+
diff --git a/blog/src/my-best-frie/index.html b/blog/src/my-best-frie/index.html
new file mode 100644
index 0000000..dee9474
--- /dev/null
+++ b/blog/src/my-best-frie/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+ My best friends!
+
+
+ My best friends!
+
+ My friends:
+
+ -
+
+
+
+
+
diff --git a/buffer_buffet/part1/README.md b/buffer_buffet/part1/README.md
new file mode 100644
index 0000000..e7d7378
--- /dev/null
+++ b/buffer_buffet/part1/README.md
@@ -0,0 +1,12 @@
+# Buffer Buffet - Part 1
+
+## Text
+You recently started working in an important company as server manager; being responsible that all IT-infrastructure at the company works smoothly. The machines work with a very simple memory model, and the code of these machines is available as scheme code along with this challenge. The code specifically covers how usernames and passwords are stored in the memory.
+
+The memory model works as follows: the memory is one large vector that contains characters on each slot. All values are represented as strings, and each character of that string is put in a slot in the memory. Values are separated from each other using a null character (represented as #\null or \0) in the slot that separates both values. The memory is initialised with two values: the username of the administrator account (the account of your boss), and the password of that account, both values are written right besides each other in memory (with a null character separating the two, of course).
+
+Your boss told you that he wanted you to change the name of the admin account to something else, and provides you with this netcat link to do so: {link here}. Knowing that your boss is a complete doo-doo no-good that didn't want to give you a raise after working at the company for two days, you decide to use this opportunity to perhaps steal the password to his account. Will you manage to find the password and ruin his day?
+
+## Files
+index.rkt
+
diff --git a/buffer_buffet/part1/SOLUTION.md b/buffer_buffet/part1/SOLUTION.md
new file mode 100644
index 0000000..7b4ddc8
--- /dev/null
+++ b/buffer_buffet/part1/SOLUTION.md
@@ -0,0 +1,8 @@
+## Difficulty
+Easy, 20 points
+
+## How to Solve
+Just enter a username that is 6 characters long. The system tells you that the new name can be no longer than 5 characters in length, and this is to make sure you will not overwrite the password. But this is not enough: the system should also make sure that the null character that separates the two values does not get overwritten, which is still possible. Hence, you have to enter a name that is the lenght of admin long, + 1.
+
+## Flag
+IGCTF{AllUCanEat}
diff --git a/buffer_buffet/part1/index.rkt b/buffer_buffet/part1/index.rkt
new file mode 100644
index 0000000..3183554
--- /dev/null
+++ b/buffer_buffet/part1/index.rkt
@@ -0,0 +1,41 @@
+#lang racket
+
+(define memory (make-vector 1024 #\nul))
+
+(define flag (if (getenv "FLAG") (getenv "FLAG") "NO-FLAG-DEFINED"))
+
+(define (write-to-memory! str memory-start-index)
+ (define str-length (string-length str))
+ (define (loop str-index)
+ (when (< str-index str-length)
+ (vector-set! memory (+ memory-start-index str-index) (string-ref str str-index))
+ (loop (+ str-index 1))))
+ (loop 0))
+
+(define (init-memory!)
+ (write-to-memory! "admin\0" 8)
+ (write-to-memory! (string-append flag "\0") 14))
+
+(init-memory!)
+
+(define (read-from-memory memory-start-index)
+ (define (loop str curr-index)
+ (if (equal? (vector-ref memory curr-index) #\nul)
+ str
+ (loop (string-append str (string (vector-ref memory curr-index))) (+ curr-index 1))))
+ (loop "" memory-start-index))
+
+(define (main)
+ (display "Editing user name 'admin'\n")
+ (display "Enter new name: ")
+ (define new-username (symbol->string (read)))
+ (if (> (string-length new-username) (- 14 8))
+ (begin
+ (display "Error: new username cannot be longer than old username\n")
+ (main))
+ (begin
+ (write-to-memory! new-username 8)
+ (display (string-append "Successfully changed username of 'admin' to '" (read-from-memory 8) "'")))))
+
+(main)
+
diff --git a/buffer_buffet/part2/README.md b/buffer_buffet/part2/README.md
new file mode 100644
index 0000000..8cdb64a
--- /dev/null
+++ b/buffer_buffet/part2/README.md
@@ -0,0 +1,8 @@
+# Buffer Buffet - Part 2
+
+## Text
+Good job! You managed to get the password of your boss and raised your wage so high he caught glimps of it and fired you. However, he forgot that you still have access to their system via this netcat link: {link here}. This link brings you to the password prompt, and all related password prompt code is available in the provided Racket file. Try and see if you can still log in as the admin account to steal info from the company to doxx them.
+
+## Files
+A redacted variant of index.rkt
+
diff --git a/buffer_buffet/part2/SOLUTION.md b/buffer_buffet/part2/SOLUTION.md
new file mode 100644
index 0000000..e0ec299
--- /dev/null
+++ b/buffer_buffet/part2/SOLUTION.md
@@ -0,0 +1,14 @@
+## Difficulty
+Medium, 50 points
+
+## How to Solve
+Again, the memory layout is the same as before: all values are strings and they are separated with a null separator. This time, the memory contains the first user, followed by its password, followed by the second user, followed by the second user's password, etc. The only difference this time, is that the username that the users enters (the username the user wants to log in with), is saved in memory in the first 8 slots of memory.
+
+The idea is to provide a username that is at least 8 characters long, followed by one extra character to override the null separator, then provide the same username again, followed by yet another null separator, and then any old sequence of characters. This last sequence of characters will override the password of the user, so we then use this sequence of characters as password, and we gain access to the account.
+
+Example input:
+admin: admin\0\0\0\0admin\0poopoo\0
+password: poopoo
+
+## Flag
+IGCTF{BossLikesPineappleOnPizza}
diff --git a/buffer_buffet/part2/index.rkt b/buffer_buffet/part2/index.rkt
new file mode 100644
index 0000000..8259b69
--- /dev/null
+++ b/buffer_buffet/part2/index.rkt
@@ -0,0 +1,77 @@
+#lang racket
+
+(define memory (make-vector 1024 #\nul))
+
+(define flag (if (getenv "FLAG") (getenv "FLAG") "NO-FLAG-DEFINED"))
+
+(define (write-to-memory! str memory-start-index)
+ (define str-length (string-length str))
+ (define (loop str-index)
+ (when (< str-index str-length)
+ (vector-set! memory (+ memory-start-index str-index) (string-ref str str-index))
+ (loop (+ str-index 1))))
+ (loop 0))
+
+(define (init-memory!)
+ (write-to-memory! "admin\0" 8)
+ (write-to-memory! "does_not_matter\0" 14))
+
+(init-memory!)
+
+(define (read-from-memory memory-start-index)
+ (define (loop str curr-index)
+ (if (equal? (vector-ref memory curr-index) #\nul)
+ str
+ (loop (string-append str (string (vector-ref memory curr-index))) (+ curr-index 1))))
+ (loop "" memory-start-index))
+
+(define (find-in-memory value)
+ (define (loop memory-index value-index)
+
+ (cond
+ ((>= memory-index (vector-length memory))
+ #f)
+ ((>= value-index (string-length value))
+ (if (equal? (vector-ref memory memory-index) #\nul)
+ (- memory-index (string-length value))
+ (loop (+ memory-index 1) 0)))
+ ((equal? (vector-ref memory memory-index) (string-ref value value-index))
+ (loop (+ memory-index 1) (+ value-index 1)))
+ (else
+ (loop (+ memory-index 1) 0))))
+ (loop 8 0))
+
+(define (find-next-value-in-memory-after start-memory-index-previous)
+ (define (loop memory-index)
+ (if (equal? (vector-ref memory memory-index) #\nul)
+ (+ memory-index 1)
+ (loop (+ memory-index 1))))
+ (loop start-memory-index-previous))
+
+(define (get-password-for username)
+ (define username-in-memory (find-in-memory username))
+ (if username-in-memory
+ (read-from-memory (find-next-value-in-memory-after username-in-memory))
+ #f))
+
+(define (receive-login-attempt-username username)
+ (write-to-memory! username 0))
+
+(define (passwords-match? received-password)
+ (define login-username (read-from-memory 0))
+ (define password-in-memory (get-password-for login-username))
+ (equal? received-password password-in-memory))
+
+(define (accept-null-termination str)
+ (string-replace str "\\0" "\0"))
+
+(define (main)
+ (display "username: " (current-output-port))
+ (receive-login-attempt-username (accept-null-termination (read-line (current-input-port) 'any)))
+ (display "password: " (current-output-port))
+ (define password (read-line (current-input-port) 'any))
+ (if (passwords-match? password)
+ (display (string-append "Superduper dokaboka bolegismo secret flag: " flag " :)") (current-output-port))
+ (display "Incorrect password!!!1!! >:(" (current-output-port))))
+
+(main)
diff --git a/buffer_buffet/part2/redacted_index.rkt b/buffer_buffet/part2/redacted_index.rkt
new file mode 100644
index 0000000..befd37b
--- /dev/null
+++ b/buffer_buffet/part2/redacted_index.rkt
@@ -0,0 +1,76 @@
+#lang racket
+
+(define memory (make-vector 1024 #\nul))
+
+(define (write-to-memory! str memory-start-index)
+ (define str-length (string-length str))
+ (define (loop str-index)
+ (when (< str-index str-length)
+ (vector-set! memory (+ memory-start-index str-index) (string-ref str str-index))
+ (loop (+ str-index 1))))
+ (loop 0))
+
+(define (init-memory!)
+ (write-to-memory! "admin\0" 8)
+ (write-to-memory! "\0" 14))
+
+(init-memory!)
+
+(define (read-from-memory memory-start-index)
+ (define (loop str curr-index)
+ (if (equal? (vector-ref memory curr-index) #\nul)
+ str
+ (loop (string-append str (string (vector-ref memory curr-index))) (+ curr-index 1))))
+ (loop "" memory-start-index))
+
+(define (find-in-memory value)
+ (define (loop memory-index value-index)
+
+ (cond
+ ((>= memory-index (vector-length memory))
+ #f)
+ ((>= value-index (string-length value))
+ (if (equal? (vector-ref memory memory-index) #\nul)
+ (- memory-index (string-length value))
+ (loop (+ memory-index 1) 0)))
+ ((equal? (vector-ref memory memory-index) (string-ref value value-index))
+ (loop (+ memory-index 1) (+ value-index 1)))
+ (else
+ (loop (+ memory-index 1) 0))))
+ (loop 8 0))
+
+(define (find-next-value-in-memory-after start-memory-index-previous)
+ (define (loop memory-index)
+ (if (equal? (vector-ref memory memory-index) #\nul)
+ (+ memory-index 1)
+ (loop (+ memory-index 1))))
+ (loop start-memory-index-previous))
+
+(define (get-password-for username)
+ (define username-in-memory (find-in-memory username))
+ (if username-in-memory
+ (read-from-memory (find-next-value-in-memory-after username-in-memory))
+ #f))
+
+(define (receive-login-attempt-username username)
+ (write-to-memory! username 0))
+
+(define (passwords-match? received-password)
+ (define login-username (read-from-memory 0))
+ (define password-in-memory (get-password-for login-username))
+ (equal? received-password password-in-memory))
+
+(define (accept-null-termination str)
+ (string-replace str "\\0" "\0"))
+
+; Using \0 in your username or password string will be interpreted as the null character. Surely this is very safe and secure and will certainly not cause potential leaks
+
+(define (main)
+ (display "username: ")
+ (receive-login-attempt-username (accept-null-termination (read-line (current-input-port) 'any)))
+ (display "password: ")
+ (if (passwords-match? (read-line (current-input-port) 'any))
+ (flag-or-something-idk)
+ (display "Incorrect password!!!1!! >:(")))
+
+(main)
diff --git a/crackme/README.md b/crackme/README.md
new file mode 100644
index 0000000..1e09062
--- /dev/null
+++ b/crackme/README.md
@@ -0,0 +1,8 @@
+# Crackme
+
+## Text
+This is your classic crackme challenge. Reverse engineer the binary to find the flag!
+
+## Files
+Participants should receive the `crackme` binary. NOT the source code and NOT the solution.
+
diff --git a/crackme/SOLUTION.md b/crackme/SOLUTION.md
new file mode 100644
index 0000000..b8c3761
--- /dev/null
+++ b/crackme/SOLUTION.md
@@ -0,0 +1,11 @@
+## Difficulty
+Moderate/Hard
+60 punten?
+
+## How to solve
+The secret can be found in the binary. A couple of transformations are applied to it. To recover the flag: apply these transformations in reverse to the secret. To easily see the secret and the transformation you can decompile the binary using a tool like Ghidra.
+
+An example solution in given in solution.c.
+
+## Flag
+IGCTF{ThankYouForRemembering}
diff --git a/crackme/crackme b/crackme/crackme
new file mode 100755
index 0000000000000000000000000000000000000000..40e1e002379b4feeb27f52e6f0775508b8b905d8
GIT binary patch
literal 16480
zcmeHOeQX@X6`woDiBrg(6Oz;P3%+d!f23m`bcuRQ&;bp+luL=v(@Ff;3m~#t}qu)%lYmTL1F6chcuN+k*
zJNXOL4(6;c)~BE|kRpGJyq@llx!n(QQ>e4-3u{YxFZtb0oc&NlzbW#YB0uI6*dQS0
zoKMUNUX64gP96juQc(U1;q)6IKPPV?d*)aN(&l4E?9ej3ZWYd9_vI*F(dbn^*
zwQlGV-XSrD82fvKr$qLW3?`D$b|GAtcJ%-4{GWbM_SNV1Cac4pGBlU@S}|pli!Sl(5_diMeRo2Qm`B
zzc^q0^DTUm-cO7xgsVYI&p69RuC{O-tJtSZ6Eknn@cD4K31?4gX9L
z6~+F>*!a9KaepI@&kIvk&?;e_m^CIPXq6DBSEdANZMgmUtheFz_gAA0=N!pE?vI-R
zHv?`4+zhxGa5La$;J=)K_x(%%rVgL1P)Evtw?YVY$C%+Y52?eys2GMfLC*V<7}M7O(WY)4;88E=~N)6tdVzo6D?bCRSbi9=Np*OCnFTf+
zyyB2C=Nas$6N@3v@R%nbK8l5@CEMLgZ}4WZPLMem?Ex?>XD_TefP%nNUz
zrG=q*3@mqy<>tsRCt5~i9r+g_{