Quali payload SQL possono essere iniettati per un campo numerico?

2

Ho un parametro (pi_apk_version_code) che sembra essere vulnerabile a SQL Injection (la squadra è divisa su questo). La colonna del database corrispondente a questo parametro accetta solo valori numerici. Ora, se un payload "; o 1 = 1" viene dato manualmente come input per questo parametro, l'output è un codice di errore Oracle (ORA-01722: numero non valido). Lo stesso input fornito con un fuzzer non genera un codice di errore Oracle, ma restituisce i risultati desiderati dalla query.

  1. Questo indicativo di SQL injection è presente?
  2. Se pensi che SQL injection sia presente, quali sono i payload che fornirai per sfruttarlo in modo tale da convincerti che l'injection SQL sia realmente presente?

[Modifica]

SQLmap è stato eseguito per questo e non sono stati rilevati problemi.

[Modifica]

Domande PL / SQL messe a fuoco (pi_apk_OS e pi_apk_version_code sono input provenienti dal client):

    SELECT COUNT(1)
          INTO l_count
          FROM APK_VERSION_MASTER
         WHERE apk_OS = pi_apk_OS
              --AND  apk_version_code = pi_apk_version_code
           AND Status = 'A';
     

        OPEN rc_result FOR
          SELECT apk_version_code,
                 apk_version_string,
                 (CASE
                   --WHEN pi_apk_version_code < apk_version_code THEN
                   WHEN pi_apk_version_code < lowest_version_code THEN 
                    'Y'
                   ELSE
                    'N'
                 END) AS is_Mandatory,
                 path,
                 upgrade_playstore,
                 l_error_code return_code,
                 l_error_message return_message
            FROM APK_VERSION_MASTER
           WHERE apk_OS = pi_apk_OS
             AND apk_version_code = (SELECT MAX(apk_version_code)
                                       FROM APK_VERSION_MASTER b
                                      WHERE b.apk_OS = pi_apk_OS
                                        AND Status = 'A');
    
posta Earthling 10.05.2016 - 10:56
fonte

1 risposta

1

Dipende dal codice della tua applicazione se questo input può essere utilizzato in modo improprio, non sul database o sulla query (ignorando le query parametrizzate).

Se l'applicazione rifiuta tutti i numeri tranne quelli validi, non è possibile che l'input possa essere utilizzato in modo errato, poiché nella query saranno inseriti solo numeri "innocui".

Se l'applicazione non esegue la convalida corretta e inserisce l'input direttamente nell'istruzione SQL, è possibile che SQL-injection sia possibile. Non hai incluso la tua query quindi inventerò un esempio. La seguente query dovrebbe elencare tutti gli articoli di una determinata categoria:

SELECT name FROM articles WHERE category = 1

Invece di 1 il nostro input è 1 UNION...

SELECT name FROM articles WHERE category = 1 UNION SELECT password FROM users

Ciò restituirebbe una lista molto più grande ...

    
risposta data 10.05.2016 - 13:47
fonte

Leggi altre domande sui tag