A vulnerabilidade de truncamento SQL geralmente existe nos bancos de dados MySQL. Essa vulnerabilidade foi descrita pela primeira vez na CVE-2008-4106, que estava relacionada ao WordPress CMS.
Como funcionam os ataques de truncamento do SQL
Este ataque funciona devido ao truncamento da entrada do usuário em bancos de dados usando as funções 'Seleção' e 'Inserção'.
Suponha que um desenvolvedor crie a tabela "Usuários" através da seguinte consulta:
Crie usuários de tabela (Usando este esquema, se o desenvolvedor criar uma conta de administrador com o seguinte:
user_name = 'admin'Obviamente, essas credenciais não são públicas. Existe apenas uma conta de administrador no banco de dados e, se um invasor tentar registrar outra conta no nome de usuário 'Admin', o invasor falhará devido às verificações de redundância do banco de dados. O invasor ainda pode ignorar essa verificação de redundância para adicionar outra conta de administrador, explorando a vulnerabilidade do truncamento SQL. Suponha que o invasor registre outra conta na seguinte entrada:
User_name = 'adminxxxxxxxxxxxxxxxrandom'O banco de dados levará o 'user_name' (26 caracteres) e verifique se isso já existe. Em seguida, a entrada user_name será truncada e 'admin' ('admin' com espaço) será inserido no banco de dados, resultando em dois usuários de administrador duplicados.
O invasor pode então criar um usuário 'admin' com sua própria senha. Agora, o banco de dados tem duas entradas de 'user_name' do Admin, mas com senhas diferentes. O invasor pode fazer login com as credenciais recém -criadas para obter um painel de administração, porque os dois user_names "admin" e "admin" são iguais para o nível do banco de dados. Agora, veremos um amostra de ataque prático.
AMOSTRO ATAÇÃO
Neste exemplo, levaremos um cenário do site demais.org. A Comunidade de Overhewire fornece CTFs de jogo de guerra nos quais podemos praticar nossos conceitos de segurança. O cenário de truncamento SQL ocorre no nível de NATAS Nível 26-> 27. Podemos acessar o nível usando o seguinte:
URL: http: // natas27.Natas.laboratórios.demais.orgEste nível está disponível em: https: // Overthewire.Org/Wargames/Natas/Natas27.html. Você será mostrado uma página de login vulnerável a um ataque de truncamento SQL.
Ao inspecionar o código -fonte, você verá que o comprimento do nome de usuário é 64, como mostrado abaixo.
Um usuário chamado 'natas28' já existe. Nosso objetivo é criar outro usuário chamado 'natas28' usando o ataque sql_truncation. Portanto, inseriremos o Natas28, seguido por 57 espaços e um alfabeto aleatório (no nosso caso, a), nome de usuário e qualquer senha. A letra 'A' não é visível na captura de tela por causa do nome de usuário do comprimento de 65 caracteres. Após a criação da conta de usuário, você poderá ver o 'a.'
Se o banco de dados contiver vulnerabilidade SQL_TRUNCATION, o banco de dados agora deve ter dois nomes de usuário 'natas28'. Um nome de usuário conterá nossa senha. Vamos tentar inserir as credenciais na página de login.
Agora, estamos conectados como o usuário 'natas28'.
Mitigação
Para mitigar este ataque, precisaremos considerar vários fatores.
Por exemplo, vamos verificar o modo rigoroso usando a seguinte consulta:
mysql> selecione @@ sql_modeVamos criar um banco de dados e os usuários da tabela '.'
MySQL> Criar teste de banco de dadosEm seguida, criaremos um usuário administrador com credenciais usando a consulta de inserção.
mysql> inserir nos valores dos usuários ('admin', 'senha1');Podemos ver as informações da tabela 'Usuários' usando a opção 'Selecionar * do Usuários'.
O comprimento do nome de usuário é de 10 caracteres. Agora, tentaremos o ataque de truncamento SQL.
Quando tentamos inserir o seguinte:
Nome de usuário = 'adminxxxxxa'Teremos um erro, o que significa que o modo rigoroso é totalmente eficaz.
mysql> inserir nos valores dos usuários ('admin a', 'pass2')Sem o modo rigoroso ativado, o banco de dados produzirá avisos, mas ainda inserirá os dados na tabela.
Conclusão
Os invasores podem obter acesso a contas de alto privilégio se a vulnerabilidade SQL_TRUNCT existir em seu aplicativo. O invasor pode facilmente obter informações sobre um nome de usuário e seu comprimento de banco de dados usando os campos críticos e criar o mesmo nome de usuário, seguido de espaços e alfabetismo aleatório após o comprimento mínimo, resultando na criação de múltiplas contas de alto privilégio. Essa vulnerabilidade é crítica, mas pode ser evitada se você tomar algumas precauções de segurança, como ativar o modo rigoroso para entradas do usuário e tornar o campo sensível a chave primária no banco de dados.