Miałem chwilę czasu więc napisze rozwiazanie bo w sumie był tam lekko nietrywialny element ;)
Zaczynamy do tego co podałem wyżej, tzn:
-
Analizujemy skrypty includowane na stronie
https://www.betadistrict.com/challenge.js + https://www.betadistrict.com/System32/drivers/etc/hosts/thisIsWhyWeUseMacs/seriouslyNothingToSeeHere/uninteresting.js
-
Z tego dochodzimy do nutek które należy wpisać:
Z tego dochodzimy do https://www.betadistrict.com/music.txt
Co po zdekodowaniu base64 daje ["F","D","Bb","F","G#","Bb","D","D#","D#","Bb","C#","C","G"]
To jest kod który mamy "zagrać" / wprowadzić na stronie.
W skrypcie challenge mozemy znaleźć sobie też availableNotes=["C","C#","D","D#","E","F","F#","G","G#","A","Bb"]
czyli nutki w kolejności :)
-
Mamy też kod (z pliku https://www.betadistrict.com/System32/drivers/etc/hosts/thisIsWhyWeUseMacs/seriouslyNothingToSeeHere/uninteresting.js )
var randomOctaves = b3TaD.randomOctaves();
$(window).keyup(function(event) {
if (event.which === 32) {
$.get(b3TaD.iHaveNoIdeaWhatIAmDoing, function(data) {
var address = JSON.parse(atob(data));
var addressScore = b3TaD.scoreAddress(address, b3TaD.availableNotes, randomOctaves);
$('audio')[0].pause();
b3TaD.play(addressScore, { type: 'triangle', release: 700 });
setTimeout(function() { $('audio')[0].play() }, 8000);
});
} else if ((event.which >= 48 && event.which <= 57) || event.which === 110) {
var key = event.which === 110 ? 10 : event.which - 48;
tones.play(b3TaD.availableNotes[key], randomOctaves[key]);
b3TaD.display(key);
}
});
Interesuje nas ten "else". Widać że przyjmuje znaki 48-57 (czyli ascii 0-9) ale także znak 110! Tu pojawia się nietrywialny element, bo ten event.which
to nie są kody ascii tylko https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx czyli 110 to jest kropka na klawiaturze numerycznej. Widzimy że ta kropka mapuje sie do 10
, a pozostałe cyferki do liczb 0-9.
Mamy więc:
availableNotes=["C","C#","D","D#","E","F","F#","G","G#","A","Bb"]
secret = ["F","D","Bb","F","G#","Bb","D","D#","D#","Bb","C#","C","G"]
i wypiszmy sobie co należy wprowadzić:
[availableNotes.index(c) for c in x]
co daje nam: [5, 2, 10, 5, 8, 10, 2, 3, 3, 10, 1, 0, 7]
Wprowadzamy to, pamietając że zamiast 10 jest .
i wychodzi nam 52.58.233.107
co wygląda ewidentnie jak adres IP! Wchodzimy sobie przeglądarką pod ten adres i dostajemy tam stronę z jakimś iframe pointującym do https://www.betadistrict.com/kxj7rv907esxjflv1vvc.html
na którym to jest redirect do https://www.betadistrict.com/form.html
co kończy zabawę.