Odefinerat beteende

Kategori

Exploatering

Beskrivning

Vårt miniräknarprogram verkar fungera bra (det är i early access just nu), men något märkligt händer när vi försöker få det att gå fortare…

Använd kommandot make för att kompilera och köra programmet. make fast kör det med optimiseringar aktiverade. Programmet på servern är den optimiserade varianten och har byggts med GCC 12.2 och flaggan -O2. https://godbolt.org är användbart för att se hur olika flaggor påverkar det kompilerade programmet.

Lösning

Tittar man i källkoden kan man notera att det krävs att man skapar ett fel för att flaggan ska printas ut i hex-format.

För att trigga ett fel kan man köra programmet med input t.ex: 4294967295

Skriv in ett tal X för att räkna ut hur mycket 100 / X blir.
OBS - vår patenterade undvik-division-med-0-algoritm kräver att du matar in talet under det du vill dividera med.
Till exempel, om du vill dela med 5 så skriver du in 4 istället:
4294967295
Kontrollerar det inmatade talet, programmet kommer att fastna för evigt om talet är för stort...
Ser bra ut, 4294967295 är inte större än 2000000000.
100 delat med 0 är 
****** Miniräknaren har stött på ett problem och måste avslutas. Felkod: 0x63726174656374667b6f7074696d616c745f6f7074696d657261745f6d656e5f696e74655f6176616e63657261747d ******

Avkodar man sedan felkoden från hex till en sträng får man flaggan.

echo "63726174656374667b6f7074696d616c745f6f7074696d657261745f6d656e5f696e74655f6176616e63657261747d" | xxd -r -p

cratectf{optimalt_optimerat_men_inte_avancerat}

n00bz

Home of the n00bz CTF team.


By n00bz, 2022-11-28