web security vulnerabilities attacks
play

Web Security: Vulnerabilities & Attacks Slide credit: John - PowerPoint PPT Presentation

Computer Security Course. Dawn Computer Security Course. Dawn Song Song Web Security: Vulnerabilities & Attacks Slide credit: John Mitchell Dawn Song Security User Interface Dawn Song Safe to type your password?


  1. Computer Security Course. Dawn Computer Security Course. Dawn Song Song Web Security: Vulnerabilities & Attacks Slide credit: John Mitchell Dawn Song

  2. Security User Interface Dawn Song

  3. Safe to type your password? https://www.safebank.com Bank of the Safe https://safebank.com Bank of the Safe (US) (US) SAFEBANK login password Accounts Bill Pay banking content Mail T ransfers https://www.safebank.c om 3 Dawn Song

  4. Safe to type your password? SAFEBANK 4 Dawn Song

  5. Safe to type your password? 5 Dawn Song

  6. Safe to type your password? Bank of the Safe https://www.safebank.com https://safebank.com Bank of the Safe (US) (US) SAFEBANK login password Accounts Bill Pay banking content Mail T ransfers https://www.safebank.c om 7 Dawn Song

  7. Mixed Content: HTTP and HTTPS Dawn Song

  8. Mixed content and network attacks • banks: after login all content over HTTPS – Developer error: Somewhere on bank site write <script src= http ://www.site.com/script.js> </script> – Active network attacker can now hijack any session • Better way to include content: <script src=//www.site.com/script.js> </script> – served over the same protocol as embedding page Dawn Song

  9. The Status Bar • Trivially spoofable <a href=“http://www.paypal.com/” onclick=“this.href = ‘http://www.evil.com/’;”> PayPal</a> Dawn Song

  10. Command Injection Dawn Song

  11. Background Web Server Client UID: Browser foo.php URI www Web Page PHP -> WEB PAGE Dawn Song

  12. Quick Background on PHP display.php: <? echo system("cat ".$_GET['file']); ?> IN THIS EXAMPLE <? php-code ?> executes php-code at this point in the document echo expr: evaluates expr and embeds in doc system(call, args) performs a system call in the working directory “ ….. ”, ‘ ….. ’ String literal. Double-quotes has more possible escaped characters. . (dot). Concatenates strings. _GET[‘key’] returns value corresponding to the key/value pair sent as extra data in the HTTP GET request LATER IN THIS LECTURE preg_match(Regex, Performs a regular expression match. Stiring) proc_open Executes a command and opens fjle pointers for input/output. escapeshellarg() Adds single quotes around a sring and quotes/escapes any existing single quotes. fjle_get_contents(fjle) Retrieves the contents of fjle. Dawn Song

  13. Background Web Server Client display.php?file=notes.txt UID: Browser URI www display.php Web Page system("cat ". $_GET['file']) display.php: <? echo system("cat ".$_GET['file']); ?> Shell Command cat notes.txt Dawn Song

  14. Background Web Server Client Browser UID: display.php?file=notes.txt URI www display.php system("cat ". $_GET['file']) Today we are learning about Web Security. Content of notes.txt Shell Command cat notes.txt display.php: <? echo system("cat ".$_GET['file']); ?> Dawn Song

  15. Command Injection display.php: <? echo system("cat ".$_GET['file']); ?> Q: Assuming the script we’ve been dealing with (reproduced above) for http://www.example.net/display.php . Which one of the following URIs is an attack URI? Hint: Search for a URI Decoder to fjgure out values seen by the PHP code. %3B -> “;” %20 -> “ “ %2F -> “/” a. http://www.example.net/display.php?get=rm b. http://www.example.net/display.php?file=rm%20-rf%20%2F%3B c. http://www.example.net/display.php?file=notes.txt%3B%20rm%20-rf%20%2F%3B%0A%0A d. http://www.example.net/display.php?file=%20%20%20%20%20 Dawn Song

  16. Command Injection display.php: <? echo system("cat ".$_GET['file']); ?> Q: Assuming the script we’ve been dealing with (reproduced above) for http://www.example.net/display.php . Which one of the following URIs is an attack URI? Hint: Search for a URI Decoder to fjgure out values seen by the PHP code. (URIs decoded) a. http://www.example.net/display.php?get=rm b. http://www.example.net/display.php?file=rm -rf /; c. http://www.example.net/display.php?file=notes.txt; rm -rf /; d. http://www.example.net/display.php?file= Dawn Song

  17. Command Injection display.php: <? echo system("cat ".$_GET['file']); ?> Q: Assuming the script we’ve been dealing with (reproduced above) for http://www.example.net/display.php . Which one of the following URIs is an attack URI? Hint: Search for a URI Decoder to fjgure out values seen by the PHP code. (Resulting php) a. <? echo system("cat rm"); ?> b. <? echo system("cat rm -rf /;"); ?> c. <? echo system("cat notes.txt; rm -rf /;"); ?> d. <? echo system("cat "); ?> Dawn Song

  18. Injection • Injection is a general problem: – T ypically, caused when data and code share the same channel. – For example, the code is “ cat ” and the fjlename the data. • But ‘ ; ’ allows attacker to start a new command. Dawn Song

  19. Input Validation • T wo forms: – Blacklisting: Block known attack values – Whitelisting: Only allow known-good values • Blacklists are easily bypassed – Set of ‘attack’ inputs is potentially infjnite – The set can change after you deploy your code – Only rely on blacklists as a part of a defense in depth strategy Dawn Song

  20. Blacklist Bypass Blacklist Bypass Use a pipe Disallow semi - colons Disallow pipes and semi colons Use the backtick operator to call commands in the arguments Disallow pipes, semi - colons, and backticks Use the $ operator which works similar to backtick Disallow rm Use unlink Disallow rm , unlink Use cat to overwrite existing fjles • Ad infjnitum • T omorrow, newer tricks might be discovered Dawn Song

  21. Input Validation: Whitelisting display.php: <? if (!preg_match("/^[a-z0-9A-Z.]*$/", $_GET['file'])) { echo “The file should be alphanumeric."; return ; } echo system("cat ".$_GET['file']); ?> GET INPUT PASSES? Yes notes.txt No notes.txt; rm –rf /; No security notes.txt Dawn Song

  22. Input Escaping display.php: <? #http://www.php.net/manual/en/function.escapeshellarg.php echo system("cat ".escapeshellarg($_GET['file'])); ?> escapeshellarg() adds single quotes around a string and quotes/escapes any existing single quotes allowing you to pass a string directly to a shell function and having it be treated as a single safe argument -- http://www.php.net/manual/en/function.escapeshellarg.php GET INPUT Command Executed notes.txt cat 'notes.txt' notes.txt; rm –rf /; cat 'notes.txt rm –rf /;' mary o'donnel cat 'mary o'\''donnel' Dawn Song

  23. Use less powerful API • The system command is too powerful – Executes the string argument in a new shell – If only need to read a fjle and output it, use simpler API display.php: <? echo file_get_contents($_GET['file']); ?> • Similarly, the proc_open (executes commands and opens fjles for I/O) API – Can only execute one command at a time. Dawn Song

  24. Recap • Command Injection: a case of injection, a general vulnerability • Defenses against injection include input validation, input escaping and use of a less powerful API • Next, we will discuss other examples of injection and apply similar defenses Dawn Song

  25. SQL Injection Dawn Song

  26. Background • SQL: A query language for database – E.g., SELECT statement, WHERE clauses • More info – E.g., http://en.wikipedia.org/wiki/SQL Dawn Song

  27. Running Example Consider a web page that logs in a user by seeing if a user exists with the given username and password. login.php: $result = pg_query ("SELECT * from users WHERE uid = '".$_GET['user']."' AND pwd = '".$_GET['pwd']."';"); if ( pg_query_num($result) > 0 ) { echo "Success"; user_control_panel_redirect(); It sees if results exist and if so logs the user in and redirects them to their user control panel. Dawn Song

  28. Background Web Server Client Browser login.php?user=pikachu&pwd=password123 login.php URI connect to database using dbuser login. Execute query with $_GET['user'] $_GET['pwd'] Dawn Song

  29. Background Web Server Client Browser login.php?user=pikachu&pwd=password123 login.php URI connect to database using dbuser login. Execute query with $_GET['user'] $_GET['pwd'] dbus SELECT * from users WHERE uid='pikachu' AND pwd = 'password123'; er Quer DB y Server Dawn Song

  30. Background Web Server Client Browser login.php?user=pikachu&pwd=password123 login.php URI connect to database using dbuser login. Execute query with $_GET['user'] $_GET['pwd'] dbus SELECT * from users WHERE uid='pikachu' AND pwd = 'password123'; er Quer DB y Server Results: 25 | pikachu | password123 | electric Resul Dawn Song ts

  31. Background Web Server Client Browser login.php?user=pikachu&pwd=password123 login.php URI connect to database using dbuser login. Success and redirect to user control Execute query with $_GET['user'] panel. $_GET['pwd'] dbus SELECT * from users WHERE uid='pikachu' AND pwd = 'password123'; er Quer DB y Server Results: 25 | pikachu | password123 | electric Resul Dawn Song ts

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend