lunedì 26 marzo 2012

NdH 2k11 crypto100 writeup

La crittoanalisi mi ha sempre affascinato, fin dai primi codici creati che erano semplici sostituzioni di lettere(tipo ROT13) oppure sostituendo lettere secondo chiavi di cifratura... Comunque per ogni persona che creava un codice, ce n'era sempre un altro pronto a violarne il codice... Famoso fu Enigma, una macchina usata per cifrare i messaggi durante la seconda guerra mondiale...

Visto che si è appena svolto il CTF versione 2k12, ho deciso di cimentarmi prima con il 2k11 per avere un po' un'idea di come il CTF è organizzato... E sono partito proprio dalla sezione crittografia proprio perchè mi piace molto...

Prendendo da qui il file relativo al crypto100 si ottiene un file di testo cifrato... Lo scopo è decifrarlo trovando la chiave di cifratura relativa... Il testo è abbastanza lungo, composto da parole di diversa lunghezza, e questo è forse il punto dolente della cifratura Vigenere... Infatti, avendo un testo lungo, analizzandolo si possono trovare delle ricorrenze a determinate distanze... Da queste ricorrenze si può risalire alla lunghezza della chiave di cifratura... Notizia importante perchè è utile durante la ricerca tramite bruteforce della chiave di cifratura...

Di tools che svolgono in modo automatico questa operazione io non ne ho trovati... JCryptool è un tool che non ho ben capito perchè non trovavo la chiave corretta... La lunghezza viene trovata correttamente, cioè 18 o 36(probabilmente perchè si tratta di una ripetizione)... Quindi ho cercato su google(lo strumento più potente per i CTF) ed ho trovato un codice già scritto in python per i cifrari di Cesare e Vigenere...

Si chiama pygenere ma in questa pagina viene posto veramente male... Ringraziando ovviamente chi ha creato tutte le classi facilmente utilizzabili, io l'ho ripreso ed adattato per ottenere ciò che cercavo... Questo codice python è fatto veramente bene, ha tutti le percentuali per le diverse lingue, che è spesso importante nella cifratura con alfabeto modificato:


Beh il codice è molto lungo, ma le ultime 3 righe specificano bene come si procede... Si usano le classi già pronte per operare tutto il processo di crittoanalisi rapidissimamente... Ed otteniamo chiave di cifratura e testo(credo sia latino, non so, inglese non lo è)... Da qui si nota anche la potenza di python... E' impensabile scrivere questo codice in C, almeno per me... Se su python sono 350 righe, in C sarebbero almeno 1000...

ps:credo di aver rispettato le condizioni di licenza del codice python pygenere reindirizzando al sito in questione...

ps2:per la soluzione di questa prima fase trovate tante guide con google, guardate quella che più vi piace e seguitela per imparare nuove cose... Secondo me si impara più da un tutorial che da un libro di testo di cifrari... Almeno per scopi ludici...

lunedì 19 marzo 2012

Semtex level5 writeup

Questo livello è stato veramente difficile per me... Ho iniziato il livello con un errore di comprensione di questo testo:

Random Networking
Make 10 connections to port 24027 from different IP's. On each connection you will receive a string of 10 ASCII characters. XOR this string with the Semtex5 password, character by character. Then send back the 10 characters followed by another string of exactly 10 characters which identifies you (can be anything within A-Z, a-z, 0-9). The first 10 characters that you send, are different on every connection, the last 10 have to be the same. If you do not send the correct string back within 5 seconds you are disconnected. Once connected with at least 10 different IP's You will receive the password on one connection, chosen randomly.

Io pensavo all'inizio di dover fare 10 connessioni in 2 minuti distinte fra loro ma non contemporaneamente... In più non avevo capito dove potevo ricevere la password... I miei primi insuccessi si basavano sull'uso di scapy, in modo da spoofare l'ip... Magari funzionava pure l'ip spoofing, ma ovviamente non ricevo nessuna risposta in quanto l'ip non era il mio... Quindi niente da fare su quella strada... Così mi sono rivolto al sempre fedele python, che riesce sempre a darmi una mano... Non ho inserito la key per XOR, che è la password del livello 5, io ce l'ho segnata, dovreste averla anche voi... Questo è il codice dello script:

Il codice è un po' lunghetto, senza dubbio, e si poteva scrivere meglio, ma questo so fare e questo faccio... Mi sarebbe piaciuto lanciare 10 volte contemporaneamente da questo script la funzione operazioni(), ma non ho mai usato thread, non sapevo proprio come fare... Avevo provato con un for loop ma non era ciò che volevo, perchè attendeva che finisse il primo operazioni() prima di lanciare il successivo... Così ho usato un po' di bashfu:


Poco elegante come soluzione, ma funziona e richiede solo una shell per ricevere la password e quindi per me è ok... E' stato veramente difficile trovare dei proxy funzionanti... A volte funzionava uno, a volte un altro, così ho deciso di creare un array e sbatterli tutti dentro(attenzione che l'ip deve avere gli apici, una stringa, mentre la porta no perchè è un intero)... Conviene recuperarne alcuni con google, sbatterli dentro all'array, calcolare la lunghezza dell'array(è commentato nello script python, basta decommentarlo) e poi modificare il codice bash per utilizzarlo...

giovedì 15 marzo 2012

Applicazioni Silent/Unattended - Agg. 15/03

Oggi voglio pubblicare tutte le applicazioni che io ritengo necessarie avere su un pc, tutte quelle applicazioni che rendono un OS utilizzabile giornalmente senza problemi... Si va da semplici file manager per gli archivi(7z), al reader per i pdf, oppure applicazioni di sicurezza tipo il personal firewall della comodo, solo il firewall, utilissimo secondo me più di un antivirus, almeno oggi, dove gli attacchi sono fatti per recuperare informazioni, non per cancellare porzioni di dati(ormai sono in disuso, non ci guadagna nessuno in quel modo)... Alcune applicazioni sono solo per i 64bit, e sono espressamente indicate con x64 nel nome... Forse a qualcuno l'ho dimenticato... Ma i 32 bit se proveranno ad installare un programma per x64 non ci riusciranno, quindi poco male... Non si incasina niente...

7z 1.5 2100
7z 9.22 x64
Adobe Reader 10.1
CCleaner 3.16
CDBurnerXP 4.4.0.2971 x64
Comodo Personal Firewall 5 x64
CPU-Z 1.60 x64
Daemon Tool 4.4.53
Firefox 11.0
Flash Player 11.102.63 x64 GPU-Z 0.59
HTTrack 3.44.3
iTunes 10.6 x64
Java 32&64bit 6.31
KMPlayer 3.1.0 r2
KVIrc 4.0.4
NOD32 5 x64
Notepad++ 5.9.8
PhotoScape 3.6.1
RealTemp 3.70
Recuva 1.42.544
Skype 5.8.0.158
SSDlife free 2.2.42
TeamViewer 7.0.12799
TeraCopy 2.27
Thunderbird 11.0
Virtualbox 4.1.10.76795
VLC 2.0.0
XMedia Recode 3.0.81
Windows Live Mail Messenger Movie Maker part1
Windows Live Mail Messenger Movie Maker part2

Per quanto riguarda Windows Live, ho dovuto dividerlo in 2 parti avendo una dimensione finale maggiore di 200MB, che è il limite su mediafire... Basta estrarlo e poi cliccare 2 volte l'exe... Aggiungo anche il mio installatore automatico:

 AI - Automatic Installer 0.2

Basta mettere tutto nella stessa cartella, avviare l'installatore e scegliere quel che si desidera per avviare le installazioni automatiche... Così si evita di cliccare su avanti o accetta su tutti i programmi... Se dovessi installare 31 programmi in maniera classica, io impazzirei... Così invece si fa molto prima e non si impazzisce...

Per chi tiene ancora l'UAC attivato(pazzo???) si deve avviare tutto come amministratore, oppure avviare soltanto l'AI come amministratore perchè al momento dell'installazione passa automaticamente i permessi di amministratore a tutti i file che avvia...

venerdì 9 marzo 2012

Semtex level 4 writeup

Il livello 4 di questo wargame è stato piuttosto difficile per me... Mai avevo usato ptrace(),e soprattutto era da un po' che non toccavo il C... Nella descrizione del livello si poteva leggere:

Ptrace your way
Pass prints the password for the level you are on. Try to make it print the next level's password.
This time it is not so easy:
/semtex/semtex4: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.15, stripped

Se il programma veniva lanciato, restituiva la password dell'utente che lo lanciava... Ed il file aveva solo i permessi di esecuzione, quindi tutti i tools come gdb,objdump,readelf erano inutili per risolvere il livello... E non si poteva usare LD_PRELOAD come fatto con il livello 2, visto che il programma è linkato staticamente... E qui arriva ptrace(), che con la possibilità di fork() e di monitoraggio delle chiamate mi ha permesso di inserirmi fra una chiamata e l'altra e modificare il valore... Il codice è molto commentato, e mi sono basato su questa pagina(ringrazio l'UIC per la risorsa condivisa e Bender0 per aver creato questo tutorial) per aggiustarlo un po':


Il codice come sempre in C è di difficilissima comprensione, quindi ho aggiungo i commenti alle singole scritture... Non ricordavo quanto il C fosse pieno di parentesi graffe... Alla fine ce ne sono 4 di fila... Assurdo... Volevo risolvere questo livello con python, ma la mancanza di documentazione su pytrace ha reso questo impossibile... Io non imparo un bel niente dalla documentazione, mentre da esempi svolti si impara molto di più...  Una cosa che non ho provato, ma che proverò... Se invece di 6005 avessi messo 6006???

giovedì 8 marzo 2012

Semtex level3 writeup

Questo livello è stato molto bello... Perchè richiedeva di controllare come il programma reagiva alla pressione dei tasti e di scrivere un codice per il bruteforce della soluzione... Infatti il programma reagiva alla pressione dei tasti aggiungendo/sottraendo al valore di partenza 300 una determinata quantità... Le colonne sulle quali agiva ogni tasto erano 5... Era una questione di combinazione... Infatti ecco cosa diceva la descrizione del livello:
Number-Lock Action
You are almost on Semtex 4, there is just one big door before you. It is locked with a number lock.
Analyze and use the locks in /semtex/semtex3 to adjust all the numbers in the correct way.
They will open your way to the next level.
Tip :
If you are not good at math, you should consider brute force. Rewrite the program and try all possible combinations of the locks. It wont take more than a few seconds ;)

Io ho risolto con python... All'inizio credevo fosse impossibile da risolvere, perchè avevo escluso erroneamente lo zero come soluzione della combinazione... Ed ecco che non trovavo la soluzione... E magari avevo pure scritto male il codice... Invece ho trovato questa soluzione che sulla mia macchina virtuale impiega 80 secondi per essere risolta e 44 milioni di iterazioni:
Consiglio di cliccare su download raw per vederlo ben indentato... Il risultato finale ci restituisce quante volte cliccare il numero 1,2,3,4,5,6,7,8 sul tastierino numerico, il tempo trascorso e le iterazioni necessarie... Per il prossimo livello necessito di un po' di tempo... E' una scrittura di un ptrace con modifica di una syscall... E questo va fatto in C, caro odioso C...

mercoledì 7 marzo 2012

Semtex level2 writeup

 Questo livello si è rivelato praticamente uguale al livello 2 dell'abraxas, con una piccola difficoltà aggiunta data dal testo che definiva il numero da dare all'EUID... Infatti diceva, ovviamente in inglese, che 6002 non erano i numeri del diavolo... Quindi noi cercavamo i numeri 666... Non cambiava assolutamente niente, tranne che non avendo letto il motd non avevo messo al gcc l'opzione -m32, quindi non riuscivo ad exploitare il programma... Ringrazio come sempre @Steven per avermi fatto notare che nel motd c'erano scritte informazioni importanti...

Quindi veniamo al codice c utilizzato:
Poi ho semplicemente compilato la libreria condivisa e l'ho caricata con LD_PRELOAD:

In questo modo passiamo una libreria diversa al programma, che ci identifica come EUID=666 e ci fornisce la password per il livello successivo che posterò domani...

martedì 6 marzo 2012

Semtex level 1 writeup

Il livello 1 di questo wargame si presenta come un livello di crittografia con un algoritmo crittografico di sostituzione... Partiamo dalla descrizione:

Simple encryption
A password has been crypted using the /semtex/semtex1 tool.

The crypted password is HRXDZNWEAWWCP.

You have to reverse engineer the algorithm and decrypt the password.
You might try the -v switch for encrypt.

Quindi si tratta di trovare questo algoritmo... Avevo provato a lanciare comandi sull'eseguibile, ma avendo solo il tag x non potevo far di più... Quindi ho usato il caro vecchio metodo di risoluzione di un codice, altri non ne conosco...

Per prima cosa vediamo che l'eseguibile necessita di caratteri tutti maiuscoli compresi fra 10 e 20... Quindi una password di 1 carattere produce un errore... Notando che la password è di 13 caratteri, si può iniziare a scrivere 13 caratteri qualsiasi(tutte A per esempio) e si trascrive il risultato... Poi si modificano una ad una tutte le A in B... Così si vede se ad esempio la prima A corrisponde ad una posizione diversa nella password criptata... Così è infatti... Ci si segna quel numero e si ottiene la sequenza con la quale vengono processati i caratteri... In più si ottiene anche l'alfabeto di sostituzione... Infatti se ad A corrisponde una G, ed a B corrisponde una H, abbiamo trovato l'alfabeto di sostituzione così composto [G-Z][A-F]... Quindi conoscendo la password di arrivo, seguendo il processo inverso, si ottiene la password iniziale... Sembra una cosa lunga, per niente automatica... Ma ci vuole molto poco per arrivare ad un risultato eccellente... Questo livello ricorda molto il livello dell'hes2010... Infatti funzionava più o meno allo stesso modo...

Operando queste sostituzioni e lavorandoci un attimo si arriva alla password simpatica che deve essere usata anche per il login al livello successivo che è MUESLIMUHAHAH

Mi piacciono molto questi livello crittografici semplici... Anche se non li risolvo nel modo più elegante possibile, sono comunque molto pratici... E da questi esempi si vede pure come una semplice password per sostituzione si rivela spesso inaffidabile...

lunedì 5 marzo 2012

Semtex level0 writeup

Ho trovato nel wargames Semtex le stesse caratteristiche dei wargames Abraxas ed hes2010 che tanto mi hanno entusiasmato... Il livello 0 si presenta come successo nell'Abraxas in una connessione ad una determinata porta e nell'esecuzione di qualche script... Come per tutti i wargames firmati OverTheWire, questo script bisogna scriverselo...Ed è quello che ho fatto... Citando le istruzioni ricevute dal wargames:
Get a shell
semtex.labs.overthewire.org

x86/elf: Connect to port 24000
amd64/elf: Connect to port 24001
ppc/mach-O: Connect to port 24002

Receive data until the port is closed.

Every second byte you receive is trash, ignore it.
The other bytes are an executable that shows you the password.

Quindi il mio scopo era ricevere questi dati ed unirli per formare un eseguibile che avrebbe rivelato la password necessaria per il livello 1... All'inizio non avevo ben capito la parte relativa ai second byte, pensavo fosse riferita ai byte inviati dalla porta quando questa si chiudeva(cioè nulla)... Si poteva di certo scrivere più chiaro, tipo ignora i byte pari(Ignore all par byte you receive)...

Questo aiuto a capire la frase mi è stato dato da deadbyte, un utente che spesso si incontra nella chat #social del server IRC di overthewire...

Per inserire questa condizione ho fatto uso di queste istruzioni sul sito python.it... Facendo uso dell'operatore modulo % ho inserito la condizione pari e dispari sulla variabile i utilizzata per conteggiare le iterazioni necessarie... Non ho ben capito perchè devo importare due volte i moduli di struct, ma sta di fatto che funziona questo script:


Per rendere il programma più generale, cioè per versioni a 32 o 64 bit di linux, ho messo la condizione sulla porta ricavata con la funzione calcsize... Quindi se è una distro a 32 bit usa la porta 24000, altrimenti la porta 24001... Non ho implementato la porta ppc, non saprei che fare...

Alla fine abbiamo questo file, gli diamo i permessi di esecuzione(chmod +x file) e lo eseguiamo... Livello 0 finito...

giovedì 1 marzo 2012

Distro debian-like per pentesting - seconda versione

Ho aggiornato il mio script che uso per personalizzarmi la distribuzione che al momento mi va di usare... Ovviamente debian-like... Avevo provato pure ArchLinux, ma non fa decisamente per me... E si deve comunque dare l'onore alle *buntu di una più vasta fetta di mercato dei sistemi operativi... Io infatti mi baso su Xubuntu... Stavo usando Lubuntu, che ritengo molto bella e veloce(non sono per temi sfavillosi, mi piace la distro spartana, infatti ubuntu e kubuntu non mi piacciono)... Però chissà com'è che Lubuntu non accetta nella voce Exec comandi complessi tramite sh -c... Stiamo scherzando??? Me lo sono chiesto pure io la prima volta, e la seconda, e la terza... Eppure i miei comandi lì non funzionavano... Mi sono spostato su XFCE, e subito funzionavano... Quindi il problema è LXDE, che chissà perchè non accetta sti comandi... Vabbè... Il mio script funziona sicuro su XFCE, ma probabilmente anche su GNOME e KDE, non ho provato, se qualcuno lo fa mi scriva... Se qualcuno lo userà fuori da XFCE, deve assolutamente cambiare il nome del collegamento simbolico che si trova subito dopo il controllo utente... Infatti xfce4-terminal è la shell di XFCE... Gli altri avranno altre shell... Tutto il resto funziona normalmente... Si può pure cambiare il nome della directory principale... Io l'ho chiamata Mito125, se lo si fa si deve pure cambiare la funzione aggiungi()... Adesso dovrò aggiungere qualche altro programma che uso, sistemare hydra ed è ok...




Certamente devo ringraziare t0ka7a che è il creatore dell'infondlinux.sh... Da questo script ho preso spunto per le 3 funzioni... Soprattutto per la funzione dlicona()... E' fenomenale usare quel echo piping awk per trovare il nome... Non avrei saputo di certo farlo... Io con awk non ci vado molto daccordo... Tutto il resto me lo sono scritto io... Sicuramente ho letto i desktop file di backtrack e backbox per capire meglio, ma comunque io me li sono autocostruiti...

Diciamo pure, anche se fuori topic, che è uscita backtrack 5 r2... Quant'è veloce e quanti servizi/applicazioni offre... Assolutamente fantastica... Ma è solo root... Io non riuscirei ad usarla tranquillamente come solo root... Per uso quotidiano è assolutamente impossibile... Fantastica, veloce ma limitata all'ambito pentesting(che forse è il suo obiettivo)... Discorso diverso per backbox... Ha l'utente normale e quello root... Quindi anche in uso quotidiano è ottima... Ma adesso, che è appena uscita la nuova versione backtrack, è lontana anni luce da quest'ultima... Nonostante abbia XFCE, a me risulta più lenta, meno svelta... Backtrack con GNOME invece vola... Assurdo... Ed ha tool nuovi, nuovo kernel, tutto nuovo... Fino a qualche giorno fa backbox bruciava in tutto backtrack, la 5 e la r1 erano distribuzioni lente e poco stabili, complesse da usare all'infinito... Adesso aspetto la risposta del team di backbox... Non possono stare così indietro... I tool sono inferiori, il kernel inferiore, la velocità inferiore...