1 Oracle Es ist einfach, Oracle als relativ frühe RDBMS-Datenbank mit einem relativ großen Marktanteil einzuführen, die häufig in einigen sehr großen Datenbanken verwendet wird. Zusätzlich zu seiner guten Unterstützung für verschiedene SQL-Sprachen bietet es auch eine Vielzahl umfangreicher Pakete und gespeicherter Prozeduren und unterstützt sogar die Erstellung von Java und Bibliotheken. Solche leistungsstarken Funktionen bieten guten Komfort für Hacker.
Oracle selbst verfügt über viele Standardkonten und viele gespeicherte Prozeduren, die vom System erstellt werden. In den letzten Jahren wurden viele Oracle-Schwachstellen veröffentlicht, darunter Überlauf- und SQL-Sicherheitslücken einschließlich Injektionen. Hier ist die SQL-Injection-Sicherheitsanfälligkeit besonders wichtig, da in Oracle der erstellte gespeicherte Prozess ohne das Hinzufügen anderer Schlüsselwörter AUTHID CURRENT_USER beim Ausführen als Ersteller ausgeführt wird und die Öffentlichkeit keinen Zugriff auf diese gespeicherten Prozesse hat Es gibt eine Injektion in den integrierten gespeicherten Prozess, sodass normale Benutzer problemlos auf Oracle-Systemberechtigungen aktualisieren können. Oracle selbst verfügt über viele integrierte Konten, von denen einige über Standardkennwörter und CONNECT-Berechtigungen verfügen. Wenn der Oracle-Port nicht durch eine Firewall geschützt ist und eine Remoteverbindung möglich ist, kann das Standardkonto verwendet werden Wenn Sie sich aus der Ferne in das System einloggen und dann die SQL des gespeicherten Prozesses im System verwenden, um eine Schwachstelle einzuschleusen, stürzt das System ab. Natürlich ist für die Anmeldung bei Oracle eine SID erforderlich, aber es ist nicht schwierig, ein Kennwort festzulegen Standardmäßig können Sie tnscmd .pl verwenden, um die SID des Systems herauszufinden (in neueren Versionen wurde dieser Fehler behoben). Dies ist auch eine sehr klassische Art des Eindringens in Oracle.
2 Technischer Hintergrund zum Oracle Web Hacking
Die umfangreichen Systemtabellen von Oracle. Fast alle Informationen in Oracle werden in Systemtabellen gespeichert. Der aktuelle Status des Datenbankbetriebs, aktuelle Benutzerinformationen, aktuelle Datenbankinformationen, Informationen zu Datenbanken und Tabellen, auf die Benutzer zugreifen können ... Systemtabellen sind der Kernbestandteil der gesamten Datenbank Erhalten Sie alle Informationen, indem Sie die dringend benötigten Systemtabellen abfragen. Beispielsweise enthält sys.v_$option einige Informationen über die aktuelle Datenbank, z. B. ob sie Java unterstützt usw., all_tables enthält alle Tabelleninformationen, all_tab_colmuns enthält alle Spalteninformationen usw., was uns eine sehr große Möglichkeit bietet Der Einfachheit halber wird später beschrieben, wie Systemtabellen zum Abrufen vertraulicher Informationen verwendet werden.
Unter den verschiedenen Schwachstellen von Oracle ist es dringend erforderlich, über die Injektion gespeicherter Prozeduren zu sprechen. Tatsächlich gibt es kein Geheimnis. Gespeicherte Prozeduren und Funktionen empfangen diese dann zur Analyse und Ausführung an den Datenbankserver ausgewählt ist. Wenn das Schema in einer SQL-Zeichenfolge erstellt und implementiert wird, ist es einfach, Daten und Befehle zu vermischen, was zu einer SQL-Injection führt. Aber je nachdem, wo die Injektion erfolgt, ist auch die Art der Injektionsschwachstelle unterschiedlich. Oracle verwendet PL/SQL und die Schwachstelle tritt in DML-Sprachen wie select auf, da es die Implementierung mehrerer Sprachen nicht unterstützt, wenn Sie Ihre eigenen Sprachen wie GRANT DBA TO LOVEHSELL und andere DDL-Sprachen ausführen möchten , müssen Sie Ihre eigenen Funktionen oder gespeicherten Prozeduren erstellen. Wenn Sie nicht über die entsprechenden Berechtigungen verfügen, können Sie auch die Cursorinjektion verwenden und das dbms_sql-Paket verwenden, um Einschränkungen zu umgehen. Bei den meisten Injektionen handelt es sich um die oben genannten begrenzten Injektionen. Sie müssen sich auf einige andere von Ihnen erstellte Pakete oder Cursor verlassen, um den Zweck der Erhöhung der Berechtigungen zu erreichen. Es gibt jedoch immer noch einige sehr häufige Schwachstellen, aber die Injektionsumgebung ist sehr locker Die Injektion des anonymen pl/sql-Blocks zwischen begin und end kann direkt und ohne Einschränkungen in mehrere Wörter eingefügt werden. Es ist ersichtlich, dass diese Art von leuchtender Schwachstelle entsteht Das Problem für unsere Web-Injection-Technologie hat solche Brillanz zurückgebracht.
Okay, die oben genannten sind einige der anstößigen Technologien von Oracle, aber in vielen aktuellen Umgebungen sind Webdienste für die Außenwelt offen und die Backend-Boss-Datenbank ist durch eine Firewall geschützt. Es ist unmöglich, zu viele detaillierte Informationen der Datenbank zu verlieren , und es ist nicht mehr möglich, sich direkt in die Datenbank einzuloggen. Zu diesem Zeitpunkt ist es an der Zeit, über die Nutzung von Web-gestoppten Schwachstellen nachzudenken, um die Hintergrunddatenbank anzugreifen. Schauen wir uns nun an, wie man Injektionen in einer Oracle-Webumgebung entwickelt. Oracle kann in verschiedenen Webumgebungen gut funktionieren, und die Auswirkungen verschiedener Webumgebungen auf unsere Injektionen sind nicht groß. In asp, .net und jsp ist dies der Fall Eingehende Parameter werden überhaupt nicht gefiltert, aber da .net- und JSP-Sprachen starke Kategoriesprachen sind, können beim Akzeptieren von Parametern Fehler auftreten, selbst wenn die SQL-Sprache nicht gefiltert wird Die String-Klasse verfügt über mehr Parameter. In der PHP-Umgebung werden alle ' als ' maskiert, in der Oracle-Umgebung wird ' nicht maskiert (das korrekte Escape in der Oracle-Umgebung sollte '' sein), aber in unserem eigenen Die Verwendung von ' im Injektionsdiskurs kann kann durch die Umwandlung in „beschädigt werden, sodass es während der Injektion nicht verwendet werden kann“. Außer, dass es in der Webumgebung keine Einschränkungen gibt. In Bezug auf die Datenbank gilt: Wenn der Diskurs im Parametermodus ausgeführt wird, kann er nicht injiziert werden, es sei denn, der String-Verbindungsmodus wird verwendet (da der String-Verbindungsmodus relativ einfach ist und aus einigen historischen Gründen viele Programmierer diese Form oft bevorzugen). ). FehlerDann können wir die Kategorie des aktuellen Diskurses anhand des Fehlers leicht beurteilen, worauf später noch eingegangen wird. Dies ist im anonymen pl/sql-Block relativ selten, aber es ist nicht ausgeschlossen, dass es für eine solche Injektion keine Begrenzung gibt. Sie können mehrere Konversationen implementieren und alles tun, was sich nicht von der lokalen Anmeldung unterscheidet.
3 Grundideen des Oracle Web Hacking
Im nächsten Teil geht es darum, wie man das Ziel bestimmt. Die Bestimmung der Injektionsparameter ist die Frage, ob die Datenbank zu Oracle gehört unterstützt die Interpretation von --category, unterstützt jedoch keine separate Implementierung. Durch den Zugriff auf diese Tabellen können Sie auch feststellen, ob sie zu Oracle gehören B. utl_http.request, kleine Details können auch zur Unterscheidung von Systemen verwendet werden. Beispielsweise ist || ein Join-Symbol in anderen Datenbanken. Der Grund dafür ist chr(123)| |chr(123)=chr(123)|. |chr(123) Wenn es erfolgreich ausgeführt werden kann, sollte es Oracle sein. Darüber hinaus verarbeiten einige Skripte die Fehlermeldung nicht, wenn ein Datenbankabfragefehler auftritt, und können auch auslaufen Die eigentliche Hintergrunddatenbank ist deutlich zu erkennen.
Das nächste, was dringend bestimmt werden muss, ist die Art des Injektionspunkts. Normalerweise sind die von uns eingegebenen Parameter entweder numerisch oder einfach Zeichen (was viele andere als Suchtyp-Injektion bezeichnen, sollte eigentlich als Zeichen klassifiziert werden). Zahlenkategorie, denken Sie überhaupt nicht darüber nach, Interpretationszeichen hinzuzufügen, um die Äußerung genau abzuschließen. Wenn es sich um die Zeichenkategorie handelt, müssen Sie darüber nachdenken, wie die gesamte Äußerung korrekt ist. Normalerweise fügen Sie diese Injektionszeichen hinzu, um Ihre eigene Injektionssituation zu organisieren. In einigen komplexen Situationen, z. B. wenn ein Parameter in mehreren SQL-Wörtern und Logik auftritt, müssen Sie die Injektionswörter sorgfältig strukturieren, die zur Situation passen. Denken Sie daran, dass wir nur eine vollständige Umgebung benötigen, die verschiedene SQL-Befehle problemlos anordnen kann.