Bentornati all'ultima parte di questo video.
E questo per quanto riguarda le credenziali di accesso.
Insomma, abbiamo già capito che cose come Dinesh e Check potrebbero non essere memorizzate in questa
applicazione mobile perché vengono utilizzate sul lato online.
Pertanto, non abbiamo accesso ad essi.
Tuttavia, mi è capitato spesso di incontrare alcuni account di servizio, account di operatore, che hanno alcune
credenziali codificate nell'applicazione e che possono essere utilizzate anche per interagire con l'applicazione web o per
fare yeah.
Per gestire alcune cose su questa applicazione qui.
Ok.
Ma prima di andare a cercarli, diamo un'occhiata al file delle preferenze condivise e alle credenziali
crittografate che abbiamo già visto in alcuni frammenti di codice qui.
Perché, anche se non si tratta di una scoperta, si verifica molto spesso ed è bello avere
un approccio generale su come affrontare cose del genere.
Quindi, diamo un'occhiata.
Ok, apriamo questa applicazione e siamo bloccati con il controllo dell'utente e la password
violata a 1 a 3 dollari, credo.
Ok.
Abbiamo visto che queste informazioni potrebbero essere memorizzate nelle preferenze condivise e possiamo accedere a queste
preferenze condivise se abbiamo i privilegi di root.
Quindi, se otteniamo i privilegi reali, possiamo vedere che il dispositivo non è instradato.
Quindi questo rilevamento del routing non è molto buono.
Ok.
Questo è un bene per noi come attaccante.
Le preferenze di chat sono memorizzate in una directory protetta.
Quindi la cartella Sandbox, di cui abbiamo parlato nella struttura dell'applicazione.
Quindi all'interno di dati dati com android oops banca insicura.
Vediamo.
Sì, qui abbiamo molte cose.
Database, vediamo.
Abbiamo altri database?
No, credo che sia l'unico che abbiamo già visto nel percorso del fornitore di contenuti.
Ma ora stiamo avendo le preferenze condivise.
Ops, condividere la stampa.
Siamo ancora nel torto.
Sono ancora nella directory sbagliata.
Ecco fatto.
Stampa condivisa.
Ok, chiariamo questo punto e poi diamo un'occhiata.
Ora abbiamo le mie preferenze di chat, il riferimento alla banca insicura, le preferenze condivise e il
prefisso chromium AMA della webview.
Quindi, se torniamo indietro, abbiamo visto la nostra prima interazione con le preferenze condivise nell'attività di
registrazione e qui possiamo vedere che si tratta del file Le mie preferenze condivise.
Questo è stato utilizzato qui in primavera e questa primavera.
Cerchiamo questo.
Non viene utilizzato.
Vediamo.
Ok.
Quindi questo non viene utilizzato, il che è interessante.
Almeno non qui e qui.
Qui possiamo vedere che stiamo avendo le mie preferenze di condivisione.
Quindi la stessa stringa.
Sì.
Ok.
Forse si tratta solo di un errore di compilazione per cui questa stringa viene normalmente sostituita con
questa variabile, oppure il codice originale potrebbe non avere un riferimento alla stringa sottostante perché sono identiche.
Sì.
Sono identici.
Forse.
E l'errore di compilazione.
Ok.
Ma qui possiamo vedere che abbiamo questo file di preferenze condivise e poi stiamo ottenendo il nome utente criptato
e la password super sicura da questo file, il che significa che questo file dovrebbe contenere queste due stringhe, nome
utente criptato e password super sicura, giusto?
Assolutamente sì.
Vediamo l'esempio delle preferenze condivise.
Ed ecco che si va avanti.
Password super sicura e nome utente crittografato.
E possiamo vedere che c'è un po' di confusione qui e anche qui.
Ma qui abbiamo ora quei valori, possiamo vedere il segno di uguale alla fine e questo è un buon indicatore
di codifica base64.
Pertanto, nel corso di questo corso incontreremo spesso la codifica base64 e continuerò a spiegarla
più di una volta.
Il motivo è che si possono saltare alcuni video e quindi è bene avere queste informazioni.
Ok.
Ora la domanda è: come possiamo decriptare questa password, questa qui?
Perché vogliamo avere il valore del testo in chiaro dietro a questo, anche se questo non è in fase di ricerca, perché
è all'interno di un ambiente sicuro e sono necessari i privilegi di root per leggerlo.
Quindi non è un grosso problema.
Ma diciamo che vogliamo capire come viene decriptato, perché così possiamo criptare
la nostra password e inserirla qui e sovrascrivere il processo di accesso con la nostra password.
Quindi anche questo sarebbe molto bello da fare.
Dobbiamo quindi capire quale sia la crittografia utilizzata, quindi dobbiamo addentrarci nella tana del coniglio.
Vediamo, questa password viene utilizzata qui.
Quindi viene conservata e dotata di password.
Ok, allora abbiamo.
Se la password non è uguale ora va bene.
Poi, in questa parte, abbiamo il nome utente.
Non è criptato, è solo codificato in base64 e la password appare qui.
Ma non è questa la variabile della password.
La password viene utilizzata solo in questo campo qui.
E questa frase.
Qui possiamo vedere che stiamo impostando il testo nella classe crypto come stringa di decrittazione e poi la password.
Quindi sembra che qui ci sia una funzione di stringa decriptata ace.
Ma non lo sappiamo.
Lo sviluppatore può scegliere quello che preferisce.
Dobbiamo capire se si tratta davvero di una decrittazione.
Ok.
Quindi, approfondiamo questo argomento, in quanto si tratta di un algoritmo di crittografia molto comune e vi fornirò un
video bonus in cui esaminerò tutte le cose importanti che dovete sapere su di noi.
Quindi, se non avete familiarità, date un'occhiata a questo video bonus e
poi tornate a questo qui.
Va bene.
Ok, torniamo a questo.
Vediamo quindi se è davvero così, visto che stiamo usando la funzione stringa decifrata.
Quindi dobbiamo dare un'occhiata a questo caso.
Ok.
Quindi qui chiamiamo 256 decrypt, abbiamo un vettore di inizializzazione, forse abbiamo alcune chiavi
e la nostra stringa decodificata in base64.
Vediamo dove si trova questa funzione.
Questa funzione è qui.
Ok, ora vediamo.
Sì.
Ora possiamo essere sicuri che stiamo sicuramente usando una funzione crittografica y, perché qui possiamo vedere
che stiamo usando il cifrario dell'istanza s e possiamo vedere che il cifrario non è una classe di cifratura propria.
Il cifrario viene utilizzato da Java X crypto cipher.
Quindi questa è una classe di cifratura generica del sistema Android.
Ciò significa che stiamo utilizzando il metodo get instance.
E se si fornisce questo parametro, si utilizza la blockchain in modalità cifrata con un padding.
Ok.
Ora sappiamo che stiamo usando il sistema CBC, il che significa che abbiamo una chiave e un vettore di inizializzazione.
Lo spiegherò in dettaglio nel video bonus, perché non voglio dilungarmi inutilmente in questo
momento.
Ok, diamo un'occhiata.
Dove sono le chiavi e dove sono i vettori di inizializzazione?
Quindi abbiamo all'interno questa funzione di decriptazione della stringa e vediamo, stiamo fornendo, stiamo chiamando questa funzione
e stiamo fornendo i seguenti parametri.
Questo vettore di inizializzazione riceve dei byte e anche questo qui, questa chiave.
E poi forniamo la nostra stringa codificata in base64.
Ok.
Bello.
Questo significa che.
Diamo un'occhiata.
Questa funzione di decriptazione utilizza i byte del vettore di inizializzazione come primo parametro e la chiave.
Mi dispiace.
Non roviniamo questi colori.
Chiave come secondo parametro.
E questo è il nostro byte di testo come terzo parametro.
Questo è il nostro testo.
Questa potrebbe essere la chiave.
Ops, la chiave.
E questo qui è il nostro vettore di inizializzazione, per essere sicuri al 100% di dover tenere traccia di queste variabili,
perché lo sviluppatore può anche nominarle in modo diverso per renderle più oscure.
Quindi sicurezza per oscurità.
Ok.
Quindi possiamo vedere che questi byte vengono utilizzati nei parametri dell'algoritmo IB spec.
Quindi, se consultiamo questa funzione, possiamo vedere che questa ottiene il vettore di inizializzazione
da questi byte.
Va bene.
Ora sappiamo che questo è sicuramente il nostro vettore di inizializzazione.
Questa parte qui.
Ok, allora vediamo.
Chiave.
Sì, qui abbiamo una specifica di chiave segreta e questa specifica di chiave segreta restituisce la chiave segreta.
Ops, colore sbagliato come array di byte in questo.
Questa è la nostra chiave.
Infine, abbiamo questo testo cifrato in byte per il finale.
Sì, questo è il parametro in cui si svolge la nostra funzionalità di crittografia.
Questa è la nostra stringa, codificata in base64.
Quindi questa qui è la nostra stringa, questa qui che è stata recuperata dalle preferenze condivise,
viene inserita da un array di inviti.
Quindi inseriamo questi byte grezzi in questa funzione qui.
Ora abbiamo tutto insieme e il modo più semplice per fare un metodo A è decriptare in questo momento è semplicemente
usare il cyber chef.
Cyber Chef.
È uno strumento incredibile e straordinario per eseguire tutti questi tipi di operazioni.
Esiste una versione online, ma anche una versione offline se non volete dover decriptare i vostri segreti
online, cosa che non posso raccomandare in questo momento.
Quindi prendiamo la versione offline, ok?
Per ottenere la versione offline, basta andare alla pagina Cyber Chef qui sopra.
E poi vediamo, possiamo semplicemente scaricarlo qui.
In questo modo, l'applicazione web viene eseguita sul nostro sistema locale e possiamo interagire
con essa, ma non forniamo queste informazioni.
Va bene.
Ok.
Quindi, grazie per aver avuto anche l'opportunità di rendere il più semplice possibile questa attività a livello locale.
Davvero?
Grazie.
L'intera squadra di cyber chef.
Ok.
Quindi vediamo.
Tra i download che abbiamo ora, ne ho scaricati due.
È sufficiente estrarre questa directory.
Non è stato un bene.
Odio quando succedono cose del genere.
Sbarazziamoci di questo.
Ok, SLI.
Facciamo così.
Ok, allora portiamolo nei nostri strumenti.
Ok.
E ora estraiamolo qui.
Sì, certo.
Ora lo fa in questo modo.
Sì, lo so.
Mi è già capitato di premere il pulsante sbagliato, ma, sì, è così che va.
Bene, ora possiamo semplicemente usare il nostro file HTML di stato e l'intera operazione avviene in
background tramite JavaScript, in modo da poterla usare offline.
Non è assolutamente un problema.
Bene, ora facciamo così, perché è davvero sorprendente la velocità con cui si procede.
La prima cosa da fare è ottenere la stringa delle preferenze condivise, la stringa codificata in base64,
questa qui.
Ma senza questa percentuale.
Ok.
Sì, questa è la password.
Ok.
Ora abbiamo l'input come una stringa definita.
La prima cosa da fare è decodificare, perché così avremo i byte grezzi e potremo
usare i blocchi a sinistra per trascinarli e rilasciarli.
Quindi diciamo che questo qui è il nostro input e qui abbiamo ora l'output.
Inserendo il blocco da pagina 64, possiamo vedere che ora viene decodificato.
Questa è la rappresentazione di questa stringa qui.
Questa è la stringa di base decodificata a 64.
E qui possiamo vedere che abbiamo quei pensieri in cui non conosciamo il valore reale che c'è dietro, perché si tratta
di dati binari e non possono essere rappresentati in questa forma di testo.
Per questo motivo è stato codificato in base64, ma la nostra funzione di decodifica funziona con i byte grezzi.
Pertanto, dobbiamo prima decodificarlo.
Ok.
Poi usiamo come decriptazione.
E ora dobbiamo occuparci di alcune cose.
Il nostro input non è esagonale.
Il nostro input è ora grezzo.
Quindi ora prendiamo la stringa codificata in base64.
Lo decodifichiamo e lo inseriamo nel blocco successivo, in questo qui.
Quindi il nostro input è costituito da byte grezzi.
Lo abbiamo già visto qui.
Ho anche disabilitato la funzione automatica, perché in questo modo non si ottengono 1000 errori che non possono decodificare
la stringa con questi parametri.
Ok.
Ora, se si vuole rimanere all'Hex, si può anche usare quello che abbiamo o che dobbiamo ripetere velocemente.
Naturalmente si può fare anche in questo modo.
CM RN OC 64 HD e
poi 60 HP.
Si possono anche inserire i valori esadecimali e poi passare all'esadecimale.
Ma fondamentalmente, se fosse molto più semplice, non dovremmo convertire nulla prima.
Va bene.
Ora dobbiamo inserire la chiave.
La chiave?
Abbiamo già visto la chiave come questo, questo byte IV.
Scusate, questo.
Questa chiave.
Questo qui.
E possiamo vedere che questa chiave viene referenziata qui.
Questa è la chiave super segreta.
Questa è la nostra chiave.
Uno, due, tre.
Inseriamolo qui.
E ora la chiave non è in formato esadecimale.
La chiave è UTF otto.
Questa è la stringa di base.
Ora dobbiamo inserire il vettore di inizializzazione.
Qual è il vettore di inizializzazione?
Questo qui.
Quindi si tratta semplicemente di 16 volte.
Sì.
Una cosa è doverosa: questa non è una stringa.
Questo è adesso, tra l'altro.
Quindi dovremmo tenere a mente anche queste tipologie.
Questo significa che non sono sicuro.
No, non funzionerebbe se si fornissero i 16 zeri come stringa, perché nella stringa lo zero e la molla hanno
un valore diverso dallo zero in binario.
Pertanto, applichiamo questi valori come valori esadecimali.
E questo può essere fatto facilmente anche qui.
Abbiamo già definito i valori esadecimali e ora l'inserimento di uno zero richiede due zeri in esadecimale.
Quindi questo è uno zero in esagono.
Possiamo anche vedere come abilitare la lunghezza della chiave non valida.
Oh, è interessante.
Perché non è valido?
Sì.
Quindi c'è stato un errore relativo alla lunghezza della chiave, ma la lunghezza della chiave era probabilmente corretta.
Quindi, inserendone uno e rimuovendolo, otteniamo l'aggiornamento che ora è corretto.
Forse perché ho disattivato prima la funzione Outback.
Ok.
Ora possiamo vedere la lunghezza non valida, con un solo byte.
Quindi possiamo vedere anche questo qui, due zeri è semplicemente un byte.
Quindi uno zero e dobbiamo applicarne 16.
Quindi copiamo questo.
Uno, due, tre, quattro, cinque, sei.
Possiamo anche guardare qui finché non corrisponde e improvvisamente appare il nostro testo.
È tutto ciò che dobbiamo fare.
Incredibile, vero?
L'intera parte crittografica è già stata implementata e noi riutilizziamo semplicemente queste funzioni nel caso in cui non
ci sia la modalità CBC, ma possiamo anche giocare con queste modalità.
La BCE, ad esempio, non fa alcuna differenza.
Ctrl potrebbe.
Sì, e CTRL è la modalità contatore.
Si tratta quindi di un aggregato completamente diverso.
Il più sorprendente.
Ora abbiamo anche questa password qui.
Ok, va bene.
In questo modo è possibile decifrare le preferenze di condivisione crittografate in meno di 2 minuti.
L'unica cosa che dobbiamo rintracciare sono i parametri.
Ma se si utilizzano queste funzionalità crittografiche, cosa che ogni sviluppatore fa, ovviamente,
perché non è necessario reinventare questi campi, si possono semplicemente prendere le parole chiave
cifrate per ottenere cose come questa specifica chiave segreta.
Cos'altro abbiamo?
Cifra Dimentica l'istanza.
Quindi, se si cercano queste parole chiave in un'applicazione, è facile identificarle come elementi di crittografia e
decrittografia.
Va bene.
Ok.
Perfetto.
Per ultimo, ma non meno importante, diamo un'occhiata alle credenziali utente codificate.
Quindi dobbiamo aspettare che la domanda venga compilata qui.
Ok.
E quello che farò adesso è scendere nella tana del coniglio per quanto riguarda tutte queste funzionalità di blocco,
perché se non avete avuto successo nel cercare, c'è bisogno di un confronto con le credenziali codificate.
Ma possiamo anche farlo più facilmente, ad esempio con l'utente.
E qui possiamo vedere che vogliamo saltare tutto ciò che è il supporto Android prima.
E questo è tutto.
Insensibile alle maiuscole e alle minuscole.
Sì.
Questo è ciò che vogliamo avere.
Oh, oh, sì.
Possiamo vedere che ci sono molte pagine qui.
Quindi.
Sì.
Forse non è una buona opzione, ma comunque la vediamo qui.
Oh, è interessante.
Il nome utente, il nome utente, il nome utente e il nome utente è uguale a def admin.
Va bene, nome utente criptato.
Perciò dobbiamo analizzare tutti questi aspetti.
A volte non lo fanno, naturalmente, rispetto a cose come l'utente o la password, perché vogliono nascondere
le loro tracce.
Allora credo che l'opzione migliore sia quella di rintracciare le funzionalità di blocco, perché
è necessario un confronto con le credenziali e decidere se queste sono corrette o meno.
In questo caso abbiamo identificato l'amministratore delegato.
E possiamo vedere i dati postali.
Quindi ci stiamo connettendo o stiamo contattando il nostro server web al momento della registrazione e della ricerca.
Quindi dobbiamo effettuare il log-in.
Inoltre, è interessante notare che il server Web è in esecuzione su questa interfaccia,
il che significa che se andiamo
su 17717200 e poi apriamo 80, possiamo vedere il server Web in esecuzione anche sul nostro host locale.
Ciò significa che se torniamo indietro, dobbiamo registrare il login alla porta del server.
Qui possiamo vedere che il metodo non è consentito perché stiamo facendo e ricevendo richieste, ma abbiamo bisogno
di una richiesta post.
Quindi, ciò che accade in background, è che l'applicazione mobile si connette a questo server web qui ed esegue
queste operazioni, il che significa che questo server web è ovviamente disponibile pubblicamente.
Se si dispone di un'applicazione mobile del mondo reale e il server web è disponibile pubblicamente, è possibile
recuperare il traffico di rete e interagire direttamente con l'applicazione web senza avere
l'applicazione mobile.
Come già detto, lo faremo a richiesta nella parte centrale.
Ok, torniamo indietro ora.
Abbiamo ottenuto un altro app point dev def login.
È un aspetto che dovremmo esaminare.
Gli ordini del metodo OC non sono consentiti, quindi è necessario fornire il parametro post.
Vediamo cosa viene inviato.
Questo è il post di http a.
Per accedere e se il nome dell'utente è uguale a def admin.
Per l'entità, poi eseguiamo il nostro login.
Quindi non c'è nessuna password qui dentro in questo momento.
Sì.
Quindi non posso identificare alcuna password per questo utente in questo momento.
Quindi possiamo semplicemente accedere con il nome utente def admin?
Scopriamolo.
Apriamo questo qui.
Ripristiniamo la situazione.
Ok.
Morte.
Amen.
Vediamo.
Non fornisco alcun passaporto e.
Bello.
Siamo bloccati.
Si tratta quindi di un esempio perfetto di credenziali codificate, che lo sviluppatore potrebbe
aver utilizzato per lo sviluppo e aver dimenticato di escluderle dall'applicazione mobile e anche dalla parte del
server web.
A dire il vero, mi è capitato tre o quattro volte negli ultimi otto o nove anni di esperienza nel campo della telefonia
mobile.
Quindi non succede più spesso.
Dipende dal tipo di applicazione, credo, ma è sicuramente qualcosa da verificare.
Se la cosa funziona, hai il pony sotto l'albero di Natale.
Si può accedere direttamente ad alcune funzioni di sviluppo o cose del genere.
Ok.
Un'ultima cosa che vorrei provare ora è se riavviamo perché questo utente potrebbe essere amministratore.
Tra le attività che abbiamo visto, c'era qualcosa di molto strano e c'è questo pulsante che potrebbe essere visibile
a seconda che siate amministratori o meno.
E questo è qualcosa che vorrei provare rapidamente.
Quindi se si colpisce fuori dalle proprie credenziali.
Sì, appare l'atman sordo, ma non c'è il pulsante Crea utente.
Tuttavia, il pulsante utente non ha alcuna funzionalità e non funzionerebbe comunque.
Ma vorrei provarlo qui.
Ok.
Per ora è tutto per questa sfida.
Insomma, c'è una tonnellata di altre cose che sono incluse e potrebbero esserci ulteriori vulnerabilità,
nel caso in cui abbiate domande su qualcuna di esse, vi prego di inviare un messaggio nella sezione
dei commenti qui e poi, sì, riuscirò a rispondere.
Va bene.
Ok.
Quindi questa sfida era assolutamente perfetta per ricapitolare tutto ciò che abbiamo imparato finora.
E se ricapitoliamo quello che abbiamo imparato, voglio dire, questo è già incredibile, giusto?
Possiamo gestire attività, fornitori di contenuti, ricevitori di trasmissioni.
Conosciamo già la crittografia.
Abbiamo identificato le credenziali codificate e anche di più.
Ma non preoccupatevi, non siamo nemmeno vicini alla nostra forma finale.
Quindi abbiamo tonnellate di altre cose che esaminiamo durante il corso.
Qui ci sono due capitoli davvero enormi: Smiley e Freedom.
Con uno smiley diventerete un ninja assolutamente androide e libero di essere il cattivo ragazzo in cima ad
esso.
Quindi, se seguite questo corso insieme a me per tutta la durata, dopo averlo assimilato sarete
sicuramente tra i primi cinque della vostra azienda.
Per quanto riguarda il pen-test delle applicazioni Android, sono abbastanza sicuro di questo.
Per quanto riguarda i test di penetrazione mobile, smiley è un'abilità che non molti possiedono.
Quindi leggere e scrivere Smiley non è molto comune.
E nel prossimo capitolo vedrete cosa possiamo fare con Smiley.
Smiley ci dà quindi un potere illimitato nell'hacking delle applicazioni mobili.
Anche se ci sono dei rilevamenti di rooting davvero difficili, non ce ne preoccupiamo.
Quindi con Smiley possiamo fare tutto quello che vogliamo e non ci sono molte cose che possono fermarci in questo momento.
Va bene.
Ok.
Quindi, non vedo l'ora di vedervi nel prossimo capitolo, perché questo capitolo è stato
citato per leggere e scrivere.
SMILEY Così impareremo.
Smiley nei prossimi due, credo, 45 video.
Va bene.
Non vedo l'ora di vedervi lì.