
I denne artikel løser vi opgave 25 fra hjemmesiden .
Organisatorisk informationSpecielt til dem, der ønsker at lære noget nyt og udvikle sig inden for informations- og computersikkerhed, vil jeg skrive og fortælle om følgende kategorier:
- PWN;
- kryptografi (Crypto);
- netværksteknologier (Network);
- reverse engineering (Reverse Engineering);
- steganografi (Stegano);
- søgning og udnyttelse af web-sårbarheder.
Derudover vil jeg dele min erfaring inden for computerkriminalistik, malware-analyse og firmware, angreb på trådløse netværk og lokale netværk, udførelse af pentests og udarbejdelse af exploits.
For at du kan få oplysninger om nye artikler, software og anden information, har jeg oprettet og inden for IuKBS. Dine personlige anmodninger, spørgsmål, forslag og anbefalinger .
Al information præsenteres udelukkende med uddannelsesmæssige formål. Forfatteren af dette dokument påtager sig intet ansvar for eventuelle skader, der måtte opstå som følge af anvendelsen af de viden og metoder, der opnås ved at studere dette dokument.
Løsningen på opgaven otp
Vi fortsætter med anden sektion. Jeg vil sige med det samme, at den er sværere end den første, men denne gang giver de os ikke kildekoden til programmet. Glem ikke diskussionen her (https://t.me/RalfHackerPublicChat) og her (https://t.me/RalfHackerChannel). Lad os komme i gang.
Vi klikker på ikonet mærket otp. Vi får en adresse og en port til at forbinde.

Vi forbinder og undersøger serveren.

Flaget, som vi ikke kan læse, programmet og dets kildekode. Lad os se på kildekoden.

Vi analyserer den. Programmet modtager et password som argument.

Derefter gemmes 16 tilfældige bytes i variablen otp.

I mappen tmp oprettes en fil med et tilfældigt navn (de første 8 bytes af otp) og der skrives 8 tilfældige bytes (de sidste 8 bytes af otp) ind i den.

Af en eller anden grund læses værdien fra den oprettede fil og sammenlignes med det indtastede password.

Her findes sårbarheden. Den består i den midlertidige lagring af det genererede nummer i filen. Vi kan begrænse filens størrelse, for eksempel til 0, så når der skrives og læses med passwordet, vil der blive sammenlignet 0. Dette kan gøres sådan.
# ulimit -f 0 ![]()
Lad os nu køre programmet.
![]()
Vi får en fejl. Ikke noget problem, det kan håndteres med samme python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')" ![]()
Vi får flaget og nemme 100 point. Og vi fortsætter: i næste artikel vil vi berøre Web. Du kan slutte dig til os i .
Kilde: habr.com
