
In dit artikel lossen we de 25e opdracht van de site op .
Organisatie-informatieSpeciaal voor degenen die meer willen leren en zich willen ontwikkelen in verschillende gebieden van informatie- en computerbeveiliging, zal ik schrijven en vertellen over de volgende categorieën:
- PWN;
- cryptografie (Crypto);
- netwerk technologieën (Network);
- reverse engineering (Reverse Engineering);
- steganografie (Stegano);
- het zoeken naar en exploiteren van WEB-kwetsbaarheden.
Daarnaast zal ik mijn ervaring delen in computerforensisch onderzoek, malware-analyse en firmware, aanvallen op draadloze netwerken en lokale netwerken, het uitvoeren van pentests en het schrijven van exploits.
Om je op de hoogte te houden van nieuwe artikelen, software en andere informatie, heb ik een en op het gebied van Informatiebeveiliging en Cyberbeveiliging. Ook zal ik persoonlijke verzoeken, vragen, voorstellen en aanbevelingen .
Alle informatie is uitsluitend bedoeld voor educatieve doeleinden. De auteur van dit document aanvaardt geen enkele verantwoordelijkheid voor schade die aan iemand wordt toegebracht als gevolg van het gebruik van kennis en methoden die zijn verkregen door het bestuderen van dit document.
Oplossing van de opdracht otp
We gaan verder met het tweede deel. Ik zal meteen zeggen dat het moeilijker is dan de eerste, maar deze keer wordt de broncode van het programma verstrekt. Vergeet de discussie hier niet (https://t.me/RalfHackerPublicChat) en hier (https://t.me/RalfHackerChannel). Laten we beginnen.
Klik op het pictogram met het label otp. We krijgen een adres en poort voor de verbinding.

We verbinden en kijken rond op de server.

De vlag die we niet kunnen lezen, het programma en de broncode ervan. Laten we de broncode bekijken.

We analyseren het. Het programma accepteert het wachtwoord als argument.

Vervolgens worden er 16 willekeurige bytes opgeslagen in de variable otp.

In de map tmp wordt een bestand met een willekeurige naam (de eerste 8 bytes van otp) aangemaakt en daarin worden 8 willekeurige bytes (de laatste 8 bytes van otp) geschreven.

Om een of andere reden wordt de waarde van het aangemaakte bestand gelezen en vergeleken met het ingevoerde wachtwoord.

Hier is de kwetsbaarheid. Het zit in de tussenliggende opslag van het gegenereerde getal in een bestand. We kunnen de grootte van het bestand beperken, bijvoorbeeld tot 0, zodat met het schrijven en lezen met het wachtwoord 0 zal worden vergeleken. Dit kan op de volgende manier worden gedaan.
# ulimit -f 0 ![]()
Laten we nu het programma starten.
![]()
We krijgen een foutmelding. Geen probleem, we kunnen deze oplossen met dezelfde Python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')" ![]()
We krijgen de vlag en onze gemakkelijke 100 punten. En we gaan verder: in het volgende artikel bespreken we Web. U kunt zich bij ons voegen in .
Bron: habr.com
