From 144fb234bf0d5f71eb9f6dd8d8e3d5fddfc7dde1 Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Mon, 18 Dec 2017 19:46:06 +0100
Subject: [PATCH] SQL injection exercise

---
 Doc/Sda1/Ref/Fig/sqlInject.screen.png         | Bin 19305 -> 0 bytes
 Doc/Sda1/jdbc.xml                             | 177 +++++++++---------
 .../sda1/insert/SimpleInsert.java             |   2 +-
 .../src/main/resources/jdbc.properties        |   2 +-
 .../src/main/resources/sqlinject.sql          |   0
 5 files changed, 89 insertions(+), 92 deletions(-)
 delete mode 100644 Doc/Sda1/Ref/Fig/sqlInject.screen.png
 create mode 100644 P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/sqlinject.sql

diff --git a/Doc/Sda1/Ref/Fig/sqlInject.screen.png b/Doc/Sda1/Ref/Fig/sqlInject.screen.png
deleted file mode 100644
index a7f14bd172213218ce8e75d1d574e1bc352ebb5b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19305
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
I=akR{0AQb~s{jB1

diff --git a/Doc/Sda1/jdbc.xml b/Doc/Sda1/jdbc.xml
index 0cfe4abcd..8a3b5a3f2 100644
--- a/Doc/Sda1/jdbc.xml
+++ b/Doc/Sda1/jdbc.xml
@@ -1260,7 +1260,11 @@ static public int insertPerson(
             <answer>
               <para>Our last exercise's database schema <filename
               xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/P/Sda1/Jdbc/Insert/Minimum/src/main/resources/schema.sql">resources/schema.sql</filename>
-              may remain untouched.</para>
+              may remain untouched. Solution:</para>
+
+              <annotation role="make">
+                <para role="eclipse">Sda1/Jdbc/Insert/MinimumTest</para>
+              </annotation>
             </answer>
           </qandaentry>
         </qandadiv>
@@ -1699,6 +1703,12 @@ public someClass {
               disclosed.</para>
             </listitem>
 
+            <listitem>
+              <para><productname
+              xlink:href="https://www.mysql.com">Mysql</productname> mitigates
+              the attack type's severity</para>
+            </listitem>
+
             <listitem>
               <para>Possible solutions:</para>
 
@@ -1712,96 +1722,74 @@ public someClass {
                 </listitem>
 
                 <listitem>
-                  <para>Many database vendors <link
-                  xlink:href="https://dev.mysql.com/doc/refman/5.1/de/connector-j-reference-using-ssl.html">supply
-                  SSL</link> or similar <trademark
+                  <para>Use <trademark
                   xlink:href="https://en.wikipedia.org/wiki/Java_Database_Connectivity">JDBC</trademark>
-                  protocol encryption extensions. This requires additional
-                  configuration procedures like setting up server side
-                  certificates. Moreover similar to the http/https protocols
-                  encryption generally slows down data traffic.</para>
+                  driver supporting <xref linkend="glo_TLS"/>.</para>
                 </listitem>
               </itemizedlist>
             </listitem>
+
+            <listitem>
+              <para>Irrelevant e.g. within DMZ.</para>
+            </listitem>
           </itemizedlist>
         </figure>
-
-        <para>Conclusion: <productname
-        xlink:href="https://www.mysql.com">Mysql</productname> mitigates the
-        attack type's severity</para>
-
-        <para>Solution: Use <xref linkend="glo_TLS"/> if driver
-        supported.</para>
-
-        <para>Of course this is only relevant if the transport layer is
-        considered to be insecure. If both server and client reside within the
-        same trusted infrastructure no action has to be taken. We also note
-        that this kind of problem is not limited to <trademark
-        xlink:href="https://en.wikipedia.org/wiki/Java_Database_Connectivity">JDBC</trademark>.
-        In fact all protocols lacking encryption are subject to this type of
-        attack.</para>
       </section>
 
       <section xml:id="sqlInjection">
         <title>SQL injection</title>
 
-        <para>Before diving into technical details we shed some light on the
-        possible impact of this common attack type being described in this
-        chapter. Our example is the well known Heartland Payment Systems data
-        breach:</para>
-
-        <figure xml:id="figHeartlandSecurityBreach">
-          <title>SQL injection impact</title>
+        <figure xml:id="figSqlInject">
+          <title>SQL injection principle</title>
 
           <mediaobject>
             <imageobject>
-              <imagedata fileref="Ref/Fig/heartland.fig"/>
+              <imagedata fileref="Ref/Fig/sqlinject.fig"/>
             </imageobject>
           </mediaobject>
         </figure>
 
-        <para>Why should we be concerned with SQL injection? In the
-        introduction of <xref linkend="bib_Clarke09"/> a compelling argument
-        is being given:</para>
-
-        <blockquote>
-          <para>Many people say they know what SQL injection is, but all they
-          have heard about or experienced are trivial examples. SQL injection
-          is one of the most devastating vulnerabilities to impact a business,
-          as it can lead to exposure of all of the sensitive information
-          stored in an application's database, including handy information
-          such as usernames, passwords, names, addresses, phone numbers, and
-          credit card details.</para>
-        </blockquote>
-
-        <para>In this lecture due to limited resources we only deal with
-        trivial examples mentioned above. One possible way SQL injection
-        attacks work is by inserting SQL code into fields being designed for
-        end user input:</para>
-
-        <figure xml:id="figSqlInject">
-          <title>SQL injection principle</title>
+        <figure xml:id="sda1_fig_littleBobbyTables">
+          <title><link xlink:href="http://xkcd.com/327">Trouble at
+          school</link></title>
 
           <mediaobject>
             <imageobject>
-              <imagedata fileref="Ref/Fig/sqlinject.fig"/>
+              <imagedata fileref="Ref/Fig/exploits_of_a_mom.png"/>
             </imageobject>
           </mediaobject>
         </figure>
 
-        <para>And a nice explanation from <link
-        xlink:href="???">http://xkcd.com/327</link>:</para>
+        <para>Before diving into technical details we shed some light on the
+        possible impact of this common attack type being described in this
+        chapter. Our example is the well known Heartland Payment Systems data
+        breach:</para>
 
-        <figure xml:id="sda1_fig_littleBobbyTables">
-          <title>Trouble at school ...</title>
+        <figure xml:id="figHeartlandSecurityBreach">
+          <title>SQL injection impact</title>
 
           <mediaobject>
             <imageobject>
-              <imagedata fileref="Ref/Fig/exploits_of_a_mom.png"/>
+              <imagedata fileref="Ref/Fig/heartland.fig"/>
             </imageobject>
           </mediaobject>
         </figure>
 
+        <figure xml:id="sda1_jdbc_sqlInjectionRelevance">
+          <title>SQL injection relevance, <xref
+          linkend="bib_Clarke09"/></title>
+
+          <blockquote>
+            <para>Many people say they know what SQL injection is, but all
+            they have heard about or experienced are trivial examples. SQL
+            injection is one of the most devastating vulnerabilities to impact
+            a business, as it can lead to exposure of all of the sensitive
+            information stored in an application's database, including handy
+            information such as usernames, passwords, names, addresses, phone
+            numbers, and credit card details.</para>
+          </blockquote>
+        </figure>
+
         <figure xml:id="sda1_fig_sqlInjectLessonsLearned">
           <title>Lessons learned?</title>
 
@@ -1816,9 +1804,9 @@ public someClass {
             <qandaentry>
               <question>
                 <para>Use the application from <xref
-                linkend="sda1SectUserInitiatedConnect"/> and <xref
-                linkend="figSqlInject"/> to launch a SQL injection attack. We
-                provide some hints:</para>
+                linkend="quandaentry_DupInsertUnitTest"/> and the idea of
+                <xref linkend="figSqlInject"/> to launch an SQL injection
+                attack. We provide some hints:</para>
 
                 <orderedlist>
                   <listitem>
@@ -1837,12 +1825,11 @@ public someClass {
                     <para>In order to execute these so called multi user
                     queries we explicitly have to enable a <productname
                     xlink:href="https://www.mysql.com">Mysql</productname>
-                    property. This may be achieved by extending our <trademark
-                    xlink:href="https://en.wikipedia.org/wiki/Java_Database_Connectivity">JDBC</trademark>
-                    URL:</para>
+                    property thereby overriding the default security
+                    configuration:</para>
 
                     <literallayout>jdbc:mysql://localhost:3306/hdm?useSSL=false&amp;<emphasis
-                        role="bold">allowMultiQueries=true</emphasis></literallayout>
+                        role="red">allowMultiQueries=true</emphasis></literallayout>
 
                     <para>The <productname
                     xlink:href="https://www.mysql.com">Mysql</productname>
@@ -1866,39 +1853,49 @@ public someClass {
               </question>
 
               <answer>
-                <para>We construct a suitable string being injected to drop
-                our <code>Person</code> table:</para>
+                <para>Logging tells us about SQL code being generated when
+                inserting a record based on e.g. user <emphasis
+                role="red">Eve</emphasis> having an email <emphasis
+                role="red">eve@my.org</emphasis>:</para>
 
-                <programlisting language="sql">Jim', 'jim@c.com');DROP TABLE Person;INSERT INTO Person VALUES('Joe</programlisting>
+                <programlisting language="sql">main INFO  insert.SimpleInsert - Executing »INSERT INTO Person VALUES('<emphasis
+                    role="red">Eve</emphasis>', '<emphasis role="red">eve@my.org</emphasis>')«</programlisting>
 
-                <para>This being entered into the name field kills our
-                <code>Table</code> relation effectively. As the error message
-                shows two INSERT statements are separated by a DROP TABLE
-                statement. So after executing the first INSERT our database
-                server drops the whole table. At last the second INSERT
-                statement fails giving rise to an error message no end user
-                will ever understand:</para>
+                <para>We craft our first input <code>username</code> replacing
+                <emphasis role="red">Eve</emphasis> to launch our
+                attack:</para>
 
-                <figure xml:id="figSqlInjectDropPerson">
-                  <title>Dropping the <code>Person</code> table by SQL
-                  injection</title>
+                <programlisting language="sql"><emphasis role="red">Eve', 'eve@my.org');DROP TABLE Person;INSERT INTO Person VALUES('jim</emphasis></programlisting>
 
-                  <mediaobject>
-                    <imageobject>
-                      <imagedata fileref="Ref/Fig/sqlInject.screen.png"/>
-                    </imageobject>
-                  </mediaobject>
-                </figure>
+                <para>A corresponding dialog reads:</para>
+
+                <screen>MinimumTest&gt; java -jar /ma/goik/GoikLectures/P/Sda1/Jdbc/Insert/MinimumTest/target/insert_user-0.1.jar
+Enter a person's name or 'x' to exit: <emphasis role="red">Eve', 'eve@my.org');DROP TABLE Person;INSERT INTO Person VALUES('jim</emphasis>
+Enter <emphasis role="red">Eve', 'eve@my.org');DROP TABLE Person;INSERT INTO Person VALUES('jim's</emphasis> email or 'x' to exit: jim@company.com
+</screen>
+
+                <para>This <quote>successfully</quote> kills our
+                <code>Person</code> table:</para>
+
+                <screen>goik@goikschlepptop MinimumTest&gt; cat A1.log 
+main INFO  insert.SimpleInsert - Executing »INSERT INTO Person VALUES('Eve', 'eve@my.org');DROP TABLE Person;INSERT INTO Person VALUES('jim', 'jim@company.com')«
+main ERROR insert.SimpleInsert - General database connection problem:
+java.sql.SQLSyntaxErrorException: Table 'hdm.Person' doesn't exist
+  at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112) ~[insert_user-0.1.jar:?]
+...</screen>
 
                 <para>According to the message text the table
                 <code>Person</code> gets dropped as expected. Thus the
-                subsequent (second) <code>INSERT</code> action is bound to
-                fail.</para>
+                subsequent (second) <code>INSERT</code> action is then bound
+                to fail.</para>
+
+                <para>In practice this result may be avoided: The database
+                user in question will (hopefully!) not have sufficient
+                permissions to drop the whole table. Use <code>GRANT</code> /
+                <code>REVOKE</code> statements accordingly!</para>
 
-                <para>In practice this result my be avoided. The database user
-                will (hopefully!) not have sufficient permissions to drop the
-                whole table. Malicious modifications by INSERT, UPDATE or
-                DELETE statements are still possible.</para>
+                <para>Malicious modifications by INSERT, UPDATE or DELETE
+                statements of data records are still possible though!</para>
               </answer>
             </qandaentry>
           </qandadiv>
diff --git a/P/Sda1/Jdbc/Insert/MinimumTest/src/main/java/de/hdm_stuttgart/sda1/insert/SimpleInsert.java b/P/Sda1/Jdbc/Insert/MinimumTest/src/main/java/de/hdm_stuttgart/sda1/insert/SimpleInsert.java
index 6620ed372..59157c9ac 100644
--- a/P/Sda1/Jdbc/Insert/MinimumTest/src/main/java/de/hdm_stuttgart/sda1/insert/SimpleInsert.java
+++ b/P/Sda1/Jdbc/Insert/MinimumTest/src/main/java/de/hdm_stuttgart/sda1/insert/SimpleInsert.java
@@ -77,7 +77,7 @@ public class SimpleInsert {
         if (1 == insertCount) {
           System.out.println("Successfully inserted new user '" + name + "'\n");
         } else {
-          System.out.println("Insetion failed, duplicate email '" + email + "' ?\n");
+          System.out.println("Insertion failed, duplicate email '" + email + "' ?\n");
         }
       }
       System.out.println("Bye!");
diff --git a/P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/jdbc.properties b/P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/jdbc.properties
index 3ee6101a8..d8fef888f 100644
--- a/P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/jdbc.properties
+++ b/P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/jdbc.properties
@@ -1,3 +1,3 @@
-jdbcurl=jdbc:mysql://localhost:3306/hdm
+jdbcurl=jdbc:mysql://localhost:3306/hdm?allowMultiQueries=true
 password=XYZ
 username=hdmuser
\ No newline at end of file
diff --git a/P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/sqlinject.sql b/P/Sda1/Jdbc/Insert/MinimumTest/src/main/resources/sqlinject.sql
new file mode 100644
index 000000000..e69de29bb
-- 
GitLab