Informazioni su SQL Injection Mysql

0

Sto provando a testare l'iniezione SQL su un sito (PHP, usa il database MySQL). Quando inserisco un apostrofo nel campo del nome utente e lascia vuota la casella della password, dopo averlo inviato, il modulo si ricarica e i campi diventano nuovamente vuoti. Ma quando ho usato un apostrofo nel campo della password, il messaggio dice "Username / password non valida".

Che cosa indica? E se metto admin 'come username (non aggiungere commenti) e nel campo password, scrivi ;Drop Table users; (non aggiungere commenti) i miei commenti funzioneranno?

    
posta Rifat 05.07.2018 - 11:37
fonte

1 risposta

4

Non abbastanza informazioni da dire - dato questo, potrebbe semplicemente rifiutare password vuote e prendere qualsiasi input nel campo della password, eseguirne l'hash, quindi controllarlo in sicurezza sul DB.

Considera il seguente pseudocodice (questo non è inteso per essere una buona pratica, è solo chiaro da leggere - non usare in produzione!):

if (isempty($password)) {
  reloadPage();
} else {
  $query = "SELECT * FROM users where username = :username";
  if ($user = dbquery($query, $username)){
    if (checkpassword($password, $user.password)){
      login();
    } else {
      reloadPage("Invalid Username/Password");
    }
  } else {
    reloadPage("Invalid Username/Password");
  }
}

Questo darebbe il comportamento descritto, senza (assumendo che la funzione dbquery faccia una chiara distinzione tra dati di query e parametri forniti dall'utente) permettendo SQLi.

In una leggera parentesi, è improbabile che l'utilizzo di DROP TABLE in un test di penetrazione scenda bene con il cliente. È necessario utilizzare metodi più sicuri per verificare il potenziale difetto: ad esempio, l'utente DB corrente.

    
risposta data 05.07.2018 - 12:05
fonte

Leggi altre domande sui tag