É possível usar o xp_cmdshell para formatar um disco rígido?

1

Eu estava procurando alguns padrões de codificação no meu trabalho e me deparei com isso:

string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'";

userIdFromWebPage é uma variável que contém dados não confiáveis que não foram validados.

Imagine que ele contém um dos itens a seguir:

  • "'ou 1 = 1 -"
  • "'; usuários DROP TABLE -"
  • "'; exec xp_cmdshell (' 'format c:') -"

A consulta final pode ter esta aparência.

string query = "select * FROM USERS WHERE USER_ID='';exec xp_cmdshell('format c:') -";

Isso resulta em um formato da unidade c: \ no servidor de banco de dados.

Isso é realmente verdade?

    
por Jack B Nimble 24.01.2012 / 18:40

1 resposta

3

A verdadeira questão é can that code be used for SQL Injection? e a resposta é absolutamente sim. Os dias de vândalos que formariam o seu disco apenas para espalhar o caos já se foram, hoje em dia os ataques são montados por indivíduos interessados em ganhos financeiros, eles geralmente usam o vetor de injeção SQL para adicionar seu host ao botnet, às vezes para roubar informações você pode ter, às vezes, para tirar seus reféns de dados e pedir resgate (criptografar e pedir compensação por descriptografia). Então, é improvável que eles emitam um format c: .

Pode o xp_cmdshell ser usado para emitir um comando como format c: ? Não por padrão, desde que o SQL 2005 o mecanismo desativa xp_cmdshell por padrão e um administrador tem para explicitamente ativá-lo de volta. Mas se estiver ativado, ele pode ser usado? Sim. O sistema operacional formatará a unidade c: Improvável. Nenhum SO hoje aceita um formato do volume do sistema.

Mas, afinal, o ponto é que o seu código não deve permitir a injeção de SQL .

    
por 24.01.2012 / 18:47

Tags