Security Security Security

Ik dacht dat we inmiddels toch slim genoeg waren om een basale beveiliging in te bouwen in een Internet site. Maar bij een code-review van een recent opgeleverd project kwam ik de volgende code tegen:

public string ValidateUser(string user, string password)
{
   string type ;
   OracleDataReader myReader ;
   string mySelectQuery = "SELECT TYPE FROM AUTORISATIE WHERE GEBRUIKERSNAAM = '"
       + user + "' AND WACHTWOORD = '" + password + "'" ;
    OracleCommand myCommand = new OracleCommand(mySelectQuery,SessieConnectie);
    myCommand.Connection.Open();
   myReader = myCommand.ExecuteReader();
   while (myReader.Read())
   {
       type = myReader.GetOracleString(0).ToString() ;
   }
   myReader.Close() ;
   return type;
}

Op een login.aspx kan ik de user en password opgeven. Vraag: welke 'user/password' combinatie levert als return 'BEHEERDER' op?

Published 02-26-2004 11:20 AM by Rene Schrieken

Comments

# re: Security Security Security

je kan in username een
' (quote) typen om de string te stoppen
en in password
OR 1 = 1
typen
dan krijg je een hele mooie query.
nu krijg je alle type users terug.
ook wel sql-injection genoemd.

Thursday, February 26, 2004 12:57 PM by Rene Schrieken

# re: Security Security Security

oh nu vergeet ik nog dat je in password
code moet tikken om de rest van de query uit te commenteren.
bij sql-server zou het
-- zijn
alles in password moet ook tussen "".

Thursday, February 26, 2004 1:00 PM by Rene Schrieken

# re: Security Security Security

Je kunt ook hetvolgende doen:

UN: 1' or '1'='1
PW: 1' or '1'='1

Dan krijg je een sql string als:

Select * from tabel where un='1' or '1'='1' and pw='1' or '1'='1'

Geeft dus altijd alles terug

als je bevoorbeeld de naam van iemand weet kun je proberen
UN: 1' or naam='henk
PW: 1' or '1'='1

Dit hoeft niet altijd te werken, omdat in dit geval "naam" de kollom naam moet zijn.

suc6!

Sunday, June 13, 2004 12:06 PM by Rene Schrieken