-: Nesta aula e
nas próximas aulas, vamos falar sobre uma vulnerabilidade chamada XSS.
XSS é a abreviatura de Cross Site Scripting.
Esse tipo de vulnerabilidade permite que
um invasor injete JavaScript em uma página.
Portanto, JavaScript é uma linguagem de programação.
E, usando essa vulnerabilidade, um invasor
seria capaz de executar código, escrito em
JavaScript, em uma
determinada página de
um site.
JavaScript é uma linguagem do lado
do cliente, portanto, quando o código for executado, ele
será executado no cliente, no usuário, na
pessoa que estava navegando na página da web.
Ele não será executado no
servidor, portanto, mesmo que o
seu código resulte em um shell
reverso, o shell virá do usuário
que está
navegando na página e não virá do site.
Portanto, qualquer código que você escrever em JavaScript será
explorado ou executado no usuário-alvo, nas
pessoas que veem
as páginas e não no servidor web.
Portanto, o servidor web só vai ser usado como meio
de executar o código ou entregar o código.
Existem três tipos principais de vulnerabilidades XSS:
Persistente ou Armazenada, Refletida
e
baseada em DOM.
O XSS armazenado fica armazenado no banco de dados, de modo
que o código que você injeta será armazenado no banco de
dados ou na
página, de forma que toda vez que qualquer pessoa visualizar essa
página, seu código será executado.
No Refletido, o
código só será executado
quando o usuário alvo executar uma URL específica
criada ou escrita por você.
Portanto, você estará manipulando algum tipo de URL
e enviá-lo para um destino
e quando eles executarem
aquele destino, quando executarem aquela URL, o código será executado.
Os resultados baseados em DOM do código JavaScript escrito
no cliente.
Portanto, o código será realmente interpretado
e executado no lado
do cliente, sem qualquer comunicação com o servidor da web.
Isso pode ser muito
perigoso porque às vezes os servidores da web aplicam algum tipo de
segurança e filtragem para verificar se há XSS.
Mas com o DOM baseado, o código nunca é enviado
ao servidor web.
Assim, o código será interpretado e executado no navegador da
web, mesmo sem interagir com o servidor da web.
E estes estarão presentes em sites que
atualizam seu conteúdo sem atualização.
Todos nós usamos sites onde você coloca seu nome de usuário, por
exemplo, e
carrega imediatamente sem ter
que verificar com o servidor da web, ou você faz, você
coloca algum tipo de string e ele
faz uma pesquisa sem se comunicar com um servidor da web ou
faz algo sem se comunicar com o servidor da web.
Então, se você for capaz de injetar
nisso, essa injeção não será validada, então
ela será executada imediatamente e ignorará
todas as validações.