├── README.md
├── LICENSE
├── teams.dot
└── teams.svg
/README.md:
--------------------------------------------------------------------------------
1 | # ctf_clusters
2 |
3 | visualizing CTF clusters (teams playing together at DEFCON)
4 |
5 |
6 |
7 | ## building
8 |
9 | Install graphviz with the package manager of your choice.
10 |
11 | ```
12 | neato -Tsvg teams.dot > teams.svg
13 | ```
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Emile
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/teams.dot:
--------------------------------------------------------------------------------
1 | digraph teams {
2 | node [fontname = "Cascadia Code"];
3 | overlap = false;
4 | // splines = true;
5 | splines = polyline;
6 | // sep="+1"; // 0.1, +1
7 | // esep=1;
8 |
9 | // level 0
10 | DEFCON [label="DEF CON '23\nQuals" style="bold" fontsize="26pt" href="https://nautilus.institute/", margin="0.25"];
11 |
12 | // level 1
13 | // team clusters (red)
14 | subgraph {
15 | node [color="#db4437" fontcolor="#db4437"];
16 | "NorseCode" [href="https://ctftime.org/team/110823/"];
17 | "mhackeroni" [href="https://ctftime.org/team/57788/"];
18 | "orgakraut" [href="https://ctftime.org/team/229364"];
19 | "if this doesn't work we'll get more for next year" [href="https://ctftime.org/team/220769/", label="if this doesn't work\nwe'll get more for next year"];
20 | "TWN48" [href="https://ctftime.org/team/229439"];
21 | "Blue Water" [href="https://ctftime.org/team/205897"];
22 | "SuperDiceCode" [href="https://ctftime.org/team/222838"];
23 | "Straw Hat" [href="https://ctftime.org/team/19208"];
24 | "P1G BuT S4D" [href="https://ctftime.org/team/222421"];
25 | "undef1ned" [href="https://ctftime.org/team/189869"];
26 | "HypeBoy" [href="https://ctftime.org/team/221939"];
27 | "PTB_WTL_0T" [href="https://ctftime.org/team/119975"];
28 | "Parliament of Ducks" [];
29 | "Never Stop Exploiting";
30 | "Shellphish" [href="https://ctftime.org/team/285"];
31 |
32 | // "Katzebin" [href="https://ctftime.org/team/141539"];
33 |
34 | // these are clusters from 2022 that got re-merged into even bigger clusters 2023
35 | "perfect r✪✪✪t" [href="https://ctftime.org/team/176403"];
36 | }
37 |
38 | // level 2
39 | // individual teams (blue)
40 | subgraph {
41 | node [color="#4285f4" fontcolor="#4285f4"];
42 |
43 | // Norsecode
44 | "bootplug" [];
45 | "ChaGU" [];
46 | "Coldboots" [];
47 | "Corax" [];
48 | "Cyberlandslaget" [];
49 | "EPT" [];
50 | "Kalmarunionen" [];
51 | "Kebab" [];
52 | "Fidget" [];
53 | "miscgang" [];
54 | "Omogen Heap" [];
55 | "Pwnagaukar" [];
56 | "RR" [];
57 | "RumbleInTheJungle" [];
58 | "SNHT" [];
59 | "Team-0x7" [];
60 | "TeamStreamStream" [];
61 | "Watever" [];
62 |
63 | // if this doesn't work we'll get more for next year
64 | "Project Sekai" [href=""];
65 | "thehackerscrew" [href=""];
66 | "idek" [href=""];
67 | "ARESx" [href=""];
68 | "Emu Exploit" [href=""];
69 | "Arr3stY0u" [href=""];
70 | "DeadSec" [href=""];
71 | "Polaris" [href=""];
72 | "Lilac" [href=""];
73 |
74 | // mhackeroni
75 | "TheRomanXpl0it" [href=""];
76 | "n0pwnintended";
77 | "towerofhanoi";
78 | "fibonhack";
79 | "pwnthem0le" [href="https://ctftime.org/team/60467/"];
80 | "about:blankets" [href="https://ctftime.org/team/208552"];
81 | "PGiatasti" [href="https://ctftime.org/team/80262"];
82 | "c00kiesATvenice";
83 |
84 | // Blue Water
85 | "Water Paddler" [href="https://ctftime.org/team/155019"]
86 | "perfect blue" [href="https://ctftime.org/team/53802"];
87 | "r00timentary" [href="https://ctftime.org/team/32783"];
88 | "Samsung Research" [href="" label="Samsung\nResearch"];
89 |
90 | // TWN48
91 | "Balsn" [href="https://ctftime.org/team/16978"];
92 | "217" [href="https://ctftime.org/team/5160"];
93 | "TSJ" [href="https://ctftime.org/team/150366"];
94 | "HITCON" [href="https://ctftime.org/team/8299"];
95 |
96 | // PTB_WTL_0T
97 | "PwnThyBytes" [href="https://ctftime.org/team/59199"];
98 | "WreckTheLine" [href="https://ctftime.org/team/57908"];
99 | "Zer0Tolerance";
100 |
101 | // undef1ned
102 | "./Vespiary" [href="https://ctftime.org/team/80092"];
103 | "RicercaSec" [href=""];
104 | "binja" [href="https://ctftime.org/team/9083"];
105 | "TokyoWesterns" [href="https://ctftime.org/team/12599"];
106 |
107 | // Straw Hat
108 | "Nu1L" [href="https://ctftime.org/team/19208"];
109 | "W&M" [href="https://ctftime.org/team/54666"];
110 |
111 | // SuperDiceCode
112 | "CodeRed" [href="https://ctftime.org/team/4004"];
113 | "DiceGang" [href="https://ctftime.org/team/109452"];
114 | "SuperGuesser" [href="https://ctftime.org/team/130817"];
115 |
116 | // Katzebin
117 | // "AAA" [href=""];
118 | // "Oops" [href="https://ctftime.org/team/4419"];
119 | // "Tencent" [href="https://ctftime.org/team/32578"];
120 |
121 | // P1G BuT S4D
122 | "r3kapig" [href="https://ctftime.org/team/58979"]
123 | "C4T BuT S4D" [href="https://ctftime.org/team/83435"]
124 |
125 | // orgakraut
126 | "Sauercloud" [href="https://ctftime.org/team/54748"]
127 | "organizers" [href="https://ctftime.org/team/42934"]
128 |
129 | // Parliament of Ducks
130 | "PPP" [href="https://ctftime.org/team/284"];
131 | "The Duck" [href="https://ctftime.org/team/111501"];
132 | }
133 |
134 | // level 3
135 | // teams of the above (green)
136 | subgraph {
137 | node [color="#228B22" fontcolor="#228B22"];
138 |
139 | // Sauercloud (Germany)
140 | "KITCTF" [href="https://ctftime.org/team/7221"];
141 | "Eat Sleep Pwn Repeat" [href="https://ctftime.org/team/15712"];
142 | "Flux Fingers" [href="https://ctftime.org/team/551"];
143 | "Red Rocket" [href="https://ctftime.org/team/48677"];
144 | "ALLES!" [href="https://ctftime.org/team/18419"];
145 | "ENOFLAG" [href="https://ctftime.org/team/1438"];
146 | "FAUST" [href="https://ctftime.org/team/550"];
147 | "WizardsOfDos" [href="https://ctftime.org/team/561"];
148 | "Squareroots" [href="https://ctftime.org/team/554"];
149 | "saarsec" [href="https://ctftime.org/team/15337"];
150 |
151 | // organizers
152 | "secret.club" [href="https://secret.club"];
153 | "polyflag" [href="https://ctftime.org/team/112451"];
154 | "excusemewtf" [href="https://ctftime.org/team/104977/"];
155 | "the cr0wn" [href="https://ctftime.org/team/48976/"];
156 |
157 | // TSJ
158 | "10sec" [href="https://ctftime.org/team/61603"];
159 | "BambooFox" [href="https://ctftime.org/team/9871"];
160 | "Goburin'" [href="https://ctftime.org/team/111613"];
161 | "NCtfU" [href="https://ctftime.org/team/139610"];
162 | "Ret2NOP" [href="https://ctftime.org/team/139617"];
163 |
164 | // ESPR
165 | "StratumAuhuur" [href="https://ctftime.org/team/5317"];
166 |
167 | // DiceGang
168 | "Sice Squad" [href="https://ctftime.org/team/55508"]
169 | "redpwn" [href="https://ctftime.org/team/59759"]
170 | "b1c" [href="https://ctftime.org/team/36439"]
171 | "kernel sanders" [href="https://ctftime.org/team/397"]
172 | "sigpwny" [href="https://ctftime.org/team/27763"]
173 | "crusaders of rust" [href="https://ctftime.org/team/132628/"]
174 | "CCC" [href="https://ctftime.org/team/114056/"]
175 |
176 | // r3kapig
177 | "Eur3kA" [href="https://ctftime.org/team/48512"];
178 | "FlappyPig" [href="https://ctftime.org/team/12692"];
179 | }
180 |
181 | // level 4
182 | // teams of the teams of the teams of the clusters (this is getting wild)
183 | subgraph {
184 | node [color="#12b2af" fontcolor="#000000"];
185 | "CCCAC" [href="https://ctftime.org/team/555"];
186 | "Stratum0" [href="https://ctftime.org/team/1684"];
187 |
188 | // polyflag
189 | "flagbot" [href="https://ctftime.org/team/34878"];
190 | "polygl0ts" [href="https://ctftime.org/team/53791"];
191 | }
192 |
193 | // level 1 -> level 0
194 | // primary edges
195 | subgraph {
196 | edge [len=3];
197 | "Blue Water" -> DEFCON [style="bold"];
198 | "orgakraut" -> DEFCON [style="bold"];
199 | "TWN48" -> DEFCON [style="bold"];
200 | "PTB_WTL_0T" -> DEFCON [style="bold"];
201 | "undef1ned" -> DEFCON [style="bold"];
202 | "Straw Hat" -> DEFCON [style="bold"];
203 | "Parliament of Ducks" -> DEFCON [style="bold"];
204 | // "Katzebin" -> DEFCON [style="bold"];
205 | "SuperDiceCode" -> DEFCON [style="bold"];
206 | "Shellphish" -> DEFCON [style="bold"];
207 | "P1G BuT S4D" -> DEFCON [style="bold"];
208 | "if this doesn't work we'll get more for next year" -> DEFCON [style="bold"];
209 | "HypeBoy" -> DEFCON [style="bold"];
210 | "mhackeroni" -> DEFCON [style="bold"];
211 | "Never Stop Exploiting" -> DEFCON [style="bold"];
212 | "NorseCode" -> DEFCON [style="bold"];
213 | }
214 |
215 | // level 2 -> level 1
216 | // secondary edges (teams to clusters)
217 | subgraph {
218 | edge [weight=1 style="dashed" color="grey"];
219 |
220 | // NorseCode
221 | "bootplug" -> "NorseCode";
222 | "ChaGU" -> "NorseCode";
223 | "Coldboots" -> "NorseCode";
224 | "Corax" -> "NorseCode";
225 | "Cyberlandslaget" -> "NorseCode";
226 | "EPT" -> "NorseCode";
227 | "Kalmarunionen" -> "NorseCode";
228 | "Kebab" -> "NorseCode";
229 | "Fidget" -> "NorseCode";
230 | "miscgang" -> "NorseCode";
231 | "Omogen Heap" -> "NorseCode";
232 | "Pwnagaukar" -> "NorseCode";
233 | "RR" -> "NorseCode";
234 | "RumbleInTheJungle" -> "NorseCode";
235 | "SNHT" -> "NorseCode";
236 | "Team-0x7" -> "NorseCode";
237 | "TeamStreamStream" -> "NorseCode";
238 | "Watever" -> "NorseCode";
239 |
240 | // mhackeroni
241 | "TheRomanXpl0it" -> "mhackeroni";
242 | "n0pwnintended" -> "mhackeroni";
243 | "towerofhanoi" -> "mhackeroni";
244 | "fibonhack" -> "mhackeroni";
245 | "pwnthem0le" -> "mhackeroni";
246 | "about:blankets" -> "mhackeroni";
247 | "PGiatasti" -> "mhackeroni";
248 | "c00kiesATvenice" -> "mhackeroni";
249 |
250 | // Blue Water
251 | "perfect r✪✪✪t" -> "Blue Water";
252 | "Water Paddler" -> "Blue Water";
253 | "perfect blue" ->"perfect r✪✪✪t";
254 | "r00timentary" -> "perfect r✪✪✪t";
255 | "Samsung Research" -> "perfect r✪✪✪t";
256 |
257 | // if this doesn't work we'll get more for next year
258 | "Project Sekai" -> "if this doesn't work we'll get more for next year";
259 | "thehackerscrew" -> "if this doesn't work we'll get more for next year";
260 | "idek" -> "if this doesn't work we'll get more for next year";
261 | "ARESx" -> "if this doesn't work we'll get more for next year";
262 | "Emu Exploit" -> "if this doesn't work we'll get more for next year";
263 | "Arr3stY0u" -> "if this doesn't work we'll get more for next year";
264 | "DeadSec" -> "if this doesn't work we'll get more for next year";
265 | "Polaris" -> "if this doesn't work we'll get more for next year";
266 | "Lilac" -> "if this doesn't work we'll get more for next year";
267 |
268 | // orgakraut
269 | "organizers" -> "orgakraut";
270 | "Sauercloud" -> "orgakraut";
271 |
272 | // TWN48
273 | "Balsn" -> "TWN48";
274 | "217" -> "TWN48";
275 | "TSJ" -> "TWN48";
276 | "HITCON" -> "TWN48";
277 |
278 | // PTB_WTL
279 | "PwnThyBytes" -> "PTB_WTL_0T";
280 | "WreckTheLine" -> "PTB_WTL_0T";
281 | "Zer0Tolerance" -> "PTB_WTL_0T"
282 |
283 | // undef1ned
284 | "./Vespiary" -> "undef1ned";
285 | "RicercaSec" -> "undef1ned";
286 | "binja" -> "undef1ned";
287 | "TokyoWesterns" -> "undef1ned";
288 |
289 | // Straw Hat
290 | "Nu1L" -> "Straw Hat";
291 | "W&M" -> "Straw Hat";
292 |
293 | // SuperDiceCode
294 | "CodeRed" -> "SuperDiceCode";
295 | "DiceGang" -> "SuperDiceCode";
296 | "SuperGuesser" -> "SuperDiceCode";
297 |
298 | // Katzebin
299 | // "AAA" -> "Katzebin";
300 | // "Oops" -> "Katzebin";
301 | // "Tencent" -> "Katzebin";
302 |
303 | // P1G BuT S4D
304 | "r3kapig" -> "P1G BuT S4D";
305 | "C4T BuT S4D" -> "P1G BuT S4D";
306 |
307 | // Parliament of Ducks
308 | "PPP" -> "Parliament of Ducks";
309 | "The Duck" -> "Parliament of Ducks";
310 | }
311 |
312 | // level 3 -> level 2
313 | // ternary edges (people to teams)
314 | subgraph {
315 | edge [weight=1 style="dashed" color="grey"];
316 | // TSJ
317 | "10sec" -> "TSJ";
318 | "BambooFox" -> "TSJ";
319 | "Goburin'" -> "TSJ";
320 | "NCtfU" -> "TSJ";
321 | "Ret2NOP" -> "TSJ";
322 |
323 | // ESPR
324 | "KITCTF" -> "Eat Sleep Pwn Repeat";
325 | "StratumAuhuur" -> "Eat Sleep Pwn Repeat";
326 |
327 | // Sauercloud (Germany)
328 | "Eat Sleep Pwn Repeat" -> "Sauercloud";
329 | "Flux Fingers" -> "Sauercloud";
330 | "Red Rocket" -> "Sauercloud";
331 | "ALLES!" -> "Sauercloud";
332 | "ENOFLAG" -> "Sauercloud";
333 | "FAUST" -> "Sauercloud";
334 | "WizardsOfDos" -> "Sauercloud";
335 | "Squareroots" -> "Sauercloud";
336 | "saarsec" -> "Sauercloud";
337 |
338 | // organizers
339 | "secret.club" -> "organizers";
340 | "polyflag" -> "organizers";
341 | "excusemewtf" -> "organizers";
342 | "the cr0wn" -> "organizers";
343 |
344 | // r3kapig
345 | "Eur3kA" -> "r3kapig";
346 | "FlappyPig" -> "r3kapig";
347 | }
348 |
349 | // level 4 -> level 3
350 | // quadinary (how do you call this?) edges
351 | subgraph {
352 | edge [weight=1 style="dashed" color="grey"];
353 |
354 | // StratumAuhuur
355 | "Stratum0" -> "StratumAuhuur";
356 | "CCCAC" -> "StratumAuhuur";
357 |
358 | // polyflag
359 | "flagbot" -> "polyflag";
360 | "polygl0ts" -> "polyflag";
361 |
362 | // Dice Gang
363 | "Sice Squad"-> "DiceGang"
364 | "redpwn"-> "DiceGang"
365 | "b1c"-> "DiceGang"
366 | "kernel sanders"-> "DiceGang"
367 | "sigpwny"-> "DiceGang"
368 | "crusaders of rust" -> "DiceGang"
369 | "CCC" -> "DiceGang";
370 | }
371 | }
372 |
373 |
--------------------------------------------------------------------------------
/teams.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
1565 |
--------------------------------------------------------------------------------