Top Banner
Server-side web security (part 1 - attacks) Security 1 2018-19 Università Ca’ Foscari Venezia www.dais.unive.it/~focardi secgroup.dais.unive.it
33

Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

Aug 13, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

Server-side web security(part 1 - attacks)

Security 1 2018-19Università Ca’ Foscari Veneziawww.dais.unive.it/~focardi

secgroup.dais.unive.it

Page 2: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

2

Web (in)security

Web applications are complex and offer an incredibly wide attack surface● attacks directly targeting the server-side code or

databases● attacks running in the browser● attacks on the network

Page 3: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

3

Secure coding principles

● Pay attention to how user input is processed, prevent that it affects control-flow in unexpected ways

● Avoid clearly insecure functions or coding⇒ Web attacks are often due to insecure

programming primitives or protocols made available to developers

● Adopt security best practices whenever possible● Avoid ad hoc solutions, use standard ones instead

Page 4: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

4

Server-side attacks

We consider PHP, one of the most prominent programming languages for web application

We illustrate common PHP vulnerabilities:● String comparison attacks● File inclusion attacks● Deserialization attacks● SQL injection attacks

Page 5: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

5

Server-side attacks

We consider PHP, one of the most prominent programming languages for web application

We illustrate common PHP vulnerabilities:● String comparison attacks● File inclusion attacks● Deserialization attacks● SQL injection attacks

Page 6: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

6

Strict and loose comparison

PHP offers two kind of comparison operators● strict comparison ===

equates only identical values (same value and type)● loose comparison ==

equates (different) values of different types, i.e., values are the same after “type juggling”

The use of loose comparison is quite frequent to simplify code. Example: '10' == 10

Page 7: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

7

Strict comparison examples

Picture, from hydrasky.com

Page 8: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

8

Loose comparison examples

Picture, from hydrasky.com

Page 9: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

9

String comparison attacks

Loose comparison equates too much● Example: when strings and integers are compared,

the former are converted into integers"php" == 0

⇒ Loose comparison introduces unpredictable behaviours that might be exploited by an attacker to modify the application control-flow

Page 10: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

10

More examples ...

When a string is compared with an integer the string is converted into integer:

● "0000" == 0● "0e12" == 0● "1e12" == 1● "1a12" == 1● "0abc" == 0● "abc" == 0

TRUETRUE exponential notation!FALSE exponential notation!TRUE integer is cut to 1TRUE integer is cut to 0TRUE no digits, converted to 0

Page 11: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

11

Even weirder examples ...

When two strings are compared, if they “look like” integers then PHP convert them:

● "0e12" == "0e34" ● "1e12" >= "2"● "1e12" >= "b" ● "0e12" == "0" ● 0xF == "15"● "0xF" == "15"

TRUE exponential notationTRUE exponential notationFALSE lexicographic orderTRUE exponential notationTRUEFALSE why? who knows...

Page 12: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

12

Example: authenticated session

Consider a server with a token used to keep a user authenticated in a web session

The token must be provided by the user input and is checked server side

Typically, the token would be stored in a browser cookie and sent to the server at each request

Page 13: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

13

Example: authenticated session

Page 14: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

14

Bypassing authentication (1)

Let $token be "0e392847..."(exponential notation!)⇒ Any cookie converted to value 0 will pass the check⇒ The attacker can bypass authentication by simply

providing input "0" instead of the correct token

Looks artificial, but a similar vulnerability was shown to bypass Wordpress authentication in 2014⇒ brute-force until the token has the required form

Page 15: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

15

Example 2: session authentication

Page 16: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

16

Bypassing authentication (2)

The token value is extracted from the JSON blob '{"token":".....","username":"admin"}'

This allows for passing an integer value like '{"token":0,"username":"admin"}'

⇒ "0f828c564f71fea3a12dde8bd5d27063" and "af828c564f71fea3a12dde8bd5d27063" bypass the authentication test!

Page 17: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

17

Using strcmp

Using strcmp gives a false sense of security …

Passing an (empty) array bypasses authentication:● strcmp fails returning NULL● NULL is loosely equal to 0!

Page 18: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

18

strcmp fails “silently”

$ php --interactivephp > echo strcmp(array(), "4222412412") == 0;

Warning: strcmp() expects parameter 1 to be string, array given in php shell code on line 1php >

1 is TRUE

Page 19: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

19

How to pass an array?

Page 20: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

20

Common PHP vulnerabilities

● String comparison attacks● File inclusion attacks● Deserialization attacks● SQL injection attacks

Page 21: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

21

Example: dynamic page loading

Suppose we load a page that is passed as parameter:https://foo.com/index.php?p=about.html

1

https://sqli.seclab.dais.unive.it/hackingteam/

Page 22: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

22

Arbitrary files, filters and wrappers

● ...?p=/etc/passwd● ...?p=php://filter/read=string.rot13/resour

ce=contact.htmlapplies rot13 filter to contact.html

● ...?p=php://filter/convert.base64-encode/resource=index.phpleaks the source code, base64 encoded

● ...?p=data:text/plain,<?php phpinfo();?>allows for arbitrary code execution!(requires allow_url_include to be set)

Page 23: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

23

Common PHP vulnerabilities

● String comparison attacks● File inclusion attacks● Deserialization attacks● SQL injection attacks

Page 24: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

24

Deserialization can be unsafe

PHP objects can be serialized and deserialized in order to store and resume them

Deserialization is a typical source of attacks in object-oriented languages

Deserialization often triggers code execution

Page 25: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

25

PHP magic methods

“PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality”http://php.net/manual/it/language.oop5.magic.php

Example: The magic method __wakeup() is invoked after deserialization and is used to execute code that restores the object

Page 26: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

26

Deserialization example

After deserialization, executes the code stored into $hook

cookie is automatically urldecoded before it is assigned to variable

Page 27: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

27

Deserialization attack

It is enough to forge an object with a malicious payload<?phpclass Example2{ private $hook = "phpinfo();";}echo urlencode(serialize(new Example2));?>

Output: O%3A8%3A%22Example2%22%3A1%3A%7Bs%3A14%3A%22%00Example2%00hook%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D

Page 28: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

28

Simulating the attack

$user_data = unserialize(urldecode('O%3A8%3A%22Example2%22%3A1%3A%7Bs%3A14%3A%22%00Example2%00hook%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D'));

Output: phpinfo()PHP Version => 7.1.19System => ...Build Date => Aug 17 2018 18:02:33 ...( we can be more malicious than phpinfo ;) )

Page 29: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

29

Common PHP vulnerabilities

● String comparison attacks● File inclusion attacks● Deserialization attacks● SQL injection attacks

Page 30: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

30

SQL injections

Page 31: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

31

SQL injections

SQL statements are injected in the input field of the web application with the aim of executing improper queries in the database

Example:$query = "SELECT name, lastname, url FROM

people WHERE lastname = '". $_POST['lastname'] . "'";

⇒ The obtained query is parsed and executed

Page 32: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

32

Examples

An attacker can inject a string that closes the ' and add SQL code:● ... WHERE lastname = '' OR 1=1 -- '

● ... WHERE lastname = '' OR 1=1 #'

● ... WHERE lastname = '' OR 1 #'

● ... WHERE lastname = '' OR ''=''

NOTE: -- and # comment out the closing quotation '

Page 33: Server-side web security (part 1 - attacks)...We illustrate common PHP vulnerabilities: String comparison attacks File inclusion attacks Deserialization attacks SQL injection attacks.

33

Demo

Try the injection on our vulnerable website

https://sqli.seclab.dsi.unive.it/search/

(use haxor/sqleet to login)

The injection will dump the whole people table, leaking all usernames and urls