O documento descreve nove formas de se obter execução remota de código (RCE) em sistemas web, incluindo injeção de comando, XXE, injeção de linguagem de expressão, desserialização de objetos, SQL injection, SSRF, injeção de modelo de servidor, XSS e CSRF. O objetivo é mostrar como cada falha pode ser explorada para executar código malicioso de forma direta ou indireta no servidor da aplicação.
8. Objetivo
● Conhecer as formas de obter um RCE
em sistemas Web
● Para cada, dos 9:
○ Breve resumo da falha
○ Como explorar para o RCE (Direta
ou Indiretamente)?
○ Como ALGUÉM explorou?
8
9. O que é?
● Capacidade do atacante executar
código na servidor da aplicação
[Web] através de uma entrada do
sistema.
9
10. A partir de __ para o RCE
● OS Command Injection
● XML eXternal Entity Injection
● Expression Language Injection
● Object Deserialization
● SQL Injection
● Server Side Request Forgery
● Server Side Template Injection
● Cross-Site Scripting
● Cross-Site Request Forgery
10
11. Como comprovar um RCE?
● Forjar requisições
○ CURL
○ WGET
● Sleep
● ICMP
● DNS
11
18. OS Command Injection
$email_from = '"attacker" -oQ/tmp/
-X/var/www/cache/phpcode.php some"@email.com';
$msg_body = "<?php @eval($_GET[‘x’]); ?>";
Vai escrever o transfer log (-X) para
/var/www/cache/phpcode.php
18
20. XXE
● Detecção
○ Aplicação tem como entrada
arquivos XML e faz algum parser
○ Valida e processa DTD (document type definition)
○ API / Webservice (SOAP)
20
21. XXE -> RCE
● Exploração
○ Criação de uma entidade externa
(EE) que acessa recursos/serviços
locais (host) (Mapeamento/leak)
○ PHP: Raro, mas possível uso do
expect://<cmd>
21
22. XXE -> RCE
● Exploração
○ Java: técnica do @ecbftw usando
jar://download (Java descompacta)
■ Força o download
■ Mantém a conexão aberta ao servir o
arquivo
■ Encontra o arquivo e instancia no
tomcat
22
23. XXE
● Exemplo
○ “How I hacked Pornhub for fun and
profit - 10,000$”
○ Usou XXE para extrair o fonte e
identificar novas vulnerabilidades
no código (Object Injection)
https://5haked.blogspot.com.br/
23
25. Expression Language
• Parte do JSTL (Java Server Pages Standard Tag Library)
• (View) -> (Bean)
• Permite o uso de simples
expressões para:
– Dinamicamente ler dados da app
– Dinamicamente escrever dados
– Chamar métodos arbitrários
25
31. Object Deserialization
● Java, PHP, Ruby, Python ....
● Java serializa o objeto em um
stream de bytes (Binário)
● ac ed
● rO0
● H4sI (gzipped)
31
32. Object Deserialization
● Exploração (Java)
○ ObjectInputStream não inclui processo de
validação na sua API
○ Todas as classes que estão no classloader
podem ser utilizadas e desserializadas
○ Embora ocorra uma Class Cast Exception o
objeto ainda assim é criado
32
33. Object Deserialization
● Exploração (Java)
○ Agravou com o CVE-2015-7501 (ysoserial)
○ CommonsCollection -> Runtime.exec()
https://github.com/frohoff/ysoserial - http://frohoff.github.io/appseccali-marshalling-pickles/
33
36. SQL Injection
● Essa todo mundo já sabe…
● Se não sabe: falha que permite ao
atacante executar códigos SQL
através de parâmetros inseridos na
query
36
37. SQL Injection -> RCE
● Além dos já conhecidos métodos…
● E se for uma aplicação Ruby?
○ serialized YAML ou ERB no banco
○ LOAD_FILE secrets.yml. RCE com
Cookies
○ atualizar rake tasks
https://twitter.com/jobertabma/status/870077024454311936
37
39. SSRF
● Permite um atacante fazer
requisições a partir do servidor
alvo
● Posição similar ao XXE,
possibilita mapear e vazar
informações
39
40. SSRF -> RCE
● A exploração para o RCE acontece
por meio da identificação de outra
vulnerabilidade no sistema local
40
41. SSRF -> RCE
● Exemplo:
○ Identificou a presença de um
Hashicorp Consul Agent na mesma
máquina
○ Forjou uma requisição PUT com
rn para subir um Agent (Carriage-Return,
Line-Feed)
http://www.kernelpicnic.net/2017/05/29/Pivoting-from-blind-SSRF-to-RCE-with-Hashicorp-Consul.html (29/Maio/17)
41