-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdojo.yml
More file actions
880 lines (823 loc) · 55 KB
/
Copy pathdojo.yml
File metadata and controls
880 lines (823 loc) · 55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
id: acsac-ctfs
name: ACSAC CTFs
type: public
allow_privileged: true
award:
emoji: 🌴
modules:
- id: challenges-25
name: ACSAC 2025 CTF Challenges
allow_privileged: true
description: |
Welcome to the second-ever ACSAC <a href="https://ctftime.org/ctf-wtf/">Capture the Flag (CTF)</a>, celebrating the 41st year of ACSAC.
This year’s narrative follows the legendary voyager Hawaiʻiloa, who is said to have discovered the Hawaiian Islands by navigating the stars.
Help Hawaiʻiloa across the Pacific toward Hawaiʻi, one constellation at a time.
Start with the starter challenge (the compass).
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<div style="display: flex; justify-content: center; position: relative; padding-bottom: 15ex;">
<style>
.island_container {
position: relative;
display: inline-block;
width: 100%;
height: 100%;
overflow: hidden;
transition: transform 0.5s ease;
transform-origin: top left;
max-width: 100%;
}
.island_container:not(.zoomed) {
transform: scale(1);
}
.island_container.zoomed {
transform: scale(3);
}
.island_container .ocean {
display: block;
width: 100%;
height: auto;
}
.hide {
display: none;
}
.island_container .island {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: auto;
}
.overlay-svg {
position: absolute;
top: 0;
left: 0;
z-index: 100;
width: 100%;
height: 100%;
}
.overlay-svg .island:hover {
cursor: pointer;
}
#current-challenge {
position: absolute;
top: 0;
left: 0;
margin-left: 15%;
margin-top: 10%;
width: 70%;
height: auto;
z-index: 1000;
background: rgba(26, 41, 66, 0.85);
padding: 2em;
color: #ffffff;
}
#current-challenge p, h1, h2, h3, h4 {
color: #ffffff !important;
}
#current-challenge a {
color: #7090a3 !important;
}
#challenge-input {
color: #ffffff !important;
}
</style>
<div class="hide" id="current-challenge">
<span class="close" onclick="zoomOut()">X</span>
<h1 class="title">Challenge Title</h1>
<h2 class="pwn-solves">0</h2>
<h4 class="points">500</h4>
<h4 class="num-solves">0</h4>
<p class="challenge-description">
Click a constellation to view its challenge.
</p>
<div class="container">
<div class="accordion accordion-item" id="challenges">
<div class="row">
<div class="col-sm-6 form-group text-center">
<button id="challenge-start" type="submit" class="btn btn-md btn-outline-secondary w-100">
<span class="d-sm-block d-md-block d-lg-block">
<i class="fas fa-play fa-2x pr-3"></i>Start
</span>
</button>
</div>
<div class="col-sm-6 form-group text-center">
<button id="challenge-practice" type="submit" class="btn btn-md btn-outline-secondary w-100">
<span class="d-sm-block d-md-block d-lg-block">
<i class="fas fa-flask fa-2x pr-3"></i>Practice
</span>
</button>
</div>
</div>
<div class="row submit-row">
<div class="col-md-9 form-group">
<input id="module" type="hidden" value="">
<input id="challenge" type="hidden" value="">
<input id="challenge-id" type="hidden" value="">
<input id="challenge-input" class="challenge-input form-control" type="text" name="answer" placeholder="Flag">
</div>
<div class="col-md-3 form-group key-submit">
<button id="challenge-submit" type="submit" class="challenge-submit btn btn-md btn-outline-secondary float-right w-100 h-100">
Submit
</button>
</div>
</div>
<div class="row notification-row">
<div class="col-md-12">
<div id="result-notification" class="alert alert-dismissable text-center w-100" role="alert" style="display: none;">
<strong id="result-message"></strong>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="island_container" id="island_container">
<img class="ocean" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/Background_flip.png?raw=true" alt="Background" id="baseImage">
<img class="island unsolved halulu-current halulu" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/halulu_L1.png?raw=true" alt="halulu unsolved" id="halulu-light">
<img class="island unsolved hide halulu" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/halulu_L3.png?raw=true" alt="halulu solved" id="halulu-color">
<img class="island hide medium halulu" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/halulu_L2.png?raw=true" alt="halulu medium" id="halulu-medium">
<img class="island unsolved hokupaa-current hokupaa" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/hokupaa_L1.png?raw=true" alt="hokupaa unsolved" id="hokupaa-light">
<img class="island unsolved hide hokupaa" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/hokupaa_L3.png?raw=true" alt="hokupaa solved" id="hokupaa-color">
<img class="island hide medium hokupaa" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/hokupaa_L2.png?raw=true" alt="hokupaa medium" id="hokupaa-medium">
<img class="island unsolved iwakelii-current iwakelii" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/iwakelii_L1.png?raw=true" alt="iwakelii unsolved" id="iwakelii-light">
<img class="island unsolved hide iwakelii" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/iwakelii_L3.png?raw=true" alt="iwakelii solved" id="iwakelii-color">
<img class="island hide medium iwakelii" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/iwakelii_L2.png?raw=true" alt="iwakelii medium" id="iwakelii-medium">
<img class="island unsolved ka-heihei-ona-keiki-current ka-heihei-ona-keiki" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/ka-hei-hei-ona-keiki_L1.png?raw=true" alt="ka-heihei-ona-keiki unsolved" id="ka-heihei-ona-keiki-light">
<img class="island unsolved hide ka-heihei-ona-keiki" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/ka-hei-hei-ona-keiki_L3.png?raw=true" alt="ka-heihei-ona-keiki solved" id="ka-heihei-ona-keiki-color">
<img class="island hide medium ka-heihei-ona-keiki" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/ka-hei-hei-ona-keiki_L2.png?raw=true" alt="ka-heihei-ona-keiki medium" id="ka-heihei-ona-keiki-medium">
<img class="island unsolved ka-lupe-o-kawelo-current ka-lupe-o-kawelo" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/ka-lupe-o-kawelo_L1.png?raw=true" alt="ka-lupe-o-kawelo unsolved" id="ka-lupe-o-kawelo-light">
<img class="island unsolved hide ka-lupe-o-kawelo" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/ka-lupe-o-kawelo_L3.png?raw=true" alt="ka-lupe-o-kawelo solved" id="ka-lupe-o-kawelo-color">
<img class="island hide medium ka-lupe-o-kawelo" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/ka-lupe-o-kawelo_L2.png?raw=true" alt="ka-lupe-o-kawelo medium" id="ka-lupe-o-kawelo-medium">
<img class="island unsolved ka-moi-current ka-moi" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/ka_moi_L1.png?raw=true" alt="ka-moi unsolved" id="ka-moi-light">
<img class="island unsolved hide ka-moi" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/ka_moi_L3.png?raw=true" alt="ka-moi solved" id="ka-moi-color">
<img class="island hide medium ka-moi" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/ka_moi_L2.png?raw=true" alt="ka-moi medium" id="ka-moi-medium">
<img class="island unsolved kaahupahau-current kaahupahau" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/kaahupahau_L1.png?raw=true" alt="kaahupahau unsolved" id="kaahupahau-light">
<img class="island unsolved hide kaahupahau" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/kaahupahau_L3.png?raw=true" alt="kaahupahau solved" id="kaahupahau-color">
<img class="island hide medium kaahupahau" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/kaahupahau_L2.png?raw=true" alt="kaahupahau medium" id="kaahupahau-medium">
<img class="island unsolved kukalaniehu-current kukalaniehu" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/kukalaniehu_L1.png?raw=true" alt="kukalaniehu unsolved" id="kukalaniehu-light">
<img class="island unsolved hide kukalaniehu" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/kukalaniehu_L3.png?raw=true" alt="kukalaniehu solved" id="kukalaniehu-color">
<img class="island hide medium kukalaniehu" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/kukalaniehu_L2.png?raw=true" alt="kukalaniehu medium" id="kukalaniehu-medium">
<img class="island unsolved manaiakalani-current manaiakalani" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/manaiakalani_L1.png?raw=true" alt="manaiakalani unsolved" id="manaiakalani-light">
<img class="island unsolved hide manaiakalani" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/manaiakalani_L3.png?raw=true" alt="manaiakalani solved" id="manaiakalani-color">
<img class="island hide medium manaiakalani" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/manaiakalani_L2.png?raw=true" alt="manaiakalani medium" id="manaiakalani-medium">
<img class="island unsolved compass-current compass" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/light/compass_L1.png?raw=true" alt="compass unsolved" id="compass-light">
<img class="island unsolved hide compass" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/color/compass_L3.png?raw=true" alt="compass solved" id="compass-color">
<img class="island hide medium compass" src="https://github.com/pwncollege/acsac-ctf-dojo/blob/main/assets/25/challenges/medium/compass_L2.png?raw=true" alt="compass medium" id="compass-medium">
<svg class="overlay-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 1423">
<polygon class="island ka-heihei-ona-keiki" points="40,524 235,46 238,42 239,41 241,40 423,175 428,181 428,187 290,611 286,618 45,538 40,536" fill="transparent" />
<polygon class="island halulu" points="58,1090 61,1088 191,1022 193,1021 496,1080 501,1081 518,1090 534,1210 212,1364 209,1364 207,1362" fill="transparent" />
<polygon class="island kaahupahau" points="1259,925 1262,922 1344,897 1350,897 1354,899 1358,902 1439,1000 1439,1002 1416,1255 1415,1257 1342,1336 1340,1338 1336,1338 1333,1337 1331,1335 1285,1200" fill="transparent" />
<polygon class="island ka-lupe-o-kawelo" points="533,875 708,679 711,676 713,675 718,674 1156,854 1157,855 1158,859 1193,1029 1193,1032 1074,1307 1072,1309 1069,1311 1063,1313 925,1313 921,1311 534,881" fill="transparent" />
<polygon class="island hokupaa" points="1384,95 1385,91 1386,88 1391,74 1896,148 1899,150 1900,151 1957,230 1957,239 1954,245 1800,312 1614,242 1490,181 1395,117 1386,103 1385,101 1384,96" fill="transparent" />
<polygon class="island kukalaniehu" points="502,779 526,294 528,291 530,290 534,291 537,294 578,623 552,749 507,783 504,782 502,780" fill="transparent" />
<polygon class="island iwakelii" points="810,283 822,93 833,96 836,101 1101,557 1103,562 1104,566 1104,580 909,575 897,570 894,563 811,300 810,296" fill="transparent" />
<polygon class="island ka-moi" points="1161,265 1162,265 1168,266 1451,414 1454,418 1584,608 1586,611 1587,613 1587,619 1458,805 1456,805 1452,804 1450,803 1279,603 1277,599 1161,272" fill="transparent" />
<polygon class="island manaiakalani" points="1486,914 1488,903 1494,893 1525,865 1536,856 1571,839 1955,704 1963,716 1964,758 1961,772 1932,867 1930,870 1916,886 1657,1000 1597,996 1522,973" fill="transparent" />
<polygon class="island compass" points="1597,1151 1786,974 1811,974 1989,1149 1992,1166 1991,1173 1891,1272 1804,1355 1791,1356 1703,1272 1606,1175 1597,1152" fill="transparent" />
</svg>
</div>
</div>
<script>
const islands = ['halulu', 'hokupaa', 'iwakelii', 'ka-heihei-ona-keiki', 'ka-lupe-o-kawelo', 'ka-moi', 'kaahupahau', 'kukalaniehu', 'manaiakalani', 'compass'];
const baseImage = document.getElementById('baseImage');
const container = document.getElementById('island_container');
var zoomedIsland = null;
var challenge_id_to_name = {};
const islandChallenge = {
"halulu": "halulu",
"hokupaa": "postmortem",
"iwakelii": "iwakelii",
"ka-heihei-ona-keiki": "kaheiheionakeiki",
"ka-lupe-o-kawelo": "kalupeokawelo",
"ka-moi": "kamoi",
"kaahupahau": "stargazer",
"kukalaniehu": "doubleblindside",
"manaiakalani": "manaiakalani",
"compass": "panana",
};
const challenge_points = {
};
const challenge_solves = {
};
var challengeIsland = {
};
Object.keys(islandChallenge).forEach(function(challenge_name) {
challengeIsland[islandChallenge[challenge_name]] = challenge_name;
});
var challenges = {};
function zoomOut() {
if (zoomedIsland !== null)
{
container.style.transform = 'none';
$(`#current-challenge`).addClass("hide");
zoomedIsland = null;
}
}
islands.forEach(function(island) {
const polygon = document.querySelector(`.overlay-svg .${island}`);
$(polygon).hover(
function() {
$(`#${island}-medium`).toggleClass("hide");
$(`.${island}-current`).toggleClass("hide");
}
);
function addChallenge(island) {
const challengeName = islandChallenge[island];
const challenge = challenges[challengeName];
const points = challenge_points[challenge.id] || 500;
$('#current-challenge .title').text(challenge.name);
$('#current-challenge .points').text(`Worth ${points} points in CTF`);
$('#current-challenge .num-solves').text(`${challenge_solves[challenge.id]} solves during the CTF`);
$('#current-challenge .pwn-solves').text(`${challenge.solves}`);
$('#current-challenge .challenge-description').html(challenge.description);
$('#current-challenge #module').val(challenge.module);
$('#current-challenge #challenge').val(challenge.id);
$('#current-challenge #challenge-id').val(challenge.challenge_id);
}
// Click logic for zoom
polygon.addEventListener('click', function() {
if (zoomedIsland !== null)
{
zoomOut();
}
else
{
// Parse polygon points
const pointsAttr = polygon.getAttribute('points');
const points = pointsAttr.trim().split(/\s+/).map(p => {
const [x, y] = p.split(',').map(Number);
return {x, y};
});
// Compute centroid (or bounding box center)
let sumX = 0, sumY = 0;
points.forEach(pt => {
sumX += pt.x;
sumY += pt.y;
});
const zoomFactor = 3;
const centroidX = sumX / points.length;
const centroidY = sumY / points.length;
const displayedWidth = baseImage.clientWidth;
const displayedHeight = baseImage.clientHeight;
const originalWidth = baseImage.naturalWidth;
const originalHeight = baseImage.naturalHeight;
const xScale = displayedWidth / originalWidth;
const yScale = displayedHeight / originalHeight;
const displayedCentroidX = centroidX * xScale;
const displayedCentroidY = centroidY * yScale;
const translationX = (displayedCentroidX * zoomFactor) - (window.innerWidth / 2);
const translationY = (displayedCentroidY * zoomFactor) - (window.innerHeight / 2);
const finalTranslateX = -translationX;
const finalTranslateY = -translationY;
container.style.transform = `translate(${finalTranslateX}px, ${finalTranslateY}px) scale(${zoomFactor})`;
addChallenge(island);
$(`#current-challenge`).removeClass("hide");
zoomedIsland = island;
}
});
});
// Listen for Escape key to zoom out if currently zoomed in
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
zoomOut();
}
});
$( document ).ready(function () {
$(".accordion-item").each(function () {
if (this.id == "challenges") return;
const chall = $(this);
const challenge = {
module: chall.find("#module").val(),
solves: chall.find(".total-solves").text(),
description: chall.find(".accordion-item-body .embed-responsive").html(),
id: chall.find("#challenge").val(),
challenge_id: chall.find("#challenge-id").val(),
name: chall.find(".challenge-name").text(),
solved: chall.find(".challenge-unsolved").length == 0,
};
if (challenge.solved)
{
const island = challengeIsland[challenge.id];
$(`#${island}-light`).removeClass(`${island}-current`);
$(`#${island}-color`).addClass(`${island}-current`);
$(`#${island}-light`).addClass("hide");
$(`#${island}-color`).removeClass("hide");
}
challenges[challenge.id] = challenge;
});
});
function onClassChange(element, callback) {
// Ensure the element is a DOM node
const target = $(element)[0];
// Create a MutationObserver instance
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
callback(mutation.target); // Call the callback with the updated element
}
}
});
// Configure the observer to listen for attribute changes
observer.observe(target, { attributes: true });
// Return the observer so it can be disconnected later if needed
return observer;
}
onClassChange('#current-challenge #challenge-input', (element) => {
var island = zoomedIsland;
if (zoomedIsland === null)
{
return;
}
if ($(element).hasClass("correct"))
{
$(`#${island}-light`).removeClass(`${island}-current`);
$(`#${island}-color`).addClass(`${island}-current`);
$(`#${island}-light`).addClass("hide");
$(`#${island}-color`).removeClass("hide");
}
});
</script>
#### CTF created by:
- Zion Leonahenahe Basque, Arizona State University, CTF Ali'i
- Will Rosenberg, Arizona State University
- Wil Gibbs, Arizona State University
- Siddharth Mishra, Arizona State University
- Pulkit Singh Singaria, Arizona State University
- Pratham Gupta, Arizona State University
- Nathan Wong, University of Hawaiʻi at Mānoa
- Hulin Wang, Arizona State University
- Ethan Morrell, University of Hawaiʻi at Mānoa
- Caden Sounart, Arizona State University
- Ahmad Samara, Arizona State University
challenges:
- id: panana
name: Pānānā
- id: postmortem
name: Hōkūpaʻa - postmortem
- id: halulu
name: Halulu
image: prathamgupta36/sammy-challenge-acsac:0.5
- id: kaheiheionakeiki
name: Ka hei hei o nā keiki
image: prathamgupta36/acsac-test:0.10
- id: iwakelii
name: Iwakeli`i
- id: doubleblindside
name: Kūkalaniʻehu - doubleblindside
image: hlw1234/acsac25-doubleblindside:0.5
- id: kamoi
name: Ka Mō'ī
image: x3ero0/acsac25-kamoi:1.3
- id: kalupeokawelo
name: Ka lupe o kawelo
- id: manaiakalani
name: Mānaiakalani
- id: stargazer
name: Kaʻahupāhau - Stargazer
- id: challenges
name: ACSAC 2024 CTF Challenges
allow_privileged: true
description: |
Welcome to the archive of the first-ever [2024 ACSAC Capture the Flag (CTF)](https://www.acsac.org/2024/venue/), celebrating 40 years of ACSAC. In this special edition CTF, we honor the Hawaiian culture by following the legend of <a href="https://en.wikipedia.org/wiki/M%C4%81ui_(Hawaiian_mythology)">Māui</a>, the Hawaiian demi-god. Using his magical fishing hook, <a href="https://hawaiialive.org/manaiakalani/">Manaiakalani</a>, Māui fished the Hawaiian Islands out of the ocean and created the islands we know today. Help Māui pull each island out of the ocean by solving challenges, literally creating the map we know and love.
Start with the `sanity-check` challenge (the canoe on the bottom left of the map).
You can access challenges through the CTF scoreboard below or by scrolling down to the normal list of challenges.
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<div style="display: flex; justify-content: center; position: relative; padding-bottom: 15ex;">
<style>
.island_container {
position: relative;
display: inline-block;
width: 100%;
height: 100%;
overflow: hidden;
transition: transform 0.5s ease;
transform-origin: top left;
max-width: 100%;
}
.island_container:not(.zoomed) {
transform: scale(1);
}
.island_container.zoomed {
transform: scale(3);
}
.island_container .ocean {
display: block;
width: 100%;
height: auto;
}
.hide {
display: none;
}
.island_container .island {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: auto;
}
.overlay-svg {
position: absolute;
top: 0;
left: 0;
z-index: 100;
width: 100%;
height: 100%;
}
.overlay-svg .island:hover {
cursor: url("https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/maui_hook.png") 32 64, auto;
}
#current-challenge {
position: absolute;
top: 0;
left: 0;
margin-left: 15%;
margin-top: 10%;
width: 70%;
height: auto;
z-index: 1000;
background: rgba(76, 57, 31, 0.9);
padding: 2em;
color: #ffffff;
}
#current-challenge p, h1, h2, h3, h4 {
color: #ffffff !important;
}
#current-challenge a {
color: #7090a3 !important;
}
#challenge-input {
color: #ffffff !important;
}
</style>
<div class="hide" id="current-challenge">
<span class="close" onclick="zoomOut()">X</span>
<h1 class="title">Challenge Title</h1>
<h2 class="pwn-solves">0</h2>
<h4 class="points">500</h4>
<h4 class="num-solves">0</h4>
<p class="challenge-description">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi non condimentum nunc, ut faucibus mauris.
</p>
<div class="container">
<div class="accordion accordion-item" id="challenges">
<div class="row">
<div class="col-sm-6 form-group text-center">
<button id="challenge-start" type="submit" class="btn btn-md btn-outline-secondary w-100">
<span class="d-sm-block d-md-block d-lg-block">
<i class="fas fa-play fa-2x pr-3"></i>Start
</span>
</button>
</div>
<div class="col-sm-6 form-group text-center">
<button id="challenge-practice" type="submit" class="btn btn-md btn-outline-secondary w-100">
<span class="d-sm-block d-md-block d-lg-block">
<i class="fas fa-flask fa-2x pr-3"></i>Practice
</span>
</button>
</div>
</div>
<div class="row submit-row">
<div class="col-md-9 form-group">
<input id="module" type="hidden" value="">
<input id="challenge" type="hidden" value="">
<input id="challenge-id" type="hidden" value="">
<input id="challenge-input" class="challenge-input form-control" type="text" name="answer" placeholder="Flag">
</div>
<div class="col-md-3 form-group key-submit">
<button id="challenge-submit" type="submit" class="challenge-submit btn btn-md btn-outline-secondary float-right w-100 h-100">
Submit
</button>
</div>
</div>
<div class="row notification-row">
<div class="col-md-12">
<div id="result-notification" class="alert alert-dismissable text-center w-100" role="alert" style="display: none;">
<strong id="result-message"></strong>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="island_container" id="island_container">
<!-- Replace with your actual island PNG file -->
<img class="ocean" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Map Background With Ocean.JPG" alt="Background" id="baseImage">
<img class="island big-island-crack" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Big Island Crack.PNG" alt="lanai big-island-crack" id="big-island-crack">
<img class="island unsolved big-island-3 big-island-3-current" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Big Island Piece 3 L1.PNG" alt="lanai big-island-3" id="big-island-3-light">
<img class="island unsolved big-island-3 hide" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Big Island Piece 3.PNG" alt="lanai big-island-3" id="big-island-3-color">
<img class="island hide medium big-island-3" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Big Island Piece 3 L2.PNG" alt="big-island-3" id="big-island-3-medium">
<img class="island unsolved big-island-2-current big-island-2" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Big Island Piece 2 L1.PNG" alt="lanai big-island-2" id="big-island-2-light">
<img class="island unsolved hide big-island-2" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Big Island Piece 2.PNG" alt="lanai big-island-2" id="big-island-2-color">
<img class="island hide medium big-island-2" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Big Island Piece 2 L2.PNG" alt="big-island-2" id="big-island-2-medium">
<img class="island unsolved big-island-1-current big-island-1" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Big Island Piece 1 L1.PNG" alt="lanai big-island-1" id="big-island-1-light">
<img class="island unsolved hide big-island-1" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Big Island Piece 1.PNG" alt="lanai big-island-1" id="big-island-1-color">
<img class="island hide medium big-island-1" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Big Island Piece 1 L2.PNG" alt="big-island-1" id="big-island-1-medium">
<img class="island unsolved lanai-current lanai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Lanai L1.PNG" alt="lanai unsolved" id="lanai-light">
<img class="island unsolved hide lanai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Lanai.PNG" alt="lanai unsolved" id="lanai-color">
<img class="island hide medimum lanai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Lanai L2.PNG" alt="lanai medium" id="lanai-medium">
<img class="island unsolved kahoolawe-current kahoolawe" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Kahoolawe L1.PNG" alt="kahoolawe unsolved" id="kahoolawe-light">
<img class="island unsolved hide kahoolawe" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Kahoolawe.PNG" alt="kahoolawe unsolved" id="kahoolawe-color">
<img class="island hide medium kahoolawe" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Kahoolawe L2.PNG" alt="kahoolawe unsolved" id="kahoolawe-medium">
<img class="island hide medium kauai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Kauai L2.PNG" alt="kauai medium" id="kauai-medium">
<img class="island unsolved kauai-current kauai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Kauai L1.PNG" alt="kauai unsolved" id="kauai-light">
<img class="island unsolved hide kauai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Kauai.PNG" alt="kauai unsolved" id="kauai-color">
<img class="island unsolved maui-current maui" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Mauai L1.PNG" alt="maui unsolved" id="maui-light">
<img class="island unsolved hide maui" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Maui.PNG" alt="maui unsolved" id="maui-color">
<img class="island hide medium maui" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Maui L2.PNG" alt="maui unsolved" id="maui-medium">
<img class="island unsolved molokai-current molokai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Molokai L1.PNG" alt="molokai unsolved" id="molokai-light">
<img class="island unsolved hide molokai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Molokai.PNG" alt="molokai unsolved" id="molokai-color">
<img class="island hide medium molokai" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Molokai L2.PNG" alt="molokai unsolved" id="molokai-medium">
<img class="island unsolved niihau-current niihau" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Niihau L1.PNG" alt="niihau unsolved" id="niihau-light">
<img class="island unsolved hide niihau" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Niihau.PNG" alt="niihau unsolved" id="niihau-color">
<img class="island hide medium niihau" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Niihau L2.PNG" alt="niihau unsolved" id="niihau-medium">
<img class="island unsolved oahu-current oahu" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Oahu L1.PNG" alt="oahu unsolved" id="oahu-light">
<img class="island unsolved hide oahu" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Oahu.PNG" alt="oahu unsolved" id="oahu-color">
<img class="island hide medium oahu" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Oahu L2.PNG" alt="oahu unsolved" id="oahu-medium">
<img class="island unsolved canoe-current canoe" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/light/Canoe L1.png" alt="canoe unsolved" id="canoe-light">
<img class="island unsolved hide canoe" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/color/Canoe.PNG" alt="canoe unsolved" id="canoe-color">
<img class="island hide medium canoe" src="https://acsac-2024-ctf.s3.us-west-2.amazonaws.com/medium/Canoe L2.png" alt="canoe unsolved" id="canoe-medium">
<!-- SVG overlay for polygon -->
<svg class="overlay-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2160 1620">
<!-- Insert your polygon points here -->
<!-- Kauai -->
<polygon class="island kauai" points="336,261 335,263 336,270 330,275 328,279 329,281 328,283 331,286 331,287 345,300 346,300 362,312 365,312 370,315 377,316 381,320 383,320 387,322 397,332 397,333 403,338 405,337 409,339 412,342 414,342 420,338 421,339 423,337 430,336 433,339 433,340 436,341 438,343 440,343 441,342 445,342 446,341 447,342 452,340 453,341 454,340 457,340 461,337 463,338 470,333 473,333 476,331 476,329 473,327 474,326 476,326 477,327 479,326 481,327 485,317 489,312 489,308 487,306 487,302 486,301 486,293 487,292 487,290 492,285 492,283 493,282 493,272 495,267 497,265 497,263 496,262 498,261 494,262 493,261 493,257 494,256 498,258 500,258 501,257 501,250 502,249 502,246 498,237 492,233 488,229 487,224 484,220 481,220 480,219 482,218 480,217 477,217 476,216 477,215 475,212 467,208 463,208 462,209 461,208 451,212 449,212 448,211 447,212 440,209 435,209 431,211 425,217 423,217 418,212 415,211 411,207 410,207 409,205 402,205 401,206 400,205 395,209 395,210 392,213 391,216 388,218 388,219 384,223 378,227 376,227 373,230 371,230 370,231 365,232 362,234 360,234 357,239 357,241 353,249 350,252 346,253 339,258 341,261 340,262 337,262" fill="transparent" />
<!-- Big Island 1 -->
<polygon class="island big-island-1" points="1614,917 1612,917 1606,923 1605,932 1609,937 1610,935 1612,936 1609,940 1616,953 1622,981 1628,990 1627,1006 1631,1015 1626,1025 1627,1028 1617,1033 1613,1041 1607,1045 1606,1052 1597,1056 1596,1060 1593,1058 1592,1060 1586,1060 1586,1063 1584,1061 1574,1072 1574,1077 1571,1077 1568,1081 1560,1101 1561,1111 1566,1126 1575,1137 1583,1140 1586,1143 1592,1162 1594,1163 1593,1165 1595,1166 1594,1168 1597,1168 1595,1170 1599,1179 1600,1198 1603,1198 1603,1200 1607,1203 1605,1205 1609,1208 1608,1225 1612,1236 1612,1262 1615,1270 1615,1277 1609,1301 1609,1312 1607,1316 1608,1329 1612,1326 1615,1319 1620,1315 1622,1308 1639,1279 1640,1273 1650,1257 1654,1245 1658,1241 1663,1224 1666,1220 1666,1216 1672,1209 1678,1188 1688,1182 1705,1182 1709,1180 1718,1170 1723,1145 1723,1135 1719,1123 1719,1116 1713,1103 1711,1086 1705,1082 1704,1073 1700,1067 1700,1057 1692,1048 1690,1042 1686,1037 1684,1029 1676,1015 1673,984 1670,978 1658,968 1657,960 1645,949 1638,935" fill="transparent" />
<!-- Big Island 2 -->
<polygon class="island big-island-2" points="1983,1185 1949,1177 1939,1173 1938,1170 1934,1167 1913,1159 1899,1156 1891,1156 1875,1148 1867,1142 1834,1142 1819,1149 1814,1154 1798,1163 1774,1160 1762,1163 1745,1170 1726,1173 1720,1176 1707,1188 1701,1191 1697,1190 1687,1196 1682,1196 1675,1205 1671,1214 1669,1215 1667,1223 1667,1232 1664,1238 1662,1252 1648,1268 1648,1273 1646,1277 1627,1301 1615,1325 1610,1331 1610,1337 1612,1341 1617,1345 1621,1346 1631,1358 1640,1363 1641,1362 1649,1368 1657,1369 1667,1373 1680,1386 1689,1388 1688,1387 1691,1386 1692,1388 1702,1385 1712,1375 1716,1367 1717,1361 1727,1342 1738,1326 1748,1316 1762,1312 1778,1295 1793,1288 1795,1285 1797,1286 1801,1283 1812,1280 1815,1276 1833,1262 1839,1267 1848,1268 1884,1254 1888,1251 1889,1247 1892,1246 1893,1248 1897,1245 1906,1244 1917,1239 1921,1236 1921,1233 1923,1234 1932,1226 1945,1219 1963,1200 1978,1194 1982,1189" fill="transparent" />
<!-- Big Island 3 -->
<polygon class="island big-island-3" points="1612,917 1621,923 1626,924 1635,932 1661,967 1668,972 1670,978 1678,989 1681,1016 1686,1037 1696,1054 1712,1066 1719,1075 1723,1104 1724,1154 1729,1163 1737,1167 1743,1167 1751,1165 1757,1161 1769,1161 1778,1158 1806,1156 1828,1137 1839,1136 1861,1138 1863,1136 1887,1145 1898,1152 1918,1158 1931,1165 1938,1171 1944,1170 1958,1176 1980,1181 1976,1175 1974,1176 1970,1172 1972,1171 1975,1173 1975,1171 1972,1169 1969,1170 1965,1164 1962,1164 1961,1161 1954,1158 1947,1150 1934,1144 1925,1137 1923,1134 1924,1132 1925,1133 1922,1122 1921,1106 1919,1106 1920,1104 1911,1097 1903,1097 1899,1095 1892,1097 1887,1102 1884,1087 1887,1064 1886,1060 1870,1039 1852,1028 1833,1011 1813,999 1805,992 1766,972 1756,970 1742,964 1718,963 1708,957 1706,958 1704,955 1696,953 1685,946 1675,934 1671,934 1671,932 1670,933 1668,930 1670,929 1647,912 1638,909 1626,911 1623,910 1616,913" fill="transparent"/>
<!-- Kahoolawe -->
<polygon class="island kahoolawe" points="1413,822 1412,821 1412,819 1411,818 1411,817 1410,817 1409,816 1409,815 1407,813 1405,813 1404,812 1404,811 1405,810 1404,809 1405,808 1405,807 1406,806 1406,800 1405,799 1405,798 1402,795 1403,794 1402,793 1401,793 1399,791 1398,791 1397,790 1396,790 1393,787 1388,787 1387,788 1384,788 1383,789 1381,789 1378,792 1377,792 1375,794 1375,795 1373,797 1373,798 1372,799 1372,800 1371,801 1371,802 1370,803 1369,803 1368,804 1365,804 1364,805 1363,805 1358,810 1357,810 1356,811 1356,812 1355,813 1354,812 1353,813 1352,813 1351,814 1351,815 1350,816 1350,818 1352,820 1352,821 1353,822 1353,823 1354,824 1355,824 1359,828 1360,828 1361,829 1362,829 1363,830 1371,830 1372,831 1373,831 1374,832 1374,830 1375,829 1376,829 1377,830 1377,831 1383,831 1384,830 1385,830 1386,829 1388,829 1389,828 1390,829 1391,828 1392,829 1393,828 1394,828 1395,827 1396,828 1397,827 1398,828 1399,827 1400,828 1401,827 1402,828 1406,828 1407,829 1408,828 1409,828 1412,825 1412,823" fill="transparent" />
<!-- Lanai -->
<polygon class="island lanai" points="1239,674 1238,675 1237,675 1235,677 1234,677 1233,678 1232,678 1232,679 1231,680 1230,680 1231,681 1228,683 1228,686 1227,687 1227,690 1228,691 1228,692 1232,696 1233,696 1236,699 1237,699 1239,701 1240,701 1241,702 1242,702 1243,703 1244,703 1245,704 1246,704 1248,706 1248,707 1249,708 1249,709 1250,710 1250,711 1252,714 1252,725 1253,726 1253,731 1254,732 1254,736 1255,737 1255,739 1257,742 1257,746 1259,748 1260,748 1261,749 1263,749 1264,750 1266,750 1267,751 1271,751 1272,750 1277,750 1278,749 1282,749 1283,748 1285,748 1288,746 1290,746 1293,744 1296,744 1305,735 1306,735 1307,734 1308,734 1312,728 1313,728 1314,727 1316,727 1317,726 1317,725 1319,722 1319,714 1318,713 1318,712 1317,711 1317,710 1316,709 1314,709 1312,707 1312,706 1311,705 1311,704 1312,703 1313,704 1314,703 1313,702 1313,701 1312,700 1311,701 1310,700 1310,698 1302,690 1300,690 1299,689 1299,687 1297,685 1296,685 1294,683 1293,683 1292,682 1291,682 1290,681 1289,681 1288,680 1288,679 1283,674 1282,674 1281,673 1279,673 1278,672 1274,672 1273,671 1271,671 1270,672 1264,672 1263,673 1242,673 1241,674" fill="transparent" />
<!-- Maui -->
<polygon class="island maui" points="1353,656 1353,658 1357,661 1355,663 1352,660 1353,662 1352,663 1351,662 1349,667 1349,674 1351,677 1350,679 1354,686 1355,691 1361,702 1366,709 1377,718 1391,726 1401,730 1406,734 1412,735 1423,730 1425,731 1425,744 1427,748 1426,753 1428,761 1428,783 1429,786 1434,792 1438,795 1439,794 1440,796 1445,799 1447,798 1449,801 1464,804 1467,803 1470,798 1473,801 1482,798 1483,799 1493,797 1494,798 1498,796 1501,796 1503,794 1504,795 1512,790 1509,789 1507,787 1508,786 1516,784 1520,785 1521,787 1524,785 1525,786 1528,785 1537,787 1541,785 1552,783 1562,777 1570,769 1580,762 1587,755 1593,745 1593,742 1589,741 1591,739 1590,736 1587,737 1585,735 1586,733 1577,724 1565,715 1559,712 1546,710 1542,702 1539,699 1537,700 1534,698 1537,697 1535,697 1533,695 1531,696 1530,694 1525,694 1522,691 1520,686 1513,679 1513,677 1510,676 1507,673 1500,672 1494,668 1490,667 1489,669 1487,667 1478,667 1468,671 1463,676 1457,678 1455,677 1454,678 1444,677 1438,681 1427,684 1424,677 1417,671 1414,663 1411,661 1412,660 1405,648 1392,638 1380,634 1370,637 1370,642 1369,643 1367,642 1359,647 1358,650 1355,652" fill="transparent" />
<!-- Molokai -->
<polygon class="island molokai" points="1148,604 1153,611 1152,612 1153,616 1155,619 1160,623 1162,623 1163,622 1164,623 1166,623 1167,622 1168,623 1173,623 1174,622 1175,623 1177,623 1178,622 1192,622 1193,621 1194,622 1195,621 1199,621 1200,620 1210,620 1211,619 1216,619 1215,618 1216,617 1218,618 1222,618 1224,616 1226,617 1227,616 1232,616 1234,615 1236,617 1238,617 1239,618 1244,618 1245,619 1244,620 1246,621 1250,621 1252,623 1258,625 1257,624 1258,623 1264,622 1265,623 1270,624 1274,628 1275,626 1277,628 1276,630 1278,632 1287,632 1293,636 1294,635 1296,637 1303,637 1304,638 1305,637 1307,637 1309,635 1311,636 1313,634 1315,634 1321,628 1322,628 1322,627 1324,626 1326,623 1332,619 1332,618 1336,614 1335,613 1336,611 1339,611 1347,599 1347,588 1343,585 1342,586 1341,585 1339,586 1338,585 1336,585 1335,586 1330,586 1329,587 1327,586 1316,586 1315,585 1314,586 1311,586 1310,585 1309,586 1311,587 1308,590 1306,589 1306,586 1302,587 1304,587 1305,588 1303,589 1302,591 1300,588 1299,589 1295,589 1294,590 1293,589 1292,590 1287,590 1285,588 1280,586 1272,586 1270,585 1266,581 1267,579 1267,576 1266,576 1262,572 1262,571 1259,569 1256,570 1252,575 1252,578 1253,579 1251,581 1245,582 1241,580 1237,580 1236,581 1229,578 1221,577 1220,576 1215,576 1214,575 1213,576 1212,575 1202,575 1200,574 1199,575 1194,576 1192,573 1189,573 1182,569 1180,569 1176,566 1176,568 1175,569 1173,568 1172,566 1171,566 1170,567 1165,567 1162,569 1160,569 1160,572 1163,578 1165,580 1159,588 1159,591 1157,592 1156,591 1157,590 1148,600" fill="transparent" />
<!-- Niihau -->
<polygon class="island niihau" points="245,291 244,291 243,290 242,290 241,289 240,290 237,290 236,291 231,291 230,292 228,292 227,293 226,293 224,295 223,295 223,297 222,298 222,299 221,300 221,301 222,302 222,304 221,305 221,307 219,309 218,309 215,312 214,312 211,315 210,315 207,318 206,318 205,319 203,319 202,320 201,320 200,321 199,321 197,323 196,323 190,329 190,331 189,332 189,336 188,337 188,338 189,339 188,340 189,341 188,342 189,343 189,344 188,345 189,346 188,347 188,349 186,351 186,352 184,354 184,355 183,356 183,365 184,366 184,367 188,371 189,371 190,372 191,372 193,374 194,374 195,375 203,375 205,373 206,373 211,368 211,367 212,366 212,365 213,364 213,362 215,360 215,357 216,356 216,355 217,354 217,352 218,351 218,349 219,348 219,346 220,345 221,345 222,344 226,344 227,343 228,344 230,344 232,342 235,342 237,340 239,340 241,338 241,337 242,336 243,336 244,335 244,334 243,335 242,334 242,333 243,332 244,332 244,329 243,328 243,322 244,321 244,319 245,318 245,316 246,315 246,314 248,312 248,311 250,309 250,308 253,305 253,301 252,300 252,299 250,297 250,296 247,293 246,293 245,292" fill="transparent" />
<!-- Oahu -->
<polygon class="island oahu" points="830,438 830,440 831,439 832,440 831,442 833,446 837,449 838,453 848,459 849,467 846,475 846,479 852,487 856,490 862,492 860,494 864,499 863,500 864,507 869,513 874,515 877,518 877,525 879,531 892,545 896,547 900,547 901,548 904,547 905,548 913,546 915,547 922,546 924,545 927,539 928,541 930,540 931,542 926,545 928,544 930,545 934,543 935,544 936,543 941,543 945,545 950,543 951,544 954,543 958,540 962,540 968,551 975,554 979,558 983,560 984,559 987,560 988,559 989,560 990,559 991,560 992,559 993,560 994,559 995,560 1000,560 1001,559 1002,560 1005,558 1004,557 1005,554 1007,557 1014,553 1015,554 1017,553 1023,560 1029,555 1031,555 1039,545 1039,538 1037,533 1034,530 1028,528 1022,521 1023,520 1023,515 1021,510 1019,511 1018,508 1015,506 1017,504 1017,500 1014,494 1013,487 1010,484 1006,483 999,484 998,487 1002,496 996,501 988,495 976,482 980,473 977,465 978,460 974,449 970,447 967,440 962,436 960,432 960,422 957,416 947,406 942,403 935,395 930,393 929,394 925,394 913,404 910,405 907,409 907,412 902,422 889,434 890,436 889,438 885,435 886,434 884,434 871,441 870,440 863,442 854,440 853,441 847,439 833,439 832,440" fill="transparent" />
<!-- Canoe -->
<polygon class="island canoe" points="493,1369 490,1369 490,1371 478,1382 466,1390 465,1389 465,1381 463,1372 458,1358 455,1353 467,1338 471,1322 477,1308 477,1305 472,1294 469,1297 466,1305 461,1311 439,1323 433,1325 427,1320 425,1320 423,1322 423,1325 425,1327 424,1328 402,1335 399,1332 398,1333 397,1332 397,1329 397,1333 395,1336 393,1335 395,1332 392,1335 390,1332 389,1335 388,1333 387,1334 385,1333 384,1334 382,1332 379,1333 378,1330 377,1333 376,1332 373,1334 371,1333 370,1335 368,1333 367,1337 365,1338 364,1337 363,1339 362,1337 361,1338 360,1337 361,1339 358,1341 357,1347 356,1348 355,1346 356,1348 355,1350 351,1350 348,1347 345,1347 344,1348 345,1353 344,1354 337,1356 332,1359 320,1362 317,1364 305,1365 296,1361 294,1358 283,1353 287,1369 292,1371 305,1383 319,1389 331,1390 332,1391 347,1391 348,1392 353,1391 354,1394 355,1392 356,1393 356,1397 358,1398 361,1397 362,1398 360,1400 362,1402 362,1407 363,1402 366,1403 366,1406 369,1404 371,1406 373,1404 375,1406 377,1405 379,1411 379,1422 378,1423 354,1426 367,1429 383,1429 387,1427 398,1425 434,1413 450,1406 458,1401 465,1402 465,1398 467,1396 478,1390 484,1385 489,1378" fill="transparent" />
</svg>
</div>
</div>
<script>
const islands = ['big-island-1', 'big-island-2', 'big-island-3', 'kahoolawe', 'kauai', 'lanai', 'maui', 'molokai', 'niihau', 'oahu', 'canoe'];
const baseImage = document.getElementById('baseImage');
const container = document.getElementById('island_container');
var zoomedIsland = null;
var challenge_id_to_name = {};
const islandChallenge = {
"big-island-1": "tickeyhellman",
"big-island-2": "temple-of-soul",
"big-island-3": "slus-00000",
"kahoolawe": "juniorust",
"kauai": "walk-in-the-park",
"lanai": "the-morris-worm",
"maui": "orange",
"molokai": "mechanical-arm",
"niihau": "stutterstep",
"oahu": "pwncrp",
"canoe": "waa",
};
const challenge_points = {
"tickeyhellman": 460,
"temple-of-soul": 500,
"slus-00000": 475,
"juniorust": 475,
"walk-in-the-park": 460,
"the-morris-worm": 489,
"orange": 500,
"mechanical-arm": 500,
"stutterstep": 489,
"pwncrp": 500,
"waa": 296,
};
const challenge_solves = {
"tickeyhellman": 4,
"temple-of-soul": 0,
"slus-00000": 3,
"juniorust": 3,
"walk-in-the-park": 4,
"the-morris-worm": 2,
"orange": 1,
"mechanical-arm": 1,
"stutterstep": 2,
"pwncrp": 0,
"waa": 18,
};
var challengeIsland = {
};
Object.keys(islandChallenge).forEach(function(challenge_name) {
challengeIsland[islandChallenge[challenge_name]] = challenge_name;
});
var challenges = {};
function zoomOut() {
if (zoomedIsland !== null)
{
container.style.transform = 'none';
$(`#current-challenge`).addClass("hide");
zoomedIsland = null;
}
}
islands.forEach(function(island) {
const polygon = document.querySelector(`.overlay-svg .${island}`);
$(polygon).hover(
function() {
$(`#${island}-medium`).toggleClass("hide");
$(`.${island}-current`).toggleClass("hide");
}
);
function addChallenge(island) {
const challengeName = islandChallenge[island];
const challenge = challenges[challengeName];
const points = challenge_points[challenge.id] || 500;
$('#current-challenge .title').text(challenge.name);
$('#current-challenge .points').text(`Worth ${points} points in CTF`);
$('#current-challenge .num-solves').text(`${challenge_solves[challenge.id]} solves during the CTF`);
$('#current-challenge .pwn-solves').text(`${challenge.solves}`);
$('#current-challenge .challenge-description').html(challenge.description);
$('#current-challenge #module').val(challenge.module);
$('#current-challenge #challenge').val(challenge.id);
$('#current-challenge #challenge-id').val(challenge.challenge_id);
}
// Click logic for zoom
polygon.addEventListener('click', function() {
if (zoomedIsland !== null)
{
zoomOut();
}
else
{
// Parse polygon points
const pointsAttr = polygon.getAttribute('points');
const points = pointsAttr.trim().split(/\s+/).map(p => {
const [x, y] = p.split(',').map(Number);
return {x, y};
});
// Compute centroid (or bounding box center)
let sumX = 0, sumY = 0;
points.forEach(pt => {
sumX += pt.x;
sumY += pt.y;
});
const zoomFactor = 3;
const centroidX = sumX / points.length;
const centroidY = sumY / points.length;
const displayedWidth = baseImage.clientWidth;
const displayedHeight = baseImage.clientHeight;
const originalWidth = baseImage.naturalWidth;
const originalHeight = baseImage.naturalHeight;
const xScale = displayedWidth / originalWidth;
const yScale = displayedHeight / originalHeight;
const displayedCentroidX = centroidX * xScale;
const displayedCentroidY = centroidY * yScale;
const translationX = (displayedCentroidX * zoomFactor) - (window.innerWidth / 2);
const translationY = (displayedCentroidY * zoomFactor) - (window.innerHeight / 2);
const finalTranslateX = -translationX;
const finalTranslateY = -translationY;
container.style.transform = `translate(${finalTranslateX}px, ${finalTranslateY}px) scale(${zoomFactor})`;
addChallenge(island);
$(`#current-challenge`).removeClass("hide");
zoomedIsland = island;
}
});
});
// Listen for Escape key to zoom out if currently zoomed in
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
zoomOut();
}
});
$( document ).ready(function () {
$(".accordion-item").each(function () {
if (this.id == "challenges") return;
const chall = $(this);
const challenge = {
module: chall.find("#module").val(),
solves: chall.find(".total-solves").text(),
description: chall.find(".accordion-item-body .embed-responsive").html(),
id: chall.find("#challenge").val(),
challenge_id: chall.find("#challenge-id").val(),
name: chall.find(".challenge-name").text(),
solved: chall.find(".challenge-unsolved").length == 0,
};
if (challenge.solved)
{
const island = challengeIsland[challenge.id];
$(`#${island}-light`).removeClass(`${island}-current`);
$(`#${island}-color`).addClass(`${island}-current`);
$(`#${island}-light`).addClass("hide");
$(`#${island}-color`).removeClass("hide");
}
challenges[challenge.id] = challenge;
});
});
function onClassChange(element, callback) {
// Ensure the element is a DOM node
const target = $(element)[0];
// Create a MutationObserver instance
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
callback(mutation.target); // Call the callback with the updated element
}
}
});
// Configure the observer to listen for attribute changes
observer.observe(target, { attributes: true });
// Return the observer so it can be disconnected later if needed
return observer;
}
onClassChange('#current-challenge #challenge-input', (element) => {
var island = zoomedIsland;
if (zoomedIsland === null)
{
return;
}
if ($(element).hasClass("correct"))
{
$(`#${island}-light`).removeClass(`${island}-current`);
$(`#${island}-color`).addClass(`${island}-current`);
$(`#${island}-light`).addClass("hide");
$(`#${island}-color`).removeClass("hide");
}
});
</script>
#### CTF created by:
- Adam Doupé, Arizona State University, CTF Ali'i
- Alexandros Kapravelos, North Carolina State University
- Antonio Bianchi, Purdue University
- Conner Nelson, Arizona State University
- Davide Maiorca, Università degli Studi di Cagliari
- Davit Benashvili, Arizona State University
- Giorgi Arsenadze, Arizona State University
- Jackie LeFevers, Arizona State University
- William Robertson, Northeastern University
- Yan Shoshitaishvili, Arizona State University
- Zion Leonahenahe Basque, Arizona State University
challenges:
- id: pwncrp
name: pwncrp
required: false
- id: slus-00000
name: slus-00000
image: prathamgupta36/challenge-legacy:acsac
description: |
## Hilo
- Category: `game-hacking`, `PS1`
- Author: `DaveZero`
Have you ever seen the Hilo Harbor? With all those shipping containers, it's like they're playing Tetris...
I wonder what happens when I manage to clear 99999 lines...
(Game flag is entirely in capitals)
The games is in `/games/slus00000.elf`.
Use `/console/run` to run the game and `/challenge/solve` to submit game flag for real flag.
- id: walk-in-the-park
name: walk-in-the-park
image: adamdoupe/walk-in-the-park
- id: mechanical-arm
name: mechanical-arm
image: adamdoupe/arm-rop
- id: tickeyhellman
name: tickeyhellman
image: prathamgupta36/challenge-legacy:acsac
- id: juniorust
name: juniorust
image: adamdoupe/cowsay
- id: the-morris-worm
name: the-morris-worm
image: adamdoupe/the-morris-worm
- id: temple-of-soul
name: temple-of-soul
image: adamdoupe/temple-of-soul
description: |
## Puna
- Category: `rev`, `forensics`, `ZealOS`
- Author: `DaveZero`
Puna, of the Big Island, is a place of spirituality, cut off from the conveniences of life. In many ways, it is a holy place...
I was walking around a beach in Puna when I suddenly had a vision.
I was playing a game in a temple called the Temple of Soul. It was against another soul: I think it is a legendary soul from centuries ago, but I can't remember who he was.
However, I remember some of his words:
"The password is the sequence of ordered moves, which indicate the starting and destination positions.
For example, if you see
Move 1: A1-A2
Move 2: B1-B2
The password is A1A2B1B2 (in capitals)"
Will I be able to remember the temple of souls?
Notes:
1. At least one move is corrupted, and it is intended
2. Be creative and use your reasoning skills!
The challenge is to reverse what's in `/tmp/temple.dump`.
You can use `/challenge/run` to boot a fresh ZealOS.
Once you have the password, run `/challenge/solve` to get the flag!
- id: waa
name: Waʻa
image: prathamgupta36/challenge-legacy:acsac
- id: stutterstep
name: stutterstep
- id: orange
name: orange
privileged: true