SQL injection usando solo la sintassi di Scala?

-6

C'è un modo per eseguire un'iniezione SQL usando solo la sintassi di Scala (non importando alcun Java)? Da quello che ho visto online tutti gli esempi (come questo ) erano basati sull'importazione di oggetti Java e quindi sull'utilizzo dell'iniezione.

    
posta boaz 28.04.2016 - 10:44
fonte

2 risposte

0

Slick

Il codice Scala è vulnerabile a SQLi quando si utilizza Slick con #$ per inserire direttamente il letterale in SQL:

NON SICURO

 def slickInterpolationInsert(firstName: String, lastName: String, email: String, password: String) = db.withSession {
  implicit session: Session =>
    sqlu"insert into users (first_name, last_name, email, password) values (#$firstName, #$lastName, #$email, #$password)".execute
  }

Il modo sicuro sarebbe:

SAFE

 def slickInterpolationInsert(firstName: String, lastName: String, email: String, password: String) = db.withSession {
  implicit session: Session =>
    sqlu"insert into users (first_name, last_name, email, password) values ($firstName, $lastName, $email, $password)".execute
  }

StaticQuery

Un altro modo pericoloso potrebbe essere l'utilizzo della classe StaticQuery:

NON SICURO

def slickStaticQuery(email: String) = db.withSession { implicit session: Session =>
    (StaticQuery.u + "update users set first_name = 'buddy' where email = '" + email + "'").execute
  }

Il modo sicuro sarebbe:

SAFE

def slickStaticQueryBindVariables(email: String) = db.withSession { implicit session: Session =>
    val query = StaticQuery[String, String] + "select email from users where email = ? "
    query(email)
  }

Risposte tratte da: link

    
risposta data 09.05.2016 - 10:17
fonte
2

Penso che tu stia confondendo due cose:

  1. Il codice vulnerabile a un attacco di SQL injection.
  2. La cosa che sta eseguendo un attacco SQL injection.

La pagina di esempio a cui ti colleghi ha il codice Java di tipo # 1 e usa il programma SQLMap (scritto in Python) per il tipo # 2 . Sembra che tu stia chiedendo il tipo # 2, ma lasciali passare uno per uno.

# 1: il codice vulnerabile all'attacco SQL injection

Il codice in # 1 potrebbe essere scritto in qualsiasi lingua - per una vasta gamma di esempi (ma non per Scala) vedi questo sito . Se per qualche ragione desideri scrivere codice vulnerabile in Scala, questo potrebbe essere fatto (anche se non riesco a capire perché vuoi farlo).

Per prima cosa è necessario connettersi a un database. Non sono un programmatore di Scala, ma la mia comprensione è che questo viene solitamente fatto con JDBC e importando alcune librerie Java, quindi questo vi infrange "non importa nessuna regola Java". Questa pagina ti dà una bella passeggiata.

Quindi devi introdurre una vulnerabilità. Questo viene fatto (di solito non intenzionalmente) concatenando dati non fidati (cioè dati dall'utente, come i valori inseriti in un modulo HTML) in un'espressione SQL. Vediamo un caso di uno script di accesso in cui i dati non attendibili sono username e password :

//Warning! This is code deliberately made vulnerable to SQL injection.
val sql = "SELECT * FROM users WHERE username = '" + username + 
  "' AND password = '" + password + "'"
val resultSet = statement.executeQuery(sql)

Questo è il punto in cui può avvenire l'iniezione effettiva - considera cosa succederebbe se la variabile password avesse il valore ' OR '1' = '1 .

# 2: la cosa che esegue l'attacco SQL injection

Il numero # 2 è (di solito) qualcosa che invia richieste HTTP elaborate con il vettore di attacco (come ' OR '1' = '1 ) in esse. Potresti scrivere un programma facendo ciò in qualsiasi lingua, ma potresti anche usare un programma esistente che invia richieste HTTP. Il programma più comune è - sorpresa - un browser web. Il modo più semplice per verificare le ovvie vulnerabilità di SQLi è semplicemente inserire il vettore di attacco in una forma (che è di tipo ' OR '1' = '1 nel campo della password), premere invio e vedere cosa succede.

Se vuoi automatizzarlo, puoi scrivere un programma in Scala. Non ti fornirò alcun codice per questo, ma questa domanda su Stack Overflow dovrebbe ti aiuta ad essere subito operativo con l'invio di richieste HTTP con Scala.

    
risposta data 05.05.2016 - 15:13
fonte

Leggi altre domande sui tag