2016-07-17 24 views
-1

ich eine Anwendung am Testen und stieß auf ein bisschen einzigartig Problem, das ich gefunden habe, dass Anwendungsparameter wieSQL-Injection in Klausel where

? $ Filter = Module + ne + ‚Buchungen‘ + senden und + Module + eq + ‚Verkehr‘ + und + (ContactID + eq + null + und + IsToBeShown + eq + true) + & $ orderby = Report

Natürlich kann ich hinzufügen und + 1 + eq + 1 und alle Ergebnisse angezeigt, aber wenn ich versuche, das zu beenden Frage wie mit (;, oder ') es gibt mir einen Fehler.

Art von nicht sicher, wie Sie die Abfrage beenden und eine Union-Klausel usw. hinzufügen, um Daten zu extrahieren.

Alle Gedanken sind willkommen

Antwort

0

Es Nähte, die $filter in where-Klausel verwendet wird, und wahrscheinlich einige andere hart codiert Bedingungen hinzugefügt wird. Um das Ergebnis zu erhalten, müssen Sie or 1 eq 1 (oder statt und) hinzufügen.

Es kann einen Unterschied machen, wenn andere Bedingungen vor oder nach $filter hinzugefügt werden.

Versuchen Sie $filter=union all select ... where 1 eq 1, aber denken Sie daran, dass die Spaltenliste in allen unionierten Abfragen identisch sein muss. Sie müssen die Abfrage nicht mit ;

beenden. Ersetzen Sie Leerzeichen mit +, ich schrieb Leerzeichen, um es einfacher zu lesen.

+0

Danke. Das war die erste Sache in meinem Kopf. aber das Problem ist: Ohne den Fehler aufzurufen weiß ich nicht den Namen von Spalten oder Tabellen. Der Fehler ist wie folgt: $ filter = union + all + selecti + 1 + von + users result s ist wie: Syntax error bei Position 9 in 'union all selecti 1 from users'. Syntaxfehler bei Position 9 in 'Union alle Selecti 1 von Benutzern'. Microsoft.Data.OData.ODataException – x0rcist

+0

So effektiv nicht, daß ich den Namen von Tabellen oder Spalten wissen – x0rcist

+0

'name FROM sys.tables' SELECT Tabellennamen zu bekommen, dann SELECT COLUMN_NAME, * VON INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'' – Adam