
The Super Vulnerable Java Application (SVJA), as demonstrated in the Roniel and DaRon Podcast Show, is an Apache Struts application designed to contain a number of highly common vulnerabilities. Unlike other "purposefully vulnerable" software, this software is designed to mimic common vulnerabilities in the same way that they are often seen, rather than in either an overly simplistic manner or a more "capture the flag" manner. This software is semi-routinely updated and added upon, with demonstrations of some of the vulnerabilities as part of the podcast.
A RDPS Super Vulnerable Java Application é exatamente isso — uma aplicação Java super vulnerável criada para o benefício de todos verem uma variedade de vulnerabilidades comuns, muitas vezes "complexas". Este software foi criado como parte do Roniel and DaRon Podcast Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA) para que pudéssemos discutir e mostrar várias vulnerabilidades que encontrávamos com frequência de uma forma mais realista do que o que você verá com muitas outras ferramentas online. Para ver exemplos de exploração, assista ao nosso podcast.
Lembre-se de que esta aplicação foi projetada para ser altamente vulnerável a várias coisas. Tenha cuidado onde a executa, limite quem pode acessá-la (o servidor Tomcat deve escutar apenas em localhost e apenas na sua máquina pessoal). Não somos responsáveis se você não conseguir cuidar adequadamente das suas coisas, deixando sua cópia exposta para qualquer um roubar seus dados ou comprometer gravemente sua máquina. Recomendamos que você a execute em uma máquina virtual (VM) que seja segura, que não contenha nada sensível e que não tenha conectividade com a internet. A falha em proteger adequadamente o sistema que executa isso e a instância resultará provavelmente em um dia ruim para você. Como relações carnais casuais sem as devidas proteções, você está apenas se colocando em uma posição da qual se arrependerá um dia. Considere-se avisado, mas encorajado a brincar ;-)
A RDPS SVJA é composta por uma aplicação Java Struts 2 rodando React. Ela é construída simplesmente executando: mvn clean package
Isso cria um WAR em target -- svja.war. Basta colocar o WAR na sua pasta webapps do Tomcat. Em uma instalação padrão do Tomcat, acesse http://127.0.0.1:8080/svja para acessar a aplicação.
Se você estiver usando Tomcat 10 ou superior, adicione <Loader jakartaConverter="TOMCAT" /> ao seu arquivo de configuração context.xml do Tomcat.
Para aqueles que desejam usá-lo para começar, a raiz (http://127.0.0.1:8080/svja) agora conta com Swagger UI e uma especificação OpenAPI básica (http://127.0.0.1:8080/svja/specification.yaml) que você pode usar. Observe que a especificação, e portanto o Swagger UI, apenas arranha a superfície (é para isso que serve a desserialização insegura, não é?).
Abaixo estão algumas das principais vulnerabilidades do sistema, por ação.
admin:admin (conta de administrador da aplicação)
bill:baker (conta de usuário privilegiado)
bob:barker (conta básica de usuário somente leitura)
/api/authenticate?user.username=admin&user.password=admin
/api/authenticate?user.username=bill&user.password=baker
/api/authenticate?user.username=bob&user.password=barker
Após a autenticação, acesse qualquer ação que desejar usando JSON ou Struts
GET /svja/api/authenticate?user.username=bill&user.password=baker HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "bill",
"password": "baker"
}
}
GET /svja/api/authenticate/federated?user.username=bill%40rdps.local&usernameTranslationRegex=%2F%40rdps%5B.%5Dlocal%2F%2F HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate/federated HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "[email protected]"
},
"usernameTranslationRegex": "/@rdps[.]local//"
}
Lembre-se de alterar o svjatoken
GET /svja/api/projects?projectId=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
Lembre-se de alterar o svjatoken
GET /svja/api/projects HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 19
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
{
projectId:1
}
Este é um trabalho em andamento e temos muitas outras vulnerabilidades e coisas planejadas (incluindo um frontend super vulnerável e outras aplicações super vulneráveis) — volte a nos visitar a cada dois meses e assista ao Roniel and DaRon Podcast Show para atualizações, exemplos de exploração e outras ideias. Também encorajamos você a tentar descobrir como mitigar ou corrigir as vulnerabilidades... quebrar coisas é fácil... mitigar, corrigir e proteger é que é difícil. Boa sorte e boas caçadas!