
In questo articolo risolveremo il 25° compito del sito .
Informazioni organizzativeSpecialmente per coloro che vogliono apprendere qualcosa di nuovo e crescere in qualsiasi settore della sicurezza informatica e informativa, scriverò e parlerò delle seguenti categorie:
- PWN;
- criptografia (Crypto);
- tecnologie di rete (Network);
- reverse (Reverse Engineering);
- steganografia (Stegano);
- ricerca e sfruttamento di vulnerabilità WEB.
In aggiunta a questo, condividerò la mia esperienza in informatica forense, analisi di malware e firmware, attacchi a reti wireless e LAN, conduzione di pentest e scrittura di exploit.
Affinché possiate rimanere aggiornati su nuovi articoli, software e altre informazioni, ho creato e nel campo della sicurezza informatica. Inoltre, le vostre richieste personali, domande, proposte e raccomandazioni .
Tutte le informazioni sono presentate esclusivamente a scopi educativi. L'autore di questo documento non si assume alcuna responsabilità per eventuali danni causati a chiunque in seguito all'uso delle conoscenze e dei metodi acquisiti tramite questo documento.
Soluzione per il compito otp
Continuiamo con la seconda sezione. Dico subito che è più difficile della prima, ma questa volta ci danno il codice sorgente del programma. Non dimentichiamo di discutere qui (https://t.me/RalfHackerPublicChat) e qui (https://t.me/RalfHackerChannel). Iniziamo.
Clicchiamo sull'icona con la scritta otp. Ci viene dato un indirizzo e una porta per connetterci.

Ci connettiamo e ci guardiamo intorno sul server.

La flag, che non possiamo leggere, è il programma e il suo codice sorgente. Diamo un'occhiata al sorgente.

Analizziamo il codice. Il programma accetta come argomento una password.

Successivamente, nella variabile otp vengono salvati 16 byte casuali.

Nella cartella tmp viene creato un file con un nome casuale (i primi 8 byte di otp) e in esso vengono scritti 8 byte casuali (gli ultimi 8 byte di otp).

Per qualche motivo, dal file creato viene letto un valore e confrontato con la password inserita.

Qui si trova la vulnerabilità. Essa consiste nel salvataggio intermedio del numero generato in un file. Possiamo limitare la dimensione del file, ad esempio a 0, quindi durante la scrittura e la lettura con la password si confronterà 0. Possiamo farlo in questo modo.
# ulimit -f 0 ![]()
Ora avviamo il programma.
![]()
Riceviamo un errore. Non è un problema, può essere gestito utilizzando lo stesso Python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('.\/otp 0')" ![]()
Otteniamo la flag e i nostri facili 100 punti. E continuiamo: nel prossimo articolo parleremo di Web. Puoi unirti a noi in .
Fonte: habr.com
