Questo è un wargame molto semplice, che aiuta ad entrare nell'ottica dei wargames, infatti presenta vulnerabilità, o meglio non ne presenta, che si possono trovare ai primissimi livelli di ogni wargames... Nonostante le mie esperienze passate ed avendo acquisito qualche abilità, ho deciso di farlo ugualmente, perchè mi piacciono molto questi wargames semplici, in cui si imparano nuovi trucchetti che magari a volte non si conoscono...
Il wargame si trova a questo indirizzo:
http://www.overthewire.org/wargames/leviathan/
Qui ho inserito come risolvere tutti i 7 livelli... Nel penultimo c'è inserito pure un loop bash per trovare la password giusta... Non è interattivo come codice, ma aspettando 50 secondi, poi scrivendo id ed invio, seguito dal cat con invio, dentro al file "test" si trova la password... Potevo svilupparlo meglio??? Certamente...
Spero sia utile ai principianti, perchè a loro questo wargame si rivolge...
Visualizzazione post con etichetta Hacking. Mostra tutti i post
Visualizzazione post con etichetta Hacking. Mostra tutti i post
venerdì 3 agosto 2012
mercoledì 16 maggio 2012
OverTheWire Bandit writeup - all levels
Mi sono sorpreso nel vedere che anche l'OTW ha creato un wargames accessibile a tutti... E per di più carinissimo per imparare nuovi comandi... Io li conoscevo già tutti, avendo già risolto altri wargames e non essendo affatto alle prime armi... Però l'ho risolto lo stesso... Inutile dire che come sempre i suggerimenti sono inutili... Suggerimenti inutili per alcuni livelli, dove si suggerisce bzip2 quando basta un semplice cat... Ma vabbè... Sono stati 17 livelli divertentissimi... Almeno una volta mi si è presentato un wargames che non mi richiedesse di usare i miei splendidi neuroni... Questo è il file che ho creato alla fine con istruzioni e password...
http://www.overthewire.org/wargames/bandit/
Non ci sono particolari spiegazioni... Provo lo stesso a farle... Il livello0 si presenta semplicemente come una connessione ssh... La password si trova sulla spiegazione del livello insieme alle note iniziali che si deve sempre leggere...
Nel livello 1 si usava solo cat per leggere il file... Idem nel livello 2,3,4,5 dove inoltre si creavano problemi con i particolari nomi assunti dal file...
Nel livello 6-7 su usavano le particolari opzioni di find per cercare file in liste lunghe di file e con particolari opzioni...
Nel livello 8 si usava grep per cercare una particolare parola... Sono stato fortunato che funzionasse al primo colpo, altrimenti prima della parola da cercare conviene sempre mettere un "-i" così da ignorare lettere grandi o piccole... Idem per il livello 10...
Nel livello 9 si usava la combinazione sort|uniq -c per avere una lista delle ripetizioni e prendere solo quella singola...
Nel livello 11 si usava base64 per decriptare un file encodato...
Nel livello 12 grazie a tr ho effettuato la decodifica ROT13 ad un testo qualsiasi...
Il livello 13 l'ho risolto ma non mi andava di segnarmi i passaggi che sono sempre uguali e che richiedono per lo più l'uso del comando file per capire con quale estensione dobbiamo lavorare...
Il livello 14 richiedeva l'uso dell'opzione -i di ssh(mi sa che questa l'ho imparata da g0tmi1k, che se non sbaglio ha l'attestato PWB, quindi...)
Il livello 15 chiedeva di mandare la password alla porta 30000, che io ho fatto con nc...
Il livello 16 chiedeva di mandare la password alla porta 30001 ma in questo caso con openssl...
Il livello 17 chiedeva di fare un semplice nmap delle porte aperte dalla 31000 alla 32000, provare quale fosse in SSL(altrimenti si riceve un errore) e mandare la password... Su 5 solo 2 sono in SSL e solo una restituisce l'RSA KEY...
http://www.overthewire.org/wargames/bandit/
Non ci sono particolari spiegazioni... Provo lo stesso a farle... Il livello0 si presenta semplicemente come una connessione ssh... La password si trova sulla spiegazione del livello insieme alle note iniziali che si deve sempre leggere...
Nel livello 1 si usava solo cat per leggere il file... Idem nel livello 2,3,4,5 dove inoltre si creavano problemi con i particolari nomi assunti dal file...
Nel livello 6-7 su usavano le particolari opzioni di find per cercare file in liste lunghe di file e con particolari opzioni...
Nel livello 8 si usava grep per cercare una particolare parola... Sono stato fortunato che funzionasse al primo colpo, altrimenti prima della parola da cercare conviene sempre mettere un "-i" così da ignorare lettere grandi o piccole... Idem per il livello 10...
Nel livello 9 si usava la combinazione sort|uniq -c per avere una lista delle ripetizioni e prendere solo quella singola...
Nel livello 11 si usava base64 per decriptare un file encodato...
Nel livello 12 grazie a tr ho effettuato la decodifica ROT13 ad un testo qualsiasi...
Il livello 13 l'ho risolto ma non mi andava di segnarmi i passaggi che sono sempre uguali e che richiedono per lo più l'uso del comando file per capire con quale estensione dobbiamo lavorare...
Il livello 14 richiedeva l'uso dell'opzione -i di ssh(mi sa che questa l'ho imparata da g0tmi1k, che se non sbaglio ha l'attestato PWB, quindi...)
Il livello 15 chiedeva di mandare la password alla porta 30000, che io ho fatto con nc...
Il livello 16 chiedeva di mandare la password alla porta 30001 ma in questo caso con openssl...
Il livello 17 chiedeva di fare un semplice nmap delle porte aperte dalla 31000 alla 32000, provare quale fosse in SSL(altrimenti si riceve un errore) e mandare la password... Su 5 solo 2 sono in SSL e solo una restituisce l'RSA KEY...
Mito125
venerdì 20 aprile 2012
Network Forensics Puzzle Contest #2
Ho completato anche questo secondo contest appoggiandomi ad una soluzione già fornita, perchè ancora non mi muovo bene nei forensics contest e perchè ho ancora problemi con python... La soluzione che ho sfruttato per aiutarmi si trova a questo indirizzo... E' di un certo Jeremy Rossi... Per imparare python non c'è miglior cosa da fare che sfruttarlo...
Così è stato... La prima funzione l'ho trovata su stackoverflow.com... Converte in base64 risolvendomi alcuni problemi che io avevo a convertire... La seconda funzione, effettua delle operazioni preliminari, come creare la cartella per i file vari e verificare che non esista già, nel caso la trovasse già esce dallo script e chiede di cancellare la cartella... Ed infine crea i file estratti con tcpflow...
La terza funzione è quella che più interessa, perchè è quella che estrae le informazioni da ogni file creato con tcpflow...
Provo a descriverlo in righe... Nella riga 36 creo il file che conterrà tutte le informazioni necessarie, con wb gli do anche i permessi di scrittura... Nella riga 37 inserisco un for per effettuare le seguenti operazioni su tutti i file presenti nella directory scelta come directory di lavoro... Riga 38 e 39 scrivono informazioni generiche nel file, la riga 40 invece è un refuso... Passiamo alla riga 41, dove leggo le righe che compongono ogni file presente nella directory... E per ogni riga che si trova in a, faccio un controllo con un if/in... Cioè nella riga 42, se trovi nell'elemento all'i-esima posizione della lista le parole "AUTH LOGIN" allora riportami i dati nel file di report... Ma non riporto i dati i-esimi, ma gli i-esimi più 1 e più 2 decodificati dalla base64... Questo perchè ho notato che il codice smtp 334 corrisponde alla codifica base64, quindi mi interessa decodificare i due elementi successivi per avere le credenziali di accesso al server smtp...
Gli if successi fanno la stessa cosa del primo, cioè controllano che la stringa sia contenuta nell'i-esimo elemento della lista... Discorso diverso per l'ultimo if... Se è vero che DATA è contenuto nell'i-esimo elemento, allora trasforma la lista in string con riga 52, tenendo solo i dati che vanno dall'i-esimo più uno elemento fino al penultimo elemento... E qui entra in gioco il modulo email di python... Infatti nella riga 53 prendiamo la stringa b e la trasformiamo in un elemento mail.. E per ogni parte di questo msg, con walk() facciamo appunto la lettura dell'email, andiamo a verificare che ci siano dati per noi interessanti...
Nella riga 55 metto un if per cercare i dati 'text/plain', cioè il messaggio della mail... e con una sola riga, grazie al modulo email, riesco ad estrarre delle informazioni necessarie... E successivamente le scrivo nel file di report...
Nella riga 58 invece vado a cercare eventuali allegati... Infatti get_filename() ci permette di ricavare il nome dell'allegato, e se esiste( con l'if controllo che non sia None, altrimenti salto) mi salvo l'allegato nella directory, e scrivo il suo nome nel file di report... In più calcolo l'md5 hash e salvo il risultato dentro al file di report...
Il file salvato ha estensione docx, ma con file da terminale mi dice che è un file zip... L'ho rinominato ed estratto infine, per ottenere l'immagine che mi diceva il luogo dell'incontro... E ne ho calcolato l'md5 sempre da terminale con md5sum... Non ho inserito questa parte dentro allo script, anche perchè renderla automatica penso sia difficilino per me... E con queste informazioni si può rispondere a tutte le domande, sia grazie al file di report che agli ultimi 2 comandi...
Così è stato... La prima funzione l'ho trovata su stackoverflow.com... Converte in base64 risolvendomi alcuni problemi che io avevo a convertire... La seconda funzione, effettua delle operazioni preliminari, come creare la cartella per i file vari e verificare che non esista già, nel caso la trovasse già esce dallo script e chiede di cancellare la cartella... Ed infine crea i file estratti con tcpflow...
La terza funzione è quella che più interessa, perchè è quella che estrae le informazioni da ogni file creato con tcpflow...
Provo a descriverlo in righe... Nella riga 36 creo il file che conterrà tutte le informazioni necessarie, con wb gli do anche i permessi di scrittura... Nella riga 37 inserisco un for per effettuare le seguenti operazioni su tutti i file presenti nella directory scelta come directory di lavoro... Riga 38 e 39 scrivono informazioni generiche nel file, la riga 40 invece è un refuso... Passiamo alla riga 41, dove leggo le righe che compongono ogni file presente nella directory... E per ogni riga che si trova in a, faccio un controllo con un if/in... Cioè nella riga 42, se trovi nell'elemento all'i-esima posizione della lista le parole "AUTH LOGIN" allora riportami i dati nel file di report... Ma non riporto i dati i-esimi, ma gli i-esimi più 1 e più 2 decodificati dalla base64... Questo perchè ho notato che il codice smtp 334 corrisponde alla codifica base64, quindi mi interessa decodificare i due elementi successivi per avere le credenziali di accesso al server smtp...
Gli if successi fanno la stessa cosa del primo, cioè controllano che la stringa sia contenuta nell'i-esimo elemento della lista... Discorso diverso per l'ultimo if... Se è vero che DATA è contenuto nell'i-esimo elemento, allora trasforma la lista in string con riga 52, tenendo solo i dati che vanno dall'i-esimo più uno elemento fino al penultimo elemento... E qui entra in gioco il modulo email di python... Infatti nella riga 53 prendiamo la stringa b e la trasformiamo in un elemento mail.. E per ogni parte di questo msg, con walk() facciamo appunto la lettura dell'email, andiamo a verificare che ci siano dati per noi interessanti...
Nella riga 55 metto un if per cercare i dati 'text/plain', cioè il messaggio della mail... e con una sola riga, grazie al modulo email, riesco ad estrarre delle informazioni necessarie... E successivamente le scrivo nel file di report...
Nella riga 58 invece vado a cercare eventuali allegati... Infatti get_filename() ci permette di ricavare il nome dell'allegato, e se esiste( con l'if controllo che non sia None, altrimenti salto) mi salvo l'allegato nella directory, e scrivo il suo nome nel file di report... In più calcolo l'md5 hash e salvo il risultato dentro al file di report...
Il file salvato ha estensione docx, ma con file da terminale mi dice che è un file zip... L'ho rinominato ed estratto infine, per ottenere l'immagine che mi diceva il luogo dell'incontro... E ne ho calcolato l'md5 sempre da terminale con md5sum... Non ho inserito questa parte dentro allo script, anche perchè renderla automatica penso sia difficilino per me... E con queste informazioni si può rispondere a tutte le domande, sia grazie al file di report che agli ultimi 2 comandi...
OverTheWire Krypton level 0-1-2 writeup
Oggi hanno riaperto questo wargames, sempre della OverTheWire... Io adoro la crittografia... Nei primi 3 livelli però è qualcosa di molto semplice... Anzi direi facilissimi questi primi livelli... Eccone la spiegazione:
Con questo comando otteniamo una frase in inglese... E' una frase(mi ha fregato pure a me, ringrazio @StevenVanAcker per avermelo fatto notare)... Dice semplicemente la password del livello 2 è ... Basta copiare l'ultima parola...
Krypton level0
Il livello 0 non è un vero livello, è solo un livello introduttivo... Infatti basta copiare S1JZUFRPTklTR1JFQVQ= e decodificarla usando base64... Niente di più semplice che andare su xlate translator e decodificarla... E poi loggarsi con ssh krypton1@krypton.labs.overthewire.org ed inserire la password... Livello finito...Krypton level1
Anche questo livello non presenta difficoltà... E' spiegato benissimo, e la codifica usata è http://it.wikipedia.org/wiki/ROT13 ... Come si legge in wikipedia, è semplicemente una rotazione di lettere(un po' come il cifrario di Cesare)... La a diventa N, la b diventa M e così via... Quindi si può risolvere tramite bash:cat krypton2 | tr 'A-Z' 'N-ZA-M'
Con questo comando otteniamo una frase in inglese... E' una frase(mi ha fregato pure a me, ringrazio @StevenVanAcker per avermelo fatto notare)... Dice semplicemente la password del livello 2 è ... Basta copiare l'ultima parola...
Krypton level2
Il livello 2 è stato facile perchè avevo risolto in precedenza il cryptogame NDH 2k11 crypto100... Con lo stesso script(che non ricordo dove l'ho trovato,ringrazio sempre chi l'ha fatto) si risolve anche questo... Basta qualche modifica e si ottiene la password, o meglio 26 password, perchè nel cifrario di Cesare non si conosce lo shift effettuato, ma al massimo si hanno 26 shift, quindi in bruteforce si ottengono 26 possibile password... Basta guardarle e si trova quella esatta, che comunque corrisponde ad uno shift di 12 lettere:venerdì 6 aprile 2012
Network Forensics Puzzle Contest #1
Questa è la prima volta che provo a identificare dati da un file pcap... Il mio interesse per il forensics è cresciuto notevolmente, scoprire dati nascosti mi è sempre piaciuto(ma odio la stenografia)... Quindi ho deciso di imparare qualcosa in più cimentandomi in qualche contest che presentasse anche le soluzioni però, e magari come procedere... Non si impara ad usare tshark o tcpflow sui manuali, ma utilizzandoli...
Il primo contest si è svolto nel 2009, e le soluzioni sono veramente tante... Tralasciando il consiglio di scrivere tool per fare queste operazioni(tshark ha un'infinita di filtri, inutile scrivere un tool quando un altro già fatto fa egregiamente il suo lavoro), ho preso come guida la soluzione che a suo tempo aveva mandato Franck_Guenichot... Quindi il mio svolgimento è identico al suo... Anche perchè è il primo forensics test che faccio... Ricordo la prima volta che ho usato nmap, non ci capivo niente, adesso lo uso con maggiore disinvoltura....
Per maggiori informazioni si può visitare la pagina del contest #1:
http://forensicscontest.com/2009/09/25/puzzle-1-anns-bad-aim
C'era da rispondere a sei domande:
Il codice non presenta nessuna particolare difficoltà, e poi si può sempre leggere il documento originale dell'autore per capire meglio... Non conoscevo affatto tshark, adesso posso dire di iniziare a capirlo meglio... Ed alla fine si può rispondere a tutte le domande cercate... Che come riportato sul sito ufficiale sono:
Il primo contest si è svolto nel 2009, e le soluzioni sono veramente tante... Tralasciando il consiglio di scrivere tool per fare queste operazioni(tshark ha un'infinita di filtri, inutile scrivere un tool quando un altro già fatto fa egregiamente il suo lavoro), ho preso come guida la soluzione che a suo tempo aveva mandato Franck_Guenichot... Quindi il mio svolgimento è identico al suo... Anche perchè è il primo forensics test che faccio... Ricordo la prima volta che ho usato nmap, non ci capivo niente, adesso lo uso con maggiore disinvoltura....
Per maggiori informazioni si può visitare la pagina del contest #1:
http://forensicscontest.com/2009/09/25/puzzle-1-anns-bad-aim
C'era da rispondere a sei domande:
1. What is the name of Ann’s IM buddy?Ovviamente sempre in inglese... Quindi partendo da un file di pacchetti di rete, si dovevano ricostruire le informazioni... Io ho messo tutto dentro python, ma si poteva fare anche in bash avendo usato solo quella... In più alcune calls sono commentate, perchè rappresentano i passaggi fatti per arrivare alla soluzione ma che comunque non centrano con la domanda finale... Questo il codice:
2. What was the first comment in the captured IM conversation?
3. What is the name of the file Ann transferred?
4. What is the magic number of the file you want to extract (first four bytes)?
5. What was the MD5sum of the file?
6. What is the secret recipe?
Il codice non presenta nessuna particolare difficoltà, e poi si può sempre leggere il documento originale dell'autore per capire meglio... Non conoscevo affatto tshark, adesso posso dire di iniziare a capirlo meglio... Ed alla fine si può rispondere a tutte le domande cercate... Che come riportato sul sito ufficiale sono:
1. What is the name of Ann’s IM buddy?sec558user1
2. What was the first comment in the captured IM conversation?Here’s the secret recipe… I just downloaded it from the file server. Just copy to a thumb drive and you’re good to go >:-)
3. What is the name of the file Ann transferred?recipe.docx
4. What is the magic number of the file you want to extract (first four bytes)?0x504B0304
5. What was the MD5sum of the file?8350582774e1d4dbe1d61d64c89e0ea1
6. What is the secret recipe?
Recipe for Disaster:
1 serving
Ingredients:
4 cups sugar
2 cups water
In a medium saucepan, bring the water to a boil. Add sugar. Stir gently over low heat until sugar is fully dissolved. Remove the saucepan from heat. Allow to cool completely. Pour into gas tank. Repeat as necessary.
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...
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:
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...
- 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...
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:
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???
- 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:
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...
- 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...
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:
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...
- 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:
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...
- 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...
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...
venerdì 24 febbraio 2012
hes2010 level2 writeup
Questo livello è un livello basato essenzialmente sulla cifratura... Abbiamo un programma che sappiamo sia un eseguibile perchè per prima cosa diamo un file somebinary e ci ritorna che è un eseguibile... Non abbiamo i sorgenti del file, quindi le strade da prendere erano almeno 3... Reverse engineer, modificare la variabile con qualche sistema(non so se sia possibile) e andare di bruteforce...
Io ho seguito l'ultima, se qualcuno è riuscito a finirlo in modo diverso, può scriverlo sotto che sono molto interessato a vedere le altre soluzioni... Ho dato uno strings somebinary ed ho notato che sono spuntati fuori 2 stringhe molto lunghe... La prima 1234567890abcdef e la seconda è 53f4e3d0419c6e0957f5f8... La prima mi da l'idea di essere la base del cifrario utilizzato... la seconda invece è il risultato che vogliamo ottenere...
Ho provato per prima cosa a fare delle prove, ed ho capito che si trattava appunto di un cifrario a rotazione di caratteri hex che cambiavano di posizione(o comunque seguivano regole strane)... Io ho utilizzato un semplice metodo per le prime 4 lettere... Ho creato un file con dentro tutti i caratteri stampabili e facevo eseguire da un semplice bash script un comando così fatto:
Controllando alla fine i risultati ottenuti andavo a prendere il carattere corrispondente (facevo anche un print $i)... Il sistema è molto idiota, e non presenta tecnicismi di alto livello... E' proprio fatto alla buona... Comunque dopo aver capito il sistema si impiega pochissimo tempo per capire quale rotazione o sostituzione si deve utilizzare(tipo tutti i caratteri \x2* dove asterisco varia è uno dei caratteri 1234567890abcdef del cifrario, presentavano lo stesso valore finale tipo *1, quindi se si stava cercando un 41 si dove cercare lì)...
Io mi sono bloccato sul quarto carattere... Non avevo preso in considerazione che il codice potesse consistere di due parole, come infatti era... Quindi avevo si lo spazio dentro al file dei caratteri stampabili, ma quando lo immettevo con quel codice ovviamente mi usciva al primo spazio dopo la seconda parola passata...
Ho ovviato al problema facendo uso degli apici '... Così non usciva allo spazio... E dopo aver tradotto \x20 con spazio, ed aver scritto 'veri ' la combinazione mi è tornata corretta... Quindi ho continuato iterando sempre il processo...
Ovviamente ringrazio StevenVanAcker perchè mi ha suggerito un sistema per printare ogni carattere nella console... Io non lo conoscevo... Con $(printf "\x20") si stampa uno spazio ad esempio... Mi è stato molto utile per capire meglio l'andamento dei cifrari a rotazione...
Nel programma sempre con strings si leggeva anche /etc/pass/carey... E si leggeva pure lo strcmp(), che è la funzione di C/C++ per confrontare stringhe... Ecco perchè io ho ragionato così...
Per ottenere la password dell'utente carey si deve lanciare questo comando:
Io ho seguito l'ultima, se qualcuno è riuscito a finirlo in modo diverso, può scriverlo sotto che sono molto interessato a vedere le altre soluzioni... Ho dato uno strings somebinary ed ho notato che sono spuntati fuori 2 stringhe molto lunghe... La prima 1234567890abcdef e la seconda è 53f4e3d0419c6e0957f5f8... La prima mi da l'idea di essere la base del cifrario utilizzato... la seconda invece è il risultato che vogliamo ottenere...
Ho provato per prima cosa a fare delle prove, ed ho capito che si trattava appunto di un cifrario a rotazione di caratteri hex che cambiavano di posizione(o comunque seguivano regole strane)... Io ho utilizzato un semplice metodo per le prime 4 lettere... Ho creato un file con dentro tutti i caratteri stampabili e facevo eseguire da un semplice bash script un comando così fatto:
./somebinary 1234567890abcdef $i
Controllando alla fine i risultati ottenuti andavo a prendere il carattere corrispondente (facevo anche un print $i)... Il sistema è molto idiota, e non presenta tecnicismi di alto livello... E' proprio fatto alla buona... Comunque dopo aver capito il sistema si impiega pochissimo tempo per capire quale rotazione o sostituzione si deve utilizzare(tipo tutti i caratteri \x2* dove asterisco varia è uno dei caratteri 1234567890abcdef del cifrario, presentavano lo stesso valore finale tipo *1, quindi se si stava cercando un 41 si dove cercare lì)...
Io mi sono bloccato sul quarto carattere... Non avevo preso in considerazione che il codice potesse consistere di due parole, come infatti era... Quindi avevo si lo spazio dentro al file dei caratteri stampabili, ma quando lo immettevo con quel codice ovviamente mi usciva al primo spazio dopo la seconda parola passata...
Ho ovviato al problema facendo uso degli apici '... Così non usciva allo spazio... E dopo aver tradotto \x20 con spazio, ed aver scritto 'veri ' la combinazione mi è tornata corretta... Quindi ho continuato iterando sempre il processo...
Ovviamente ringrazio StevenVanAcker perchè mi ha suggerito un sistema per printare ogni carattere nella console... Io non lo conoscevo... Con $(printf "\x20") si stampa uno spazio ad esempio... Mi è stato molto utile per capire meglio l'andamento dei cifrari a rotazione...
Nel programma sempre con strings si leggeva anche /etc/pass/carey... E si leggeva pure lo strcmp(), che è la funzione di C/C++ per confrontare stringhe... Ecco perchè io ho ragionato così...
Per ottenere la password dell'utente carey si deve lanciare questo comando:
./somebinary 1234567890abcdef 'veri s3cret'
giovedì 23 febbraio 2012
hes2010 level1 writeup
Dopo molti tentativi andati male ho finalmente risolto il livello 1, loggato come george... Obiettivo prendere la password di elaine... Ogni utente ha le stesse impostazioni in quanto a cartelle, quindi andando dentro a /home/elaine/bin/ troviamo due file... Un cronjob che ci dice che il file perl presente dentro alla cartella viene eseguito automaticamente ogni 5 minuti... Il file perl ha questo codice:
Come si può notare l'utente elaine odia george(come fa @StevenVanAcker a pensare queste storie io non lo so, ancora ricordo la storia dell'abraxas :D) e quindi con questo script cancella regolarmente ogni file dentro /var/tmp... Ed appunto qui dentro c'è la cartella george... In perl con la funzione system si possono richiamare comandi bash, ed infatti il primo comando è un semplice find... Cerca dentro la cartella /var/tmp/george ogni file(-type f) con permessi 777 (-perm 777) e memorizza la path completa di questi file dentro $filename... Poi per ogni linea in $filename fa due cose(evitando di descrivere tutto), print il nome esteso del file ed ancora con la funzione system rimuove il file... Proprio qua sta la vulnerabilità...
Non avendo previsto un sistema di filtri su $filename, si può pensare di usare | per concatenare un comando dentro al nome... Io come al solito uso python, perchè è il più semplice da utilizzare secondo la mia opinione:
Ho evidenziato il comando come bash... Quello che andiamo a fare è dare alla cartella i permessi 777, creare un file vuoto con quel nome e dare al file i permessi 777... La vulnerabilità appunto sta nel nome del file... Il comando dentro $(...) dice di richiamare l'interprete python ed eseguire i comandi fra "... import binascii,os serve per avere a disposizione i comandi os.system(l'equivalente di system in perl) e binascii.unhexlify che è una funzione che converte da hex ad ascii... Quel numero infatti convertito è semplicemente un cat /etc/pass/elaine > /tmp/file... Questo significa che quando il cron richiamerà il cronjob, eseguirà il perl come utente elaine e quindi potrà leggere il file /etc/pass/elaine... E ci creerà il file /tmp/file che conterrà al suo interno la password cercata...
All'inizio cercavo di passare i comandi senza ricorrere al bash, ma incontravo diversi problemi... Gli slash non si possono usare all'interno del nome, in più non eseguiva ciò che volevo... Alla fine la scelta dell'hex è stata quella vincente...
Come si può notare l'utente elaine odia george(come fa @StevenVanAcker a pensare queste storie io non lo so, ancora ricordo la storia dell'abraxas :D) e quindi con questo script cancella regolarmente ogni file dentro /var/tmp... Ed appunto qui dentro c'è la cartella george... In perl con la funzione system si possono richiamare comandi bash, ed infatti il primo comando è un semplice find... Cerca dentro la cartella /var/tmp/george ogni file(-type f) con permessi 777 (-perm 777) e memorizza la path completa di questi file dentro $filename... Poi per ogni linea in $filename fa due cose(evitando di descrivere tutto), print il nome esteso del file ed ancora con la funzione system rimuove il file... Proprio qua sta la vulnerabilità...
Non avendo previsto un sistema di filtri su $filename, si può pensare di usare | per concatenare un comando dentro al nome... Io come al solito uso python, perchè è il più semplice da utilizzare secondo la mia opinione:
Ho evidenziato il comando come bash... Quello che andiamo a fare è dare alla cartella i permessi 777, creare un file vuoto con quel nome e dare al file i permessi 777... La vulnerabilità appunto sta nel nome del file... Il comando dentro $(...) dice di richiamare l'interprete python ed eseguire i comandi fra "... import binascii,os serve per avere a disposizione i comandi os.system(l'equivalente di system in perl) e binascii.unhexlify che è una funzione che converte da hex ad ascii... Quel numero infatti convertito è semplicemente un cat /etc/pass/elaine > /tmp/file... Questo significa che quando il cron richiamerà il cronjob, eseguirà il perl come utente elaine e quindi potrà leggere il file /etc/pass/elaine... E ci creerà il file /tmp/file che conterrà al suo interno la password cercata...
All'inizio cercavo di passare i comandi senza ricorrere al bash, ma incontravo diversi problemi... Gli slash non si possono usare all'interno del nome, in più non eseguiva ciò che volevo... Alla fine la scelta dell'hex è stata quella vincente...
giovedì 16 febbraio 2012
hes2010 level0 writeup
Quando si inizia un wargames fabbricato da Steven della overthewire.org, si deve prendere in esame il fatto che non si riuscirà a finirlo... Da quanto ne so, nessuno l'hai mai finito veramente questo wargames, dove l'ultimo livello prende come oggetto la tesi di laurea dello stesso Steven... Tra l'altro sempre molto disponibile ad indirizzarvi sulla strada giusta... O almeno in parte... Non svela mai la soluzione, però qualche consiglio lo da...
Per finire questo livello ho preso come esempio questa pagina qui:
http://www.justanotherhacker.com/2011/05/htaccess-based-attacks.html
Spiega come attaccare un server web modificandone il file .htaccess... Proprio il file qui presente è stato da me preso come .htaccess... Senza stare a preoccuparmi di avere una shell non interattiva...
Per prima cosa si deve pensare come google... Quindi ho letto il file robots.txt presente nella index del sito... Al suo interno si trovano importanti informazioni... La pagina upload.php non viene mostrata normalmente... Ma inserendo l'indirizzo completo nella barra degli indirizzi(http://192.168.66.66/upload.php) si arriva a questa pagina... Qui si presenta un form per caricare determinati file... All'inizio avevo provato a caricare direttamente un file php ed ottenere una shell... Ma non lo accetta...
Quindi con l'ausili di firebug, nota estensione di firefox, sono andato a leggere il codice html relativo al form e l'ho modificato secondo le mie esigenze... Il problema nasceva nell'uploading del file a cui il server cambiava nome ed estensione... Così ho messo ciò che più mi piaceva... Php non era accettato, ma perl e sh si... Questa strada però si è rilevata errata... Non portava da nessuna parte... Quindi da qui l'attacco all'.htaccess...
Usando quel codice, ho creato un file con dentro quel codice, preoccupandomi che durante l'upload il server lo rinominasse .htaccess... E così è stato... Adesso avevo una variabile c da impostare a mio piacimento...
Quindi ho dato un 'http://192.168.66.66/upload/.htaccess?c=ls -lah /etc/pass' ed ho scoperto che la cartella george era accessibile da www-data, cioè l'utente in mio possesso... Così ho dato un 'http://192.168.66.66/upload/.htaccess?c=cat /etc/pass/george' per ottenere la sua password impossibile, infatti non si può pensare di attaccare l'utente george tramite hydra, perchè quella password non è attaccabile tramite dizionario...
Per finire questo livello ho preso come esempio questa pagina qui:
http://www.justanotherhacker.com/2011/05/htaccess-based-attacks.html
Spiega come attaccare un server web modificandone il file .htaccess... Proprio il file qui presente è stato da me preso come .htaccess... Senza stare a preoccuparmi di avere una shell non interattiva...
Per prima cosa si deve pensare come google... Quindi ho letto il file robots.txt presente nella index del sito... Al suo interno si trovano importanti informazioni... La pagina upload.php non viene mostrata normalmente... Ma inserendo l'indirizzo completo nella barra degli indirizzi(http://192.168.66.66/upload.php) si arriva a questa pagina... Qui si presenta un form per caricare determinati file... All'inizio avevo provato a caricare direttamente un file php ed ottenere una shell... Ma non lo accetta...
Quindi con l'ausili di firebug, nota estensione di firefox, sono andato a leggere il codice html relativo al form e l'ho modificato secondo le mie esigenze... Il problema nasceva nell'uploading del file a cui il server cambiava nome ed estensione... Così ho messo ciò che più mi piaceva... Php non era accettato, ma perl e sh si... Questa strada però si è rilevata errata... Non portava da nessuna parte... Quindi da qui l'attacco all'.htaccess...
Usando quel codice, ho creato un file con dentro quel codice, preoccupandomi che durante l'upload il server lo rinominasse .htaccess... E così è stato... Adesso avevo una variabile c da impostare a mio piacimento...
Quindi ho dato un 'http://192.168.66.66/upload/.htaccess?c=ls -lah /etc/pass' ed ho scoperto che la cartella george era accessibile da www-data, cioè l'utente in mio possesso... Così ho dato un 'http://192.168.66.66/upload/.htaccess?c=cat /etc/pass/george' per ottenere la sua password impossibile, infatti non si può pensare di attaccare l'utente george tramite hydra, perchè quella password non è attaccabile tramite dizionario...
martedì 17 gennaio 2012
Hacking Hackademic RTB 1
Aspettavo da un po' l'uscita di una nuova "root-this-box" distro, o boot2root come dice g0tmi1k, che appunto sono delle versione modificate di linux(questa basata su fedora 12) che hanno come obiettivo finale l'accesso alla macchina come utente root... Questa distro può essere scaricata di qua:
Hackademic RTB 1
Ovviamente rigranzio g0tmi1k per aver realizzato un tutorial ed avermi fatto conoscere la distro...
Come sempre, per prima cosa si usa netdiscover per trovare l'ip della macchina e successivamente nmap per analizzarla e conoscere servizi/porte in ascolto... In questa macchina si ha un servizio sulla porta 22, l'ssh, che è closed, mentre il servizio web è attivo sulla porta 80... Così ci possiamo collegare tramite un qualsiasi web browser e controllare le informazioni che lì possiamo recuperare...
Dopo alcuni tentativi, si trova che il link alla categoria "uncatagorized" è vulnerabile... Si può procedere come nel video di g0tmi1k, oppure utilizzare sqlmap per scoprire i database presenti e le altre informazioni utili... Sqlmap in pratica fa il lavoro sporco che altrimenti ci toccherà fare manualmente...
Con sqlmap scopriamo che un database si chiama wordpress, quindi siamo su un server che usa wordpress... Possiamo quindi cercare di trovare utenti e password con pochi passaggi in l'utente con privilegi più alti e la sua password, il cui hash è direttamente crackato da sqlmap...
Loggandoci con questo utente su wordpress, possiamo abilitare e disabilitare i plugin in php... Come pure g0tmi1k dice, potremmo creare del codice con metasploit, ed utilizzare quello... Ma in maniera più veloce si può usare la reverse shell di pentestmonkey che è molto semplice da usare ed è intuitiva... Le strade per arrivare all'account root possono essere diverse... Se avessi avuto un po' più di tempo avrei indagato di più pure sul servizio ssh...
Io ho fatto un errore nel video... Ho inserito la shell senza prima attivare il plugin... Quindi spariva tutto... Invece attivando prima il plugin, editandolo incollandoci la shell corretta e cliccando update plugin si ottiene la shell... Il codice php della shell va editato in due punti... Cioè in IP e PORT... E' spiegato dentro alla pagina di pentestmonkey... E si deve mettere prima di caricare la reverse shell il tool netcat in ascolto sulla stessa porta della shell... Il codice è sotto comunque...
Adesso che abbiamo la shell, cerchiamo di recuperare tutte le informazioni disponibili per utilizzare un exploit... Io qui avevo prima utilizzato l'exploit 15704.c senza prima leggerlo o modificarlo... Mio errore... Alla fine ho optato per un altro exploit, il 15285.c... Questo funziona ma prima si deve cancellare la prima riga di descrizione oppure commentarla...
Per caricare questo codice dentro alla macchina si deve prima aprire un server http, o ftp, o qualsiasi altro sistema, per caricare il file... Io ho usato il server http... Errore che ho fatto... Non avevo dato i permessi corretti al file e non riuscivo a prenderlo con wget... Ed ho notato che il server http installato tramite il mio script partiva in automatico... Così ho modificato pure lo script di installazione...
Caricando il file, compilando con gcc ed eseguendolo si arriva ad ottenere l'account root... Recandoci quindi dentro la cartella /root/ si trova il file key...
Note:
E' normale fare errori durante un video... Per quanto riguarda nmap, è sempre bene lanciarlo seguito dall'opzione -p 1-65535... Ho provato qui, ma non serve... Alcuni comandi non si possono scrivere, guardare il video per capire meglio... Il comando per far partire il server apache2 non si vede nel video... Io ho usato i miei alias... Tipo exploitdb mi porta direttamente nella cartella degli exploit... Basta guardare il mio script per capire meglio... Per comprendere meglio il video guardarlo in HD e modalità tutto schermo, questa volta ho dimenticato di utilizzare lo zoom...
lunedì 16 gennaio 2012
Distro Debian-like per PenTesting
Questo che pubblico adesso è il mio script, realizzato da me, per personalizzare qualsiasi distribuzione debian-like(io l'ho testato su xubuntu, quindi con tutte le buntu funzionerà) per avere una propria distribuzione personale per effettuare i pentesting...
Io ho scelto di non appoggiarmi più a distribuzioni già fatte... La più famosa, backtrack, giunta alla 5 versione, presenta un'usabilità pari a zero... Spesso si blocca, a volte i tool non funzionano, a volte non sono aggiornati... E non so che cosa gli hanno fatto per renderla così... Colori con poca visibilità rendono l'uso molto difficile... Di certo è la più famosa distribuzione di pentesting, e tutti i tool che si porta dietro fanno si che sia la più completa distribuzione dedicata al pentesting... Però questa 5 versione è uscita male... Io non potrei usarla per più di 5 minuti... Io uso queste distro soprattutto dentro VirtualBox, ma questa non è mai andata bene... E tutti quei tool sono spesso inutili... Dispersivi, perchè meglio averne uno buono che 100 da scoprire... Se ho sqlmap, non capisco perchè dovrei avere un altro tool per i database... Punti di vista...
Un'altra distro oggi molto apprezzata è Backbox... Dai suoi repository ho preso crunch wordlist generator... Questa distro oggi compete con Backtrack sempre nello stesso settore, quello del pentesting... Le scelte fatte dallo sviluppatore sono sicuramente più azzeccate... Non presenta quell'infinita di tool come backtrack, ma di certo si presenta più stabile e più performante grazie all'xfce... Molto curata esteticamente, è anche priva di grossi problemi... Però rimane il solito punto interrogativo: cosa gli hanno fatto veramente???
Non posso credere che nessuno dei due presenti uno script di configurazione, che nessuno abbia usato uno script per rendere tutto più veloce nelle configurazioni, oppure uno script di modifica a livello kernel(probabilmente più modificato su backtrack che su backbox)... Visto che si sono chiusi dietro questi muri, forse visto i guadagni che ci sono dietro(oggi backtrack presenta training grazie alla sua distro molto famosi ed apprezzati), ho deciso di realizzarmi il mio script specifico... Questo il codice:
Non c'è niente di sconvolgente o di particolarmente nuovo da gridare allo scoop, ma solo un'organizzazione a me idonea(stile backtrack) con una lista di tool che di solito mi basta per risolvere tutti i "boot2root" games (così chiamati da g0tmi1k)... Unica pecca di questo script è la parte relativa agli alias... Non so perchè ma a me non ha funzionato, eppure copiando la riga relativa ed incollandola su una shell questa funziona... Verificherò in futuro, ma avere questi alias è per me importantissimo... Magari sistemando l'alias relativo dopo l'installazione del tool funziona, ma per ora mi accontento di questo...
Il prossimo passo sarà quello di aggiungere un resoconto dei tools installati relativi all'area pentest... Modificare il menù è difficile, non sempre immediato... Ed ogni DE potrebbe utilizzare modi diversi... La mia idea era creare una lista sempre richiamabile, ma sto ancora pensando all'idea... Volevo mettere una dock con un menu relativo, ma non ho trovato ancora niente di personalizzabile in maniera immediata... Perchè comunque i software non è importante averli tutti(almeno finchè si ha una connessione internet disponibile) ma è importante saperli usare... Discorso diverso per i wargames su rete wireless svolti sul territorio(tipo il cracca al tesoro) dove avere una backtrack è sicuramente molto importante...
Io ho scelto di non appoggiarmi più a distribuzioni già fatte... La più famosa, backtrack, giunta alla 5 versione, presenta un'usabilità pari a zero... Spesso si blocca, a volte i tool non funzionano, a volte non sono aggiornati... E non so che cosa gli hanno fatto per renderla così... Colori con poca visibilità rendono l'uso molto difficile... Di certo è la più famosa distribuzione di pentesting, e tutti i tool che si porta dietro fanno si che sia la più completa distribuzione dedicata al pentesting... Però questa 5 versione è uscita male... Io non potrei usarla per più di 5 minuti... Io uso queste distro soprattutto dentro VirtualBox, ma questa non è mai andata bene... E tutti quei tool sono spesso inutili... Dispersivi, perchè meglio averne uno buono che 100 da scoprire... Se ho sqlmap, non capisco perchè dovrei avere un altro tool per i database... Punti di vista...
Un'altra distro oggi molto apprezzata è Backbox... Dai suoi repository ho preso crunch wordlist generator... Questa distro oggi compete con Backtrack sempre nello stesso settore, quello del pentesting... Le scelte fatte dallo sviluppatore sono sicuramente più azzeccate... Non presenta quell'infinita di tool come backtrack, ma di certo si presenta più stabile e più performante grazie all'xfce... Molto curata esteticamente, è anche priva di grossi problemi... Però rimane il solito punto interrogativo: cosa gli hanno fatto veramente???
Non posso credere che nessuno dei due presenti uno script di configurazione, che nessuno abbia usato uno script per rendere tutto più veloce nelle configurazioni, oppure uno script di modifica a livello kernel(probabilmente più modificato su backtrack che su backbox)... Visto che si sono chiusi dietro questi muri, forse visto i guadagni che ci sono dietro(oggi backtrack presenta training grazie alla sua distro molto famosi ed apprezzati), ho deciso di realizzarmi il mio script specifico... Questo il codice:
Non c'è niente di sconvolgente o di particolarmente nuovo da gridare allo scoop, ma solo un'organizzazione a me idonea(stile backtrack) con una lista di tool che di solito mi basta per risolvere tutti i "boot2root" games (così chiamati da g0tmi1k)... Unica pecca di questo script è la parte relativa agli alias... Non so perchè ma a me non ha funzionato, eppure copiando la riga relativa ed incollandola su una shell questa funziona... Verificherò in futuro, ma avere questi alias è per me importantissimo... Magari sistemando l'alias relativo dopo l'installazione del tool funziona, ma per ora mi accontento di questo...
Il prossimo passo sarà quello di aggiungere un resoconto dei tools installati relativi all'area pentest... Modificare il menù è difficile, non sempre immediato... Ed ogni DE potrebbe utilizzare modi diversi... La mia idea era creare una lista sempre richiamabile, ma sto ancora pensando all'idea... Volevo mettere una dock con un menu relativo, ma non ho trovato ancora niente di personalizzabile in maniera immediata... Perchè comunque i software non è importante averli tutti(almeno finchè si ha una connessione internet disponibile) ma è importante saperli usare... Discorso diverso per i wargames su rete wireless svolti sul territorio(tipo il cracca al tesoro) dove avere una backtrack è sicuramente molto importante...
giovedì 15 dicembre 2011
Protostar Net2 writeup
Questo livello fa capire quanto importante siano le tuple... Imparate ad usarle perchè mi servivano per il livello zero di Vortex, questo tuple sono molto importanti negli script per la comunicazione... Spesso i dati sono inviati proprio come tuple, quindi saper identificare una tupla è molto importante... Infatti in un primo momento non capivo dove fossero gli altri 2 valori da sommare, che fine avessero fatto... Questo perchè avevo poco studiato il codice di Net2... Infatti non mi ero molto soffermato sul fatto che ci fosse una tupla definita dentro al codice C:
Da questo codice troviamo la porta sulla quale è in ascolto il servizio ed appunto la tupla... E troviamo la condizione da soddisfare, quell'if(result == wanted)... Io mi appoggio sempre a python per scrivere del codice, perchè è veloce... Anche se potevo decisamente migliorarlo... Ma non riesco ad assegnare una variabile al nome dentro ad un ciclo for... Piccoli problemi... Il codice tramite un ciclo for sarebbe stato più corto, ma insomma, io non ho mai studiato python... Questo il codice:
Questo codice fa largo uso di tuple... Nel primo dato ricevuto, salviamo solo la prima posizione, essendo comunque composto da un solo dato questa tupla... Nel secondo dato, salviamo i 3 dati della tupla... Poi assegnamo questi 3 valori a tre variabili(qua volevo mettere l'if, oppure usare la tupla direttamente senza passare per altre variabili, ma vabbè) e poi si somma tutto... Ho dato un print per avere un'idea della somma ed ho inviato i dati alla macchina sempre utilizzando struct... Per ultimo ho ricevuto il messaggio di successo... Questo livello mi è piaciuto...
Da questo codice troviamo la porta sulla quale è in ascolto il servizio ed appunto la tupla... E troviamo la condizione da soddisfare, quell'if(result == wanted)... Io mi appoggio sempre a python per scrivere del codice, perchè è veloce... Anche se potevo decisamente migliorarlo... Ma non riesco ad assegnare una variabile al nome dentro ad un ciclo for... Piccoli problemi... Il codice tramite un ciclo for sarebbe stato più corto, ma insomma, io non ho mai studiato python... Questo il codice:
Questo codice fa largo uso di tuple... Nel primo dato ricevuto, salviamo solo la prima posizione, essendo comunque composto da un solo dato questa tupla... Nel secondo dato, salviamo i 3 dati della tupla... Poi assegnamo questi 3 valori a tre variabili(qua volevo mettere l'if, oppure usare la tupla direttamente senza passare per altre variabili, ma vabbè) e poi si somma tutto... Ho dato un print per avere un'idea della somma ed ho inviato i dati alla macchina sempre utilizzando struct... Per ultimo ho ricevuto il messaggio di successo... Questo livello mi è piaciuto...
mercoledì 14 dicembre 2011
Protostar Net1 writeup
Questo livello è praticamente identico al precedente... L'unica differenza trovata sta nella funzione strcmp(). Questa funzione effettua una comparazione di stringhe, quindi ho inviato il dato come stringa... Nulla di più... Ma ho risolto il problema da remoto, così da sfruttare geany, il mio editor preferito... Infatti presenta quella tab 'terminale' che mi consente di avere sotto il codice un terminale, così da non dover passare dall'editor al terminare vero e proprio esterno... Questo il codice del livello da cui ricavare la porta... L'indirizzo ip della macchina remota potrebbe essere diverso, ma penso di non doverlo nemmeno dire...
Appunto si legge che la porta sulla quale è attivo il servizio è la 998, e che l'if controlla due stringhe... strcmp() ritorna 0 se le stringhe sono uguali... Si legge benissimo nella pagina dedicata a strcmp()... Io ho usato sempre python, perchè consente, a chi non lo conosce, di poterlo sfruttare molto.. Ed ho usato le tuple... Per chi non ricorda cos'è una tupla, rimando alla pagina relativa al primo livello del wargame Vortex presente su OverTheWire, lì ho spiegato bene perchè alla fine di unpack() aggiungo [0]... Quindi questo il codice:
Provo a spiegare questo script... Alla settima riga si connette all'indirizzo della macchina remota sulla porta 2998, salva il primo dato, lo stampa sulla shell(io stampo tutto :D ) poi tramite struct lo spacchetta salvando solo il primo dato della tupla, mi stampa sulla shell il valore, salva questo valore come stringa, lo invia alla macchina e stampa il messaggio di invio corretto... Penso che sia abbastanza semplice e questa volta non presenta problemi...
Sicuramente si può ottimizzare, saltando un paio di passaggi ed un paio di print... Ma io gradisco i print per vedere se qualcosa va storto... E si poteva saltare il passaggio separato dell'unpack inserendolo dentro alla funzione str, sempre che questa accetti il dato... Non ho provato, perchè secondo me va bene così...
Appunto si legge che la porta sulla quale è attivo il servizio è la 998, e che l'if controlla due stringhe... strcmp() ritorna 0 se le stringhe sono uguali... Si legge benissimo nella pagina dedicata a strcmp()... Io ho usato sempre python, perchè consente, a chi non lo conosce, di poterlo sfruttare molto.. Ed ho usato le tuple... Per chi non ricorda cos'è una tupla, rimando alla pagina relativa al primo livello del wargame Vortex presente su OverTheWire, lì ho spiegato bene perchè alla fine di unpack() aggiungo [0]... Quindi questo il codice:
Provo a spiegare questo script... Alla settima riga si connette all'indirizzo della macchina remota sulla porta 2998, salva il primo dato, lo stampa sulla shell(io stampo tutto :D ) poi tramite struct lo spacchetta salvando solo il primo dato della tupla, mi stampa sulla shell il valore, salva questo valore come stringa, lo invia alla macchina e stampa il messaggio di invio corretto... Penso che sia abbastanza semplice e questa volta non presenta problemi...
Sicuramente si può ottimizzare, saltando un paio di passaggi ed un paio di print... Ma io gradisco i print per vedere se qualcosa va storto... E si poteva saltare il passaggio separato dell'unpack inserendolo dentro alla funzione str, sempre che questa accetti il dato... Non ho provato, perchè secondo me va bene così...
Iscriviti a:
Post (Atom)