fala pessoal eu sou luí defensive Security e seja muito bem-vindo à terceira aula do nosso workshop 100% gratuito de Pain Test em aplicações Android se você estiver assistindo essa aula pelo YouTube recomendo que você faça a matrícula nesse workshop 100% gratuito lá pela plataforma de ensino da Solid por lá você vai ter a lista de todas as aulas as informações opicionais o link para download do Solid Bank e ao final do workshop você vai receber um certificado de conclusão e te lembrando também segue a Sid lá no Instagram porque a gente posta bastante conteúdo legal da área de cy segurança e hacking na última aula a gente passou pela Mares estáticas desse aplicativo a gente burlou as proteções anti Rot a gente encontrou vulnerabilidad de armazenamento em seguro de Log em seguro de informações sensíveis a gente identificou a falta de proteção de SSL pin que permitiu que a gente intercept Asse o tráfego do aplicativo sem nenhum problema e durante a análise do código fonte do aplicativo a gente descobriu algumas informações essenciais para prosseguirmos com vem teste Como por exemplo o Secret que é utilizado para criptografar descriptografar a comunicação com api e nessa aula a gente vai subir um pouco nível A gente vai fazer análise dinâmica a gente vai explorar o aplicativo em tempo real a gente vai utilizar uma ferramenta que permite a gente alterar o fluxo de execução do app em tempo de execução e essa ferramenta é o Frida Então vamos instalar o Frida o Frida é uma ferramenta de análise dinâmica para Android e IOS e a gente vai utilizar ele para conseguir se comunicar diretamente com o dispositiv itivo Android e Através disso conseguir né fazer uma análise mais profunda em tempo de execução do aplicativo do Solid Bank a gente vai conseguir por exemplo fazer o bypass das proteções anti root proteções como SSL pinning que a gente Já verificou que não existe nesse app a gente consegue tranquilamente interceptar as requisições que ele faz pro backend porém em muitos aplicativos existe a proteção de SSL Pine que a gente consegue facilmente burlar utilizando essas ferramentas e essas técnicas de análise dinâmica a instalação do Frida ocorre em duas partes primeiro a gente instala o client do Frida na nossa máquina onde a gente vai realizar os comandos e ter acesso ao dispositivo e no dispositivo a gente vai instalar o servidor do Frida que é um binário que vai ficar escutando ali comandos que a gente vai enviar para aquele dispositivo então para instalar o Frida na nossa máquina a gente precisa do Python e o Python pode ser instalado baixando o instalador aqui do site python. org aqui em downloads você vai fazer o download do Instalador referente a sua sistema operacional então no caso se você utiliza Windows você vai fazer o download pro Windows no meu caso aqui eu já tenho o Python instalado no meu sistema então eu vou abrir o terminal e vou utilizar o PIP do Python PIP É o instalador de pacotes do Python para instalar o pacote Frida e Frida traço Tools no caso que eu utilizei o pip3 porque eu tenho várias versões do Python instalado na minha máquina se você instalar somente um uma versão né e configurar ali no momento da instalação vai aparecer uma opção para você configurar as variáveis de ambiente do Python né você vai AB o CD no caso do Windows né e utilizar o comando PIP somente ou até PIP 3 se você instalar o Python 3 também deve funcionar então no meu caso aqui PIP 3 install Frida e Frida Tools e ele vai instalar esses pacotes para mim já estou com Frida instalado então utilizando Frida version por exemplo eu tenho aqui a versão do Frida né Então a partir de agora eu já tenho o client do Frida instalado aqui na minha máquina eu preciso agora instalar o servidor do Frida dentro do meu dispositivo e executar esse servidor para com que através do client eu consiga executar comandos no servidor do Frida rodando no meu dispositivo emulado E com isso fazer o atat ali nos aplicativos nos processos dos aplicativos e de fato conseguir fazer a análise dinâmica fazer a manipulação do fluxo de execução do código das chamadas de funções de classes enfim e para instalar o freida server a gente vem aqui em frida. re release spage para entrar no github e aqui você vai encontrar a versão do Frida referente à versão que você instalou no meu caso aqui né em alguns casos também pode acontecer com você algumas versões do Frida não estão funcionando muito bem né nos processadores arm então eu vou descer aqui para uma versão mais antiga que eu sei que tá funcionando bem que é a 15.
2 aqui em assets a gente tem a lista todos os downloads e a gente vai procurar por Frida server e aqui no Frida server a gente vai escolher o arquivo referente à arquitetura do nosso computador Então vamos lá no meu caso vou fazer o download do freida server 15. 2. 2 na arquitetura arm 64 bits se você estiver utilizando Windows aí você pode fazer um download até da última versão do freida Ou se você quiser fazer um download da versão antiga também enfim vai funcionar você vai fazer o download da versão x86 64 bits ou tem a versão 32 bits aqui também no meu caso como eu tenho o processador arm um Mac eu vou utilizar essa versão aqui então vou fazer o download é um arquivo compactado então você precisa descompactar ele no caso aqui eu vou só clicar você pode descompactar com inar com set Zip Enfim então vamos lá agora que a gente Baixou esse esse arquivo já descompacto a gente tem um binário esse binário a gente vai executar dentro do nosso dispositivo então ele vai rodar ali como um servidor escutando todos os comandos que a gente vai enviar através do client do freida Então vamos lá eu vou utilizar meu terminal aqui para enviar esse arquivo pro meu dispositivo só que antes disso eu quero instalar um dispositivo com uma versão mais antiga por qu quando a gente fala de análise dinâmica Existem algumas proteções né do próprio Android ou até questão de arquitetura que podem dificultar né esse processo da gente conseguir fazer o Hook de uma função Java no caso interceptar a execução de uma função e modificar seu funcionamento então eu vou criar um novo Custom Phone no mesmo formato workshop Frida só que eu vou utilizar a versão do Android 11 então no meu caso aqui como já tenho problemas de utilizar o Frida por conta do meu processador enfim eu prefiro colocar um Android mais antigo uma versão do Frida mais antiga também mais estável né e executar os os testes Então vamos seguir aqui next next vamos instalar Beleza já tá executando já tá iniciando a nossa máquina nosso dispositivo Android na verdade e eu já vou utilizar aqui comando do adb push para enviara server 15.
2. 2 Android arm 64 lá pra pasta barra temp do meu dispositivo S Vou esperar ele iniciar aqui beleza já iniciou então só vou dar um enter aqui enviei para lá vou dar um adb Shell para entrar dentro do meu terminal ali no dispositivo vou na pasta temp e vou dar um C mod mais x para n liberar o modo de execução desse arquivo e vamos lá executar o freid server agora que o Frida server tá em execução eu consigo utilizar o Frida né que eu instalei aqui com o Python posso utilizar por exemplo um freida PS traço u para listar todos os processos ativos dentro do meu dispositivo Android Olha só esse client tá se comunicando diretamente com esse servidor aqui e eu consigo ter acesso a tudo isso então se eu utilizar aqui um fre PS o a eu vou listar todos os aplicativos abertos no momento eu vou instalar aqui o Solid Bank só que vou instalar o Solid Bank original sem a proteção anti root para mostrar para vocês como a gente pode fazer né esse bypass utilizando o Frida de uma forma um pouco mais rápida Então vamos lá eu vou instalar novamente aqui o Solid Bank já tô com o aplicativo original olha só e eu não consigo abrir esse App ele sempre vai ficar detectando que eu estou né no dispositivo roteado só que aí que entra o Frida o Frida é uma ferramenta de análise dinâmica que permite a gente fazer o Hook de funções né Java e modificar o fluxo de execução disso então a gente consegue fazer basicamente a mesma coisa que a gente fez na última aula né modificando ali Ah o código para com que ele não consiga detectar que a gente tá num ambiente rar simplesmente alterando como que Essas funções de detecção funcionam e PR fazer isso aqui no Frida a gente vai utilizar JavaScript o Frida ele aceita scripts em JavaScript para tomar o controle do fluxo de execução do código daquele aplicativo e a gente vai conseguir Através disso fazer o que a gente quiser então eu vou criar um script aqui vou chamar de Root bypass melhor exploit PJS e aqui a gente vai começar o nosso código então por exemplo Antes de tudo eu vou só printar aqui na tela console. log Isso aqui é JavaScript tá pessoal então vou mostrar aqui hello world e quando eu utilizar o Frida né eu vou fazer uma atet num processo vou utilizar o Frida sem o PS porque eu não vou listar os processos o né uma conexão USB e eu vou dizer aqui qual que é o o o aplicativo que eu quero executar né então se eu der um freida PS TR suu ele vai me listar aqui todos os processos traço o a ele vai me listar os processos aqui dos aplicativos instalados então no caso aqui eu tenho Solid Bank posso passar Então esse caminho aqui com.
app. Solid Bank pro meu Frida para ele criar um processo com esse App só que ele vai est atrelado a esse App eu vou conseguir utilizar dos Comandos do Frida para modificar esse fluxo de execução ali de absolutamente tudo que tá acontecendo naquele aplicativo a nível do meu dispositivo a nível de client Tá então vamos lá o traço o f para passar o identifier e ele já vai executar o aplicativo aqui para mim só que na verdade ele pediu aqui para eu dar um res é como se ele iniciasse o aplicativo e com pause e a gente precisa iniciar essa execução com porcentagem resume em algumas versões do Frida você nem vai ter isso aqui automaticamente ele já inicia a gente pode também utilizar aqui o no pause para evitar isso automaticamente ele já inicia e ele dá o erro ali que a gente tá num ambiente roteado se eu utilizar o parâmetro traço l e passar o script a gente acabou de criar o exploit. jar aqui para mim hello world só que esse hello world apesar de ter e sido mostrado aqui no meu terminal ele foi executado ali no meu dispositivo né então através desse script a gente vai codar todo o nosso exploit para burlar essa proteção anti root Então vamos lá vou dar um Exit e vou modificar o exploit primeiro pra gente dizer pro Frida que a gente quer eh tomar eh ações dentro da trad de execução daquele aplicativo a gente vai utilizar o método perform Java perform e isso aqui vai receber uma função function então tudo que eu executar aqui dentro eu já tô dentro do aplicativo Tá e agora eu preciso definir qual classe que eu vou modificar Então vamos dar uma analisada no código fonte do aplicativo que a gente já conseguiu através do processo de decomp a gente quer fazer o bypass do root útil né do método que faz a verificação então aqui a gente tem o check root method 1 o 2 e o TR só que no final ele tem o e device rooted que é o teste né a função de fato que verifica a partir de cada método se o o ambiente é roteado ou não então vamos sobrescrever essa função se a gente analisar o funcionamento dela a gente vê que ele dá um return numa operação condicional ou seja se qualquer um desses check root method retornar true ele vai retornar true Então posso simplesmente sobrescrever essa função esse método para retornar false sempre Então é isso que a gente vai fazer então aqui no meu código eu vou utilizar um outro método Java onde eu vou e capturar essa classe que eu vou utilizar para fazer esse Hook daquele método então aqui eu vou passar todo o caminho então com pon app.
Solid Bank ponto root útil isso aqui vai para uma variável Então vou definir uma variável chamar de Root útil e logo após eu consigo utilizar um outro método onde eu vou sobrescrever o método então Util aqui eu vou passar o método que eu vou sobrescrever eu t pegando a classe ú então aqui em cima eu tenho a classe R útil e aqui dentro Eu tenho os métodos eu vou sobrescrever o is device rooted então is device rooted e eu vou utilizar o implementation para fazer essa modificação isso aqui também vai receber uma função function Opa function e essa função vai ser o meu código modificado então o que que eu vou fazer aqui eu vou basicamente dar um return false eu tô dizendo que quando essa função for chamada né com implementation tô definindo um Hook dessa função e a partir desse momento como se fosse um Break Point num processo de engenharia reversa né quando essa função for chamada eu vou parar o fluxo de execução vou executar isso aqui ao invés do que tá lá no código e aqui eu vou até dar um console na tela olha só rot bypassed anti root bypassed salvei e vou executar Olha só untot bypassed e agora tenho acesso aqui ao painel de login e signup do Solid Bank então consegui fazer o bypass da proteção anti root utilizando o Frida fazendo uma modificação em tempo real da função Java desse aplicativo Então nesse nesse caso que a gente nem precisaria modificar o aplicativo né fazer todo aquele processo e recompilar o aplicativo assinar o aplicativo para burlar essas proteções em tempo real aqui com a análise dinâmica utilizando o freida a gente consegue fazer isso né e a gente conseguiria fazer isso para qualquer proteção a nível de client ali né uma proteção de SSL pinning por exemplo que evitaria com que a gente conseguisse interceptar requisições https mas com frid a gente consegue né criar um exploit ali né com tempo criar uma forma de fazer o bypass mesmo que seja um código muito complexo inclusive existem pela internet diversos scripts já prontos tá de bypass anti root de bypass de SSL pin né paraa utilização com freida inclusive existem ferramentas que são criadas em cima do Frida para facilitar a exploração de aplicativos como é o caso do objection Então posso dar um PIP 3 install objection beleza instalou aqui e agora eu posso dar um objection já com o servidor do Frida n em execução ali posso dar um objection gadget passo o caminho do meu aplicativo no caso Solid Bank e dou um explore a partir disso ele já vai executar o app só que ele vai executar obviamente sem a proteção de Root porque eu não tô passando um script só que o objection já vem com alguns scripts já padrão para fazer bypass de tpin de proteção anti root então se eu colocar aqui por exemplo Android root disable eu vou fazer o bypass né Ele registrou um Job ali para tentar fazer o bypass né então vamos fazer o seguinte vou falar para ele executar assim que ele iniciar o Android com traço os Android root disable Olha só vamos ver se a gente consegue fazer o bypass não conseguimos né então através desse bypass né padrão do objection a gente não conseguiria fazer o bypass ali da proteção an root desse app então a gente de fato Teria que criar o nosso script e no obje a gente consegue importar esse script também então passando aqui Import exploit PJS no caso aqui eu preciso passar o caminho inteiro então WD eu vou até passar direto aqui Import exploit PJS ele já injetou o código e fizemos bypass né e o obje ele permite com que a gente faça um monte de outras coisas a gente pode também utilizar aqui o Android SSL pin disable né caso a gente precise tentar fazer eh burlar ali fazer o bypass de uma proteção né via certificado de eh requisições ali ao backend requisições criptografadas né no nosso caso que a gente não precisa a gente consegue interceptar mas o objection te dá aqui várias funcionalidades que E te ajuda bastante no processo de análise dinâmica de aplicativos Android e IOS show agora que a gente conhece o a gente já sabe utilizar os scripts em JavaScript para modificar o fluxo de execução do we vamos utilizar esse conhecimento para criar uma modificação das funções criptografam e des criptografam a comunicação com api e a partir disso a gente vai conseguir ver em tempo real que tá sendo comunicado entender como que o aplicativo se comunica com o backend E como que o backend responde Beleza então agora que a gente já conhece o freid a gente já sabe como utilizar os scripts dele para modificar o funcionamento do app vamos utilizar isso a nosso favor para atacar o backend do Solid Bank finalmente Então vamos lá bom na última aula a gente Já identificou que e é quando a gente intercepta uma requisição do aplicativo com o backend essa requisição os parâmetros né o corpo da requisição tá criptografado e a gente encontrou a chave criptográfica no código né uma chave que tá hardcoded e como a gente consegue modificar o código pelo Frida Vamos fazer um script para mostrar na tela o conteúdo das respostas né E então a gente vai conseguir entender mais como que funciona essa comunicação com backend Então vamos lá vamos modificar o nosso exploit PJS primeiro aqui a gente tá fazendo o bypass da proteção do Rot só que agora a gente vai e fazer uma modificação da função que des criptografa o conteúdo da resposta que o aplicativo recebe do backend mostrando na tela pra gente o seu conteúdo em texto plano então eu vou abrir aqui burp Switch vou configurar proxy para eu interceptar as requisições editar o wi-fi Advanced options manual 10. 0. 32 808 salvar vamos executar o nosso app Só que no caso que a gente precisa executar com Frida né para fazer o bypass da proteção anot Então vamos lá Frida traço F com Solid Bank e aqui no traço l o exploit PJS vou dar um no pause aqui e olha só vamos ver as requisições do aplicativo Olha só em que data né então a gente precisa descriptografar isso aqui analisando o conteúdo lá do código do aplicativo então aqui no código né dentro de encrypt decrypt onde a gente encontrou a chave né a gente poderia criar um código externo para enfim para descriptografar essas respostas mas a gente consegue utilizar o Frida para mostrar pra gente em tempo real o conteúdo dessas respostas né E então fica muito melhor para testar o backend dessa forma Então vamos modificar a função de decrypt dessa classe Então vamos lá vou voltar pro meu terminal vou modificar o exploit PJS e aqui a gente vai criar uma nova variável chamada encrypt decrypt Java use vamos passar o caminho paraa classe encrypt decrypt e logo aqui embaixo Vamos definir Nossa implementation então encrypt decrypt pon decrypt que é a função que a gente vai modificar lá né Então sempre que a gente fizer uma requisição a resposta vai ser descriptografado e a gente quer que isso seja mostrado na tela pra gente então vamos fazer essa modificação implementation mation e vamos passar nossa função e o que que a gente vai fazer aqui dentro a gente vai pegar o conteúdo ali do argumento do parâmetro que essa função recebe então no caso é o Ink data né então vou mostrar na tela console P log en data e com essa esse esse texto criptografado a gente vai criar uma nova variável chamar de text onde a gente vai passar novamente a função de decrypt Ou seja a gente vai pegar a função de decrypt original dentro da função de decrypt modificada para descriptografar o esse conteúdo então que eu vou passar o an data e logo após isso eu vou dar um return no text que é o texto plano e também vou mostrar isso na tela console P log text vai ser igual o text Olha só então vamos ver se isso aqui vai funcionar Vou salvar e vou rodar né com o Frida então dando um enter ele vai iniciar Solid Bank bypassed Vamos tentar fazer o login aqui olha só mostrou aqui na tela para mim o texto descriptografado Então a gente consegue já descriptografar toda a resposta né que eu recebo lá do backend então aqui tá criptografado só que no meu terminal eu recebo e em texto Plano Perfeito Então vamos logar aqui na nossa conta Luiz 1 2 3 4 5 6 olha só my Balance 000 e olha só as respostas aqui então agora como a gente fez para descriptografar vamos também mostrar na tela o conteúdo das requests pra gente entender como que o aplicativo se comunica com back vamos lá modificar o exploit a gente vai basicamente fazer a mesma coisa então vou copiar isso aqui na verdade só esse código de baixo porque o encrypt decrypt a gente vai reutilizar e aqui ao invés do decrypt a gente vai utilizar o encrypt só que ao invés de gente receber o enk data nessa função a gente recebe só o data né E como resultado disso a gente vai mostrar na tela esse data antes de passar o encrypt e depois vamos criptografar e retornar pro código funcionar normalmente né retornar o Ink datata Então beleza tô pegando o o texto plano mostrando na tela criptografando ele e voltando pro código já que o código precisa desse texto criptografado aqui em cima eu vou remover essa parte onde ele mostra código criptografado ele só me mostrar o código em texto plano só que eu vou colocar aqui response e aqui embaixo request para eu entender né em que momento ali ele tá utilizando daquele daquele Jon né se ele tá descriptografando ou criptografando então salvar isso aqui vou executar novamente estamos logado vendo aqui meu balance olha só ele mostrou aqui para mim o conteúdo da resposta descriptografado posso por exemplo ver aqui minhas transactions Olha só então a lista de transações não tem nenhuma obviamente e Posso testar também uma um input né uma request então vamos fazer um teste vou entrar aqui com account Number vou adicionar um e ele mostrou aqui olha só ele passa um account Number 1 lá pro servidor Beleza agora a gente sabe como é que funciona claramente a do aplicativo com servidor então agora nosso objetivo é utilizar de tudo isso PR encontrar vulnerabilidades nessa comunicação fazer manipulação de parâmetros e analisar a resposta do Servidor Beleza então vamos lá hackar o servidor do Solid Bank bom vou iniciar aqui novamente meu Frida com bypass doot vou logar na minha conta e aqui a gente temers opções diversas funcionalidades Inclusive a gente poderia testar um monte de coisa aqui a gente poderia testar e roubo de conta através da funcionalidade de password reset a gente poderia tentar e por exemplo ver o saldo da conta de outras pessoas explorar outras funcionalidades aqui mas obviamente a funcionalidade mais crítica é a de transferência de dinheiro então vamos ver como que funciona isso se eu apertar aqui no transfer money Olha só ele diz que eu não tenho nenhum e contato para enviar dinheiro então teresso funcionalides dessaa aqui só que olha só quando eu clico ali ele faz uma requisição web listar ali os benefici aqui ol só um vi benef e não retorna nada quando eu né dentro do dashboard aqui quando eu clico no transfer money ele tá verificando primeiro se eu tenho algum contato na minha agenda né para fazer uma transferência então eu posso tentar adicionar um contato só que eu não sei e nesse momento eu não sei a conta de outra pessoa então posso tentar aqui por exemplo um um um vou adicionar e vamos ver aqui eu tenho vi beneficiary né ten um beneficiário aqui só que mesmo assim eu não consigo né acessar a tela de transferência por quê Porque o admin né aqui no approve B olha só é um endp exclusivo para administradores somente o administrador consegue aprovar os contatos consegue aprovar ali as pessoas que conseguem né receber dinheiro nesse banco então a gente precisa burlar isso de alguma forma bom se a gente não consegue entender como né através aqui do burp suite interceptando a requisição se a gente não consegue entender como que que funciona ess essa comunicação de transferência a gente pode olhar lá no código do aplicativo até porque a gente tem acesso a esse código então vamos lá temos o código aqui vamos na classe de send money e analisar o código olha só ele faz uma verificação se o dispositivo tá protegido com uma senha com uma biometria e aqui embaixo ele pega aqui o benef are account Number mas na função de fato que ele envia o dinheiro que ele faz a requisição ali pro backend tá tudo ofuscado né então através do código a gente não vai conseguir entender muito bem Como que funciona essa comunicação né do app com o backend para enviar dinheiro n a gente pode até dar uma olhada aqui no dashboard para ver como que ele abre essa essa tela do send money e aqui a gente não vai ver muita coisa então realmente é uma função é uma classe que tá escondida a gente poderia utilizar o Frida para fazer o bypass ali daquela verificação se existe um beneficiário pra gente ir direto pra tela de envio só que como a gente não consegue entender muito bem o código aqui ficaria muito difícil a gente criar o nosso script Então a gente vai voltar bem mais para trás lá no início onde a gente decomp né o apk para analisar o Android Manifest para identificar se a activity desse send money tá de alguma forma permitindo com que a gente Force né a abertura daquela tela sem passar ali pela verificação do beneficiary Enfim então vamos lá eu vou entrar aqui no document onde eu tinha todas as informações do meu APK decompiled nesse caso aqui ele não tá né legível Então vou utilizar o PK to para decomp ele novamente de Bank PK F para forçar o processo vou dar um Cat no Android Manifest na verdade tá aqui em Solid Bank Manifest e aqui dentro a gente vai ver as definições das activities Então logo aqui embaixo send money ele tá com Android exported igual a true e isso aqui para telas para funcionalidad sensíveis é uma vulnerabilidade porque isso aqui tá dizendo pro Android pro dispositivo que qualquer aplicativo consegue chamar essa tela né então se eu consigo chamar essa tela sem passar pelas verificações sem passar até pelo login sem passar pela verificação anti root por exemplo sem passar pela verificação se eu tenho né um benef ali ativo na minha conta eu consigo burlar todas essas verificações e acessar diretamente aquela tela ali crua e entender de Fato né Quais que são as funcionalidades daquela tela Então vamos lá vamos tentar forçar a abertura dessa tela aqui utilizando o activity Manager né qualquer outro app conseguiria consultar né também fazer uma uma uma tentativa né de laou D desse activity Mas pelo adb um adb Shell aqui utilizando o activity Manager am a gente consegue passar aqui o nome do do do aplicativo né então com APP Solid Bank barra ponto a classe a tela né activity que a gente quer forçar a abertura então por exemplo se eu passar aqui dashboard Esqueci de colocar o start Olha só vou até fechar o aplicativo Se eu tentar rodar o dashboard ele entra no dashboard que é justamente onde ele verifica se o dispositivo tá roteado e fecha Se eu tentar colocar aqui outra tela por exemplo e Bank login Ele entrou na tela de login e se eu tentar acessar o send money olha só ele abriu para mim a tela onde eu faço o envio de dinheiro e aqui eu tenho duas opções então eu já sei quais os parâmetros que são enviados pro servidor o número da conta né e a quantidade de dinheiro que eu quero enviar então vamos fazer um teste aqui vou enviar uma transferência pra conta um e vou enviar aqui ó send money ele vai pedir aqui o sensor né então vamos lá vamos configurar aqui rapidinho e a senha na verdade configuração de segurança aqui em Security screen Lock pattern beleza executar aqui novamente um um um ó colocar a senha e transferência com sucesso vamos analisar aqui no burp Suit como é que foi feita essa requisição Olha só na verdade ele tá enviando criptografado a gente não consegue ver e como a gente não iniciou essa ferramenta com Frida ele não automaticamente mostrou aqui na tela pra gente mas a gente pode entrar agora aqui na aplicação e verificar se no histórico na verdade vamos executar com Frida fazer o bypass do Rot aqui nos transactions vamos verificar se a gente conseguiu fazer a transferência olha só a gente conseguiu a gente conseguiu fazer transferência Mas até então o único problema que existe aqui é que o banco né lá no backend não tá validando se para quem eu tô enviando o dinheiro é um beneficiário da minha conta e é um beneficiário ativo né então isso já é um problema de segurança porém nesse ário aqui eu só consigo enviar dinheiro né não consigo receber né porque os parâmetros que que ele envia pelo servidor pelo menos pelo que mostrou ali na tela é somente a conta que eu vou enviar né e o e o valor que eu vou enviar e ele muito provavelmente no backend vai fazer verificação né da do meu usuário através do meu token de sessão ali do jwt e eu não consigo modificar esse Token para um outro usuário para forçar por exemplo uma transferência de outro usuário pra minha conta mas vamos continuar investigando aqui essa funcionalidade bom no meu balance Agora eu tenho 9999 né então eu enviei um dólar para um usuário qualquer aí vamos fuçar esse aplicativo para tentar recuperar esse 1 dólar e com certeza mais dólares aí de outras contas Então vamos faz o seguinte o nosso burp aqui a gente consegue interceptar as requisições só que elas estão criptografadas e e como a gente não consegue acessar o activity utilizando o script do freeda aqui para né ver ali como que ele envia essa requisição pro servidor e também mesmo assim mesmo que a gente conseguisse ver a gente não consegue criar uma requisição criptografada a testar os parâmetros para testar por exemplo vulnerabilidade de injeção Então vamos resolver isso agora mesmo vamos criar um código onde a gente vai conseguir criptografar a nossa e os nossos parâmetros o nosso o nosso corpo da requisição ali pra gente conseguir interagir com os end points do backend a gente já tem o código que é utilizado para fazer né o o encrypt e o decrypt tá logo aqui em encrypt decrypt no aplicativo Então vamos utilizar uma ferramenta para converter isso aqui para uma linguagem mais fácil de executar uma linguagem né interpretada então vou abrir aqui meu navegador Java to Python converter vamos converter beleza convertido vou criar aqui um novo terminal criar um arquivo eu já tenho o Python instalado né então vou criar aqui encrypt ponto p vou colar todo o conteúdo e aqui né através desse script eu vou pegar o sarg um e passar na função de encrypt e vou mostrar isso na tela então tô pegando o primeiro argumento que eu passar para esse script pela função de encrypt n que eu converti ali de Java e ele vai mostrar o conteúdo na tela só preciso importar a biblioteca aqui no início e Beleza então se utilizar aqui o Python 3pt passar qualquer coisa ele vai criptografar então Posso copiar Essa função encrypt para decrypt e aqui no decrypt ao invés de eu passar o encrypt S decrypt então tem dois scripts aqui um que vai criptografar e o outro que vai de criptografar Então vou Abir aqui o meu burp Switch aqui naquela transação que eu consegui fazer em transfer olha só ele enviou esse conteúdo lá servidor eu vou utilizar o decrypt para descriptografar Olha só two account e o amount um então se eu fizer isso aqui olha só para criptografar preco colocar em aspas simples aqui para não dar problema com as aspas duplas ali da do Jon né eu consigo chegar naquele mesmo resultado que o aplicativo enviou pro servidor só que agora eu consigo manipular os valores desses parâmetros então por exemplo poderia alterar isso aqui para alguma outra conta poderia tentar fazer uma transferência para mim mesmo né então vamos lá my profile meu account Number é 16 45 71 o amount 1 vou copiar isso aqui vou abrir o Bup colocar ISO aqui no Repeater Então vou conseguir repetir essa requisição só que agora eu vou alterar o ank data Beleza vou enviar recebi esse resultado vou copiar isso aqui e vou utilizar isso aqui no decrypt e olha só enviado com sucesso vamos ver o que aconteceu né aconteceu nada fiz uma transferência para mim mesmo mas o meu saldo continua o mesmo então ele não duplicou esse valor Então nesse cenário aqui a gente só consegue fazer uma transferência para alguém mas e se a gente manipular o valor do amount colocar um número negativo né se o backend não tiver tratando bem isso não tiver fazendo uma validação desse valor a gente pode causar um problema muito grande então vamos lá fazer aqui account lá da conta 1 1 e eu vou colocar um amount menos 10.
000 criptografei vou copiar aqui o meu Body abrir o burp e vamos repetir a requisição Lembrando que essa requisição tá sendo feita aqui com a a minha sessão né a conta ali do Luiz enviei vamos ver o resultado pon 3 decrypt Olha só com sucesso vamos dar uma olhada na nossa balance acabamos de pegar 10. 000 de outra conta simplesmente alterando o valor né para negativo isso aqui pode acontecer pessoal às vezes não nesse cenário mas em outros cenários né falta de validação de entrada de usuário é um dos maiores problemas nas aplicações Então esse cenário não é tão irreal assim beleza agora a gente consegue já pegar dinheiro de outra conta então Através disso aqui a gente consegue criar um script né sabendo que o padrão de conta é sempre seis dígitos né a gente consegue criar um script em Python vou até criar aqui encrypt Então vamos lá criar um script bem rapidinho aqui para pegar o money das outras contas então a gente já sabe o padrão né de de conta ali então vou colocar aqui 1 1 1 um 2 2 2 2 2 99999 999 Beleza a gente tem aqui já algumas contas a gente poderia fazer todas as 1 milhão de possibilidades né como é o caso de seis dígitos mas para facilitar vamos fazer só com essas com esses valores aqui né então accounts Beleza vou criar aqui então agora for né então for account accounts aqui baixo eu vou dar um print no conteúdo criptografado Então vou dar um crypt no payload e aqui eu vou colocar aspas simples para não confundir com aspas duplas ali dentro como eu vou utilizar o Format aqui eu tenho que colocar duas duas chaves para ele não ali com o replace do account Então vamos lá account vai receber o account e depois eu passo o amount que vai ser de men 10. 000 beleza aqui no final vou dar um Format no account para ele passar ali de acordo com com a nossa lista executar Python 3 encrypt ele já criou aqui o payload e vou abrir o burp aqui na requisição de transferência vou colocar ela lá pro Intruder selecionar isso aqui como replace adicionar os payloads só clicar aqui em paste vou desativar aqui o payload encoding para ele não encodar Aqui o Né o o código criptografado e acabar bugando d o start e e olha só ele tá fazendo as requisições ali agora vamos dar uma olhada no nosso saldo olha só a gente já tem 119.
000 dó né então com isso aqui a gente consegue zerar todo o banco do Solid Bank né explorando uma vulnerabilidade de falta de validação né da entrada e também um problema de controle de acesso tá porque eu não não poderia né fazer uma transferência ou ter uma de transferência com o usuário que não é meu beneficiário ou eu não sou o beneficiário desse usuário Beleza então a gente simplesmente criou um exploit que zera a conta de todo mundo do Solid Bank imagina quanto que seria o boun de uma falha dessa no programa de B Bound a o teste mais crítico depois de conseguir zerar a conta de todo mundo seria conseguir comprometer uma conta ou até comprometer a conta do administrador então para isso vamos entender um pouco como é que funciona esse processo de de autenticação com o token jwt que é basicamente a informação que o servidor utiliza para autenticar um usuário só que a gente não consegue forjar esse token já que a gente não tem a chave de criptografia que foi utilizada Então se a gente modificar o JT o servidor não aceita porém como a gente já viu no código do aplicativo ele utiliza uma chave extremamente fraca para criptografar as respostas a comunicação com papi do backend Será que no backend utiliza uma chave fraca também para criptografar o J bom a gente pode testar isso e se a gente conseguir identificar essa chave a gente consegue forjar qualquer token jwt e autentificar com qualquer usuário principalmente usuário administrativa Beleza a gente já conseguiu transferir dinheiro de outras contas pra nossa conta e o outro ponto que chamaria atenção um ponto crítico seria se a gente conseguisse de alguma forma tomar controle de uma conta principalmente a conta administrativa Então vamos focar nisso agora agora a gente consegue criptografar e descriptografar as requisições respostas então a gente poderia por exemplo criar um script para fazer ataque de força bruta criar enfim eh tentar outras explorações nsas funcionalidades mas a gente percebeu um ponto muito interessante o aplicativo utiliza uma chave muito fraca para criptografar as requisições e as respostas e se isso ocorrer com o jwt com a sessão do usuário se a gente conseguir de alguma forma quebrar e encontrar o Secret que é utilizado para criptografar e assinar o jwt a gente consegue basicamente comprometer qualquer conta do Solid Bank Inclusive a administrativa Então vamos lá eu vou abrir aqui meu burp switch e vou pegar o meu authorization eu vou abrir o Chrome no jwt e aqui eu consigo ver né o conteúdo desse jwt se eu alterar isso aqui para admin eu consigo autenticar como administrador porém eu não consigo passar isso pro servidor de uma forma com que ele entenda e confie nesse token porque eu não tô assinando ele com o Secret correto que é utilizado lá no backend então vamos fazer um teste eu vou acessar aqui por exemplo a função de my profile Vou colocar aqui no Repeater e vou alterar o authorization com authorization modificado Olha só o servidor me respondeu isso aqui vou descriptografar e ele retornou um forbidden Então realmente o servidor tá validando esse token ele não vai deixar eu simplesmente modificar ele né e passar pro servidor para tomar o controle da conta de usuário porém se de alguma forma e no backend foi implementado uma chave muito fraca para criptografar para assinar esse jwt eu consigo a partir de força bruta quebrar e encontrar essa chave então vamos fazer isso agora mesmo eu vou pegar o token jwt original e vou no meu C Linux aqui no C Linux eu vou criar um arquivo jwt.